[OS X Emacs] Re: reftex configuration problem?

Thomas S. Dye tsd at tsdye.com
Tue Jul 21 13:21:47 EDT 2009


Interesting.  Does 'read-char-exclusive' destroy the match-string?  If  
I step through the replacements, by answering 'y' to the prompts, the  
first several responses add replacement text to the wrong spot near  
the top of the file, but the last response makes the replacement  
correctly.  From my limited understanding, it appears that the match- 
string is still there, but that perhaps the data structure that holds  
it isn't what reftex expects.

Thanks for taking the time to look at this and for initiating the  
steps needed to fix it.

All the best,
Tom

Thomas S. Dye, Ph.D.
T. S. Dye & Colleagues, Archaeologists, Inc.
Phone: (808) 529-0866 Fax: (808) 529-0884
http://www.tsdye.com


On Jul 21, 2009, at 6:48 AM, David Reitter wrote:

> Thank you, I understand now.
>
> The problem is that in `reftex-query-index-phrase', the call to  
> `read-char-exclusive'  destroys the match-string, resulting in the  
> wrong region being modified.
>
> This seems to occur in read_filtered_event(), but I don't know why  
> and where.
>
> Wrapping the call to read-char-exclusive in `save-match-string'  
> prevents the bug (see below), but of course if would be interesting  
> to see why the match string gets destroyed in the first place.  I  
> haven't found anything obvious in Aquamacs (use of "search- 
> forward"), so it's got to be some form of configuration that we're  
> using.
>
> FWIW It's almost certainly a bug in the underlying Emacs.
>
>
> --
> http://aquamacs.org -- Aquamacs: Emacs on Mac OS X
> http://aquamacs.org/donate -- Could we help you? Return the favor  
> and support the Aquamacs Project!
>
>
> (defun reftex-query-index-phrase (phrase macro-fmt &optional
>                                         index-key repeat as-words)
>  "Search through buffer for PHRASE, and offer to replace it with an  
> indexed
> version.  The index version is derived by applying `format' with  
> MACRO-FMT
> to INDEX-KEY or PHRASE.  When REPEAT is non-nil, the PHRASE is  
> inserted
> again after the macro.
> AS-WORDS means, the search for PHRASE should require word boundaries  
> at
> both ends."
>  (let* ((re (reftex-index-make-phrase-regexp phrase as-words 'allow- 
> newline))
>         (case-fold-search reftex-index-phrases-case-fold-search)
>         (index-keys (split-string
>                      (or index-key phrase)
>                      reftex-index-phrases-logical-or-regexp))
>         (nkeys (length index-keys))
>         (ckey (nth 0 index-keys))
>         (all-yes nil)
>         match rpl char (beg (make-marker)) (end (make-marker)) mathp)
>    (move-marker beg 1)
>    (move-marker end 1)
>    (unwind-protect
>        (while (re-search-forward re nil t)
>          (catch 'next-match
>            (if (reftex-in-comment)
>                (throw 'next-match nil))
>            (if (and (fboundp reftex-index-verify-function)
>                     (not (funcall reftex-index-verify-function)))
>                (throw 'next-match nil))
>            (setq match (match-string 0))
>            (setq mathp
>                  (save-match-data
>                    (condition-case nil (texmathp) (error nil))))
>            (setq beg (move-marker beg (match-beginning 0))
>                  end (move-marker end (match-end 0)))
>            (if (and reftex-index-phrases-skip-indexed-matches
>                     (save-match-data
>                       (reftex-index-phrase-match-is-indexed beg
>                                                             end)))
>                (throw 'next-match nil))
>            (reftex-highlight 0 (match-beginning 0) (match-end 0))
>            (setq rpl
>                  (save-match-data
>                    (reftex-index-make-replace-string
>                     macro-fmt (match-string 0) ckey repeat mathp)))
>            (while
>                (not
>                 (catch 'loop
>                   (message "REPLACE: %s?   (yn!qoe%s?)"
>                            rpl
>                            (if (> nkeys 1)
>                                (concat "1-" (int-to-string nkeys))
>                              ""))
> 		   (setq char (if all-yes ?y
> 				(save-match-data (read-char-exclusive))))
>                   (cond ((member char '(?y ?Y ?\ ))
>                          ;; Yes!
>                          (replace-match rpl t t)
>                          (incf replace-count)
>                          ;; See if we should insert newlines to  
> shorten lines
>                          (and reftex-index-phrases-wrap-long-lines
>                               (reftex-index-phrases-fixup-line beg  
> end))
>                          (throw 'loop t))
>                         ((member char '(?n ?N ?\C-h ?\C-?));; FIXME:  
> DEL
>                          ;; No
>                          (throw 'loop t))
>                         ((equal char ?!)
>                          ;; Yes for all in this buffer
>                          (setq all-yes t))
>                         ((equal char ?q)
>                          ;; Stop this one in this file
>                          (goto-char (point-max))
>                          (throw 'loop t))
>                         ((equal char ?Q)
>                          ;; Stop this one
>                          (throw 'no-more-files t))
>                         ((equal char ?s)
>                          (save-buffer))
>                         ((equal char ?S)
>                          (reftex-save-all-document-buffers))
>                         ((equal char ?\C-g)
>                          (keyboard-quit))
>                         ((member char '(?o ?O))
>                          ;; Select a differnt macro
>                          (let* ((nc (reftex-index-select-phrases- 
> macro 2))
>                                 (macro-data
>                                  (cdr (assoc nc reftex-index-phrases- 
> macro-data)))
>                                 (macro-fmt (car macro-data))
>                                 (repeat (nth 1 macro-data)))
>                            (if macro-data
>                                (setq rpl (save-match-data
>                                            (reftex-index-make- 
> replace-string
>                                             macro-fmt match
>                                             ckey repeat mathp)))
>                              (ding))))
>                         ((equal char ?\?)
>                          ;; Help
>                          (with-output-to-temp-buffer "*Help*"
>                            (princ reftex-index-phrases-help)))
>                         ((equal char ?\C-r)
>                          ;; Recursive edit
>                          (save-match-data
>                            (save-excursion
>                              (message "%s"
>                               (substitute-command-keys
>                                "Recursive edit.  Resume with \\[exit- 
> recursive-edit]"))
>                              (recursive-edit))))
>                         ((equal char ?e)
>                          (setq rpl (read-string "Edit: " rpl)))
>                         ((equal char ?0)
>                          (setq ckey (or index-key phrase)
>                                rpl (save-match-data
>                                      (reftex-index-make-replace-string
>                                       macro-fmt match ckey repeat  
> mathp))))
>                         ((and (> char ?0)
>                               (<= char (+ ?0 nkeys)))
>                          (setq ckey (nth (1- (- char ?0)) index-keys)
>                                rpl (save-match-data
>                                      (reftex-index-make-replace-string
>                                       macro-fmt match ckey repeat  
> mathp))))
>                         (t (ding)))
>                   nil)))))
>      (message "")
>      (move-marker beg nil)
>      (move-marker end nil)
>      (setq all-yes nil)
>      (reftex-unhighlight 0))))
>
>
>
>
>
> On Jul 21, 2009, at 4:21 PM, Thomas S. Dye wrote:
>
>> In the example, reftex is supposed to take the string "text" from  
>> the *.rip file and replace all instances of the string in a  
>> document's *.tex file(s) with some sort of indexing markup,  
>> indicated by the possibilities listed at the top of the *.rip file  
>> and indexed by the letter at the start of the line that contains  
>> "text" in the *.rip file.  Reftex summarizes what it intends to do  
>> when given the Ctrl-x, Ctrl-i command; in this example it says it  
>> will replace one instance of "text" with "\index{text}text".  What  
>> happens, only in Aquamacs and not in Carbon Emacs on the Mac or in  
>> emacs running on Gnu/Linux, is that more than one "replacement" is  
>> made, with the additional, spurious "replacements" made near the  
>> top of the file.  In the instance I reported below, there is one  
>> spurious replacement; this number is variable, however, and I have  
>> had up to three or four spurious replacements in Aquamacs, one  
>> following the other near the top of the file, as in the example  
>> below.
>>
>> If this is not some kind of configuration problem (I agree with you  
>> that it probably is not), then the mechanism that reftex uses to  
>> keep track of replacement targets either relies on emacs behavior  
>> that Aquamacs changes, or the mechanism itself, perhaps a list of  
>> file names and offsets, gets hosed somewhere between reporting what  
>> it is going to do and actually doing it.  If this is what happens,  
>> then my tests and Ralf Angeli's report indicate that it is Aquamacs  
>> doing the hosing, rather than the underlying emacs.
>>
>> I'm afraid I can't suggest anything in the way of a fix.  I read a  
>> couple of Paul Graham's Lisp books shortly after they were  
>> published when I was programming in a dialect, now defunct, called  
>> Lisp-Stat, but my efforts there were fairly crude, far short of the  
>> skill level needed to contribute to efforts along the lines of  
>> emacs, reftex, and Aquamacs, which are all terrific (and complex)  
>> pieces of software.
>>
>> All the best,
>> Tom
>>
>> Thomas S. Dye, Ph.D.
>> T. S. Dye & Colleagues, Archaeologists, Inc.
>> Phone: (808) 529-0866 Fax: (808) 529-0884
>> http://www.tsdye.com
>>
>>
>> On Jul 20, 2009, at 8:05 PM, David Reitter wrote:
>>
>>> I don't use reftex much and can't tell from your message what the  
>>> desired result would be, i.e. what the bug is.  All you are saying  
>>> is "Note the "replacement" in the top line of the file.".
>>>
>>> I don't think there is much in the way of configuration for reftex  
>>> that Aquamacs provides.  What kind of configuration do you suggest?
>>>
>>>
>>> --
>>> http://aquamacs.org -- Aquamacs: Emacs on Mac OS X
>>> http://aquamacs.org/donate -- Could we help you? Return the favor  
>>> and support the Aquamacs Project!
>>>
>>>
>>> On Jul 21, 2009, at 3:31 AM, Thomas S. Dye wrote:
>>>
>>>> Aloha all,
>>>>
>>>> I installed Carbon Emacs and verified that the reftex behavior I  
>>>> reported below does not occur there.
>>>> It appears to be related to Aquamacs.
>>>>
>>>> All the best
>>>>
>>>> Tom
>>>>
>>>> Thomas S. Dye, Ph.D.
>>>> T. S. Dye & Colleagues, Archaeologists, Inc.
>>>> Phone: (808) 529-0866 Fax: (808) 529-0884
>>>> http://www.tsdye.com
>>>>
>>>>
>>>> Begin forwarded message:
>>>>
>>>>> From: "Thomas S. Dye" <tsd at tsdye.com>
>>>>> Date: July 19, 2009 10:21:20 AM HST
>>>>> To: Emacs on Mac OS X Mailing List <macosx- 
>>>>> emacs at email.esm.psu.edu>
>>>>> Subject: reftex configuration problem?
>>>>>
>>>>> Aloha all,
>>>>>
>>>>> reftex index phrases doesn't behave as I expect.
>>>>>
>>>>> \documentclass{article}
>>>>>
>>>>> \begin{document}
>>>>> Some text.
>>>>> \end{document}
>>>>>
>>>>> Ctrl-C \ on "text."  Mark entry as i.
>>>>>
>>>>> % -*- mode: reftex-index-phrases; TeX-master: "test_reftex.tex" - 
>>>>> *-
>>>>> %                              Key      Macro Format             
>>>>> Repeat
>>>>> %---------------------------------------------------------------------
>>>>> INDEX_MACRO_DEFINITION:	i	\index{%s}          	t
>>>>> INDEX_MACRO_DEFINITION:	g	\glossary{%s}       	t
>>>>> %---------------------------------------------------------------------
>>>>>
>>>>>
>>>>> i	text
>>>>>
>>>>> Ctrl-C Ctrl-i indicates one match in one file.
>>>>> Ctrl-C Ctrl-a ! replaces two occurrences
>>>>>
>>>>> \documentc\index{text}text{article}
>>>>>
>>>>> \begin{document}
>>>>> Some \index{text}text.
>>>>> \end{document}
>>>>>
>>>>> Note the "replacement" in the top line of the file.
>>>>>
>>>>> I posted this message to gnu.emacs.help and Ralf Angeli responded:
>>>>>
>>>>> I cannot reproduce this issue with Emacs on GNU/Linux.  Does it  
>>>>> work in
>>>>> your case if you use Emacs (perhaps started with -Q) instead of
>>>>> Aquamacs?
>>>>>
>>>>> I launched Aquamacs like this:
>>>>>
>>>>> "/Applications/Aquamacs Emacs.app/Contents/MacOS/Aquamacs Emacs"  
>>>>> -q
>>>>>
>>>>> and got the same results.
>>>>>
>>>>> Perhaps reftex isn't configured properly in Aquamacs?
>>>>>
>>>>> All the best,
>>>>> Tom
>>>
>>> _____________________________________________________________
>>> MacOSX-Emacs mailing list
>>> MacOSX-Emacs at email.esm.psu.edu
>>> http://email.esm.psu.edu/mailman/listinfo/macosx-emacs
>>> List Archives: http://dir.gmane.org/gmane.emacs.macintosh.osx
>>
>> _____________________________________________________________
>> MacOSX-Emacs mailing list
>> MacOSX-Emacs at email.esm.psu.edu
>> http://email.esm.psu.edu/mailman/listinfo/macosx-emacs
>> List Archives: http://dir.gmane.org/gmane.emacs.macintosh.osx
>
> _____________________________________________________________
> MacOSX-Emacs mailing list
> MacOSX-Emacs at email.esm.psu.edu
> http://email.esm.psu.edu/mailman/listinfo/macosx-emacs
> List Archives: http://dir.gmane.org/gmane.emacs.macintosh.osx

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://email.esm.psu.edu/pipermail/macosx-emacs/attachments/20090721/0a27515e/attachment.html>


More information about the MacOSX-Emacs mailing list