]> code.delx.au - gnu-emacs/blobdiff - lisp/textmodes/reftex-dcr.el
(org-ctrl-c-ctrl-c): Improved documentation string.
[gnu-emacs] / lisp / textmodes / reftex-dcr.el
index 82bdad87f71b1a7a173e6e38026f2bd2558682c3..1e60b8e663e9fffc25450aa2c8ebd7a7ec2c76f4 100644 (file)
@@ -1,8 +1,9 @@
-;;; reftex-dcr.el - Viewing cross references and citations with RefTeX
-;; Copyright (c) 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
+;;; reftex-dcr.el --- viewing cross references and citations with RefTeX
+;; Copyright (C) 1997, 1998, 1999, 2000, 2003, 2004, 2005,
+;;   2006 Free Software Foundation, Inc.
 
-;; Author:     Carsten Dominik <dominik@strw.LeidenUniv.nl>
-;; Version: 4.10
+;; Author: Carsten Dominik <dominik@science.uva.nl>
+;; Version: 4.31
 ;;
 
 ;; This file is part of GNU Emacs.
 
 ;; You should have received a copy of the GNU General Public License
 ;; along with GNU Emacs; see the file COPYING.  If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
+
+;;; Commentary:
+
+;;; Code:
 
 (eval-when-compile (require 'cl))
 (provide 'reftex-dcr)
 (require 'reftex)
 ;;;
 
-(defun reftex-view-crossref (&optional arg auto-how)
+(defun reftex-view-crossref (&optional arg auto-how fail-quietly)
   "View cross reference of macro at point.  Point must be on the KEY
-argument.  When at at `\ref' macro, show corresponding `\label'
+argument.  When at at `\\ref' macro, show corresponding `\\label'
 definition, also in external documents (`xr').  When on a label, show
 a locations where KEY is referenced.  Subsequent calls find additional
-locations.  When on a `\cite', show the associated `\bibitem' macro or
-the BibTeX database entry.  When on a `\bibitem', show a `\cite' macro
-which uses this KEY. When on an `\index', show other locations marked
+locations.  When on a `\\cite', show the associated `\\bibitem' macro or
+the BibTeX database entry.  When on a `\\bibitem', show a `\\cite' macro
+which uses this KEY. When on an `\\index', show other locations marked
 by the same index entry.
 To define additional cross referencing items, use the option
 `reftex-view-crossref-extra'.  See also `reftex-view-crossref-from-bibtex'.
@@ -47,56 +52,57 @@ to the functions `reftex-view-cr-cite' and `reftex-view-cr-ref'."
   (interactive "P")
   ;; See where we are.
   (let* ((macro (car (reftex-what-macro-safe 1)))
-         (key (reftex-this-word "^{}%\n\r,"))
-        dw)
+         (key (reftex-this-word "^{}%\n\r, \t"))
+         dw)
 
     (if (or (null macro) (reftex-in-comment))
-       (error "Not on a crossref macro argument"))
-
-    (setq reftex-call-back-to-this-buffer (current-buffer))
-
-    (cond
-     ((string-match "\\`\\\\cite\\|cite\\*?\\'" macro)
-      ;; A citation macro: search for bibitems or BibTeX entries
-      (setq dw (reftex-view-cr-cite arg key auto-how)))
-     ((string-match "\\`\\\\ref\\|ref\\(range\\)?\\*?\\'" macro)
-      ;; A reference macro: search for labels
-      (setq dw (reftex-view-cr-ref arg key auto-how)))
-     (auto-how nil)  ;; No further action for automatic display (speed)
-     ((or (equal macro "\\label")
-         (member macro reftex-macros-with-labels))
-      ;; A label macro: search for reference macros
-      (reftex-access-scan-info arg)
-      (setq dw (reftex-view-regexp-match
-               (format reftex-find-reference-format (regexp-quote key))
-               4 nil nil)))
-     ((equal macro "\\bibitem")
-      ;; A bibitem macro: search for citations
-      (reftex-access-scan-info arg)
-      (setq dw (reftex-view-regexp-match
-               (format reftex-find-citation-regexp-format (regexp-quote key))
-               3 nil nil)))
-     ((member macro reftex-macros-with-index)
-      (reftex-access-scan-info arg)
-      (setq dw (reftex-view-regexp-match
-               (format reftex-find-index-entry-regexp-format
-                       (regexp-quote key))
-               3 nil nil)))
-     (t 
-      (reftex-access-scan-info arg)
-      (catch 'exit
-       (let ((list reftex-view-crossref-extra)
-             entry mre action group)
-         (while (setq entry (pop list))
-           (setq mre (car entry)
-                 action (nth 1 entry)
-                 group (nth 2 entry))
-           (when (string-match mre macro)
-             (setq dw (reftex-view-regexp-match 
-                       (format action key) group nil nil))
-             (throw 'exit t))))
-       (error "Not on a crossref macro argument"))))
-    (if (and (eq arg 2) (windowp dw)) (select-window dw))))
+       (or fail-quietly
+           (error "Not on a crossref macro argument"))
+
+      (setq reftex-call-back-to-this-buffer (current-buffer))
+      
+      (cond
+       ((string-match "\\`\\\\cite\\|cite\\*?\\'\\|bibentry" macro)
+       ;; A citation macro: search for bibitems or BibTeX entries
+       (setq dw (reftex-view-cr-cite arg key auto-how)))
+       ((string-match "\\`\\\\ref\\|ref\\(range\\)?\\*?\\'" macro)
+       ;; A reference macro: search for labels
+       (setq dw (reftex-view-cr-ref arg key auto-how)))
+       (auto-how nil)  ;; No further action for automatic display (speed)
+       ((or (equal macro "\\label")
+           (member macro reftex-macros-with-labels))
+       ;; A label macro: search for reference macros
+       (reftex-access-scan-info arg)
+       (setq dw (reftex-view-regexp-match
+                 (format reftex-find-reference-format (regexp-quote key))
+                 4 nil nil)))
+       ((equal macro "\\bibitem")
+       ;; A bibitem macro: search for citations
+       (reftex-access-scan-info arg)
+       (setq dw (reftex-view-regexp-match
+                 (format reftex-find-citation-regexp-format (regexp-quote key))
+                 4 nil nil)))
+       ((member macro reftex-macros-with-index)
+       (reftex-access-scan-info arg)
+       (setq dw (reftex-view-regexp-match
+                 (format reftex-find-index-entry-regexp-format
+                         (regexp-quote key))
+                 3 nil nil)))
+       (t 
+       (reftex-access-scan-info arg)
+       (catch 'exit
+         (let ((list reftex-view-crossref-extra)
+               entry mre action group)
+           (while (setq entry (pop list))
+             (setq mre (car entry)
+                   action (nth 1 entry)
+                   group (nth 2 entry))
+             (when (string-match mre macro)
+               (setq dw (reftex-view-regexp-match 
+                         (format action key) group nil nil))
+               (throw 'exit t))))
+         (error "Not on a crossref macro argument"))))
+      (if (and (eq arg 2) (windowp dw)) (select-window dw)))))
      
 (defun reftex-view-cr-cite (arg key how)
   ;; View crossreference of a ref cite.  HOW can have the values 
@@ -110,55 +116,58 @@ to the functions `reftex-view-cr-cite' and `reftex-view-cr-ref'."
   (if (eq how 'tmp-window)
       ;; Remember the window configuration
       (put 'reftex-auto-view-crossref 'last-window-conf 
-          (current-window-configuration)))
+           (current-window-configuration)))
 
-  (let (files size item (pos (point)) (win (selected-window)) pop-win)
+  (let (files size item (pos (point)) (win (selected-window)) pop-win
+              (bibtype (reftex-bib-or-thebib)))
     ;; Find the citation mode and the file list
     (cond
-     ((assq 'bib (symbol-value reftex-docstruct-symbol))
+;     ((assq 'bib (symbol-value reftex-docstruct-symbol))
+     ((eq bibtype 'bib)
       (setq item nil
-           files (reftex-get-bibfile-list)))
-     ((assq 'thebib (symbol-value reftex-docstruct-symbol))
+            files (reftex-get-bibfile-list)))
+;     ((assq 'thebib (symbol-value reftex-docstruct-symbol))
+     ((eq bibtype 'thebib)
       (setq item t
-           files (reftex-uniquify
-                  (mapcar 'cdr
-                          (reftex-all-assq 
-                           'thebib (symbol-value reftex-docstruct-symbol))))))
+            files (reftex-uniquify
+                   (mapcar 'cdr
+                           (reftex-all-assq 
+                            'thebib (symbol-value reftex-docstruct-symbol))))))
      (reftex-default-bibliography
       (setq item nil
-           files (reftex-default-bibliography)))
+            files (reftex-default-bibliography)))
      (how)  ;; don't throw for special display
      (t (error "Cannot display crossref")))
 
     (if (eq how 'echo)
-       ;; Display in Echo area
-       (reftex-echo-cite key files item)
+        ;; Display in Echo area
+        (reftex-echo-cite key files item)
       ;; Display in a window
       (if (not (eq how 'tmp-window))
-         ;; Normal display
-         (reftex-pop-to-bibtex-entry key files nil t item)
-       ;; A temporary window
-       (condition-case nil
-           (reftex-pop-to-bibtex-entry key files nil t item)
-         (error (goto-char pos)
-                (message "cite: no such citation key %s" key)
-                (error "")))
-       ;; Resize the window
-       (setq size (max 1 (count-lines (point)
-                                      (reftex-end-of-bib-entry item))))
-       (let ((window-min-height 2))
-         (shrink-window (1- (- (window-height) size)))
-         (recenter 0))
-       ;; Arrange restoration
-       (add-hook 'pre-command-hook 'reftex-restore-window-conf))
-
-       ;; Normal display in other window
+          ;; Normal display
+          (reftex-pop-to-bibtex-entry key files nil t item)
+        ;; A temporary window
+        (condition-case nil
+            (reftex-pop-to-bibtex-entry key files nil t item)
+          (error (goto-char pos)
+                 (message "cite: no such citation key %s" key)
+                 (error "")))
+        ;; Resize the window
+        (setq size (max 1 (count-lines (point)
+                                       (reftex-end-of-bib-entry item))))
+        (let ((window-min-height 2))
+          (shrink-window (1- (- (window-height) size)))
+          (recenter 0))
+        ;; Arrange restoration
+        (add-hook 'pre-command-hook 'reftex-restore-window-conf))
+
+        ;; Normal display in other window
       (add-hook 'pre-command-hook 'reftex-highlight-shall-die)
       (setq pop-win (selected-window))
       (select-window win)
       (goto-char pos)
       (when (equal arg 2)
-       (select-window pop-win)))))
+        (select-window pop-win)))))
 
 (defun reftex-view-cr-ref (arg label how)
   ;; View crossreference of a ref macro.  HOW can have the values 
@@ -172,47 +181,47 @@ to the functions `reftex-view-cr-cite' and `reftex-view-cr-ref'."
   (if (eq how 'tmp-window)
       ;; Remember the window configuration
       (put 'reftex-auto-view-crossref 'last-window-conf 
-          (current-window-configuration)))
+           (current-window-configuration)))
 
   (let* ((xr-data (assoc 'xr (symbol-value reftex-docstruct-symbol)))
-        (xr-re (nth 2 xr-data))
-        (entry (assoc label (symbol-value reftex-docstruct-symbol)))
-        (win (selected-window)) pop-win (pos (point)))
+         (xr-re (nth 2 xr-data))
+         (entry (assoc label (symbol-value reftex-docstruct-symbol)))
+         (win (selected-window)) pop-win (pos (point)))
 
     (if (and (not entry) (stringp label) xr-re (string-match xr-re label))
-       ;; Label is defined in external document
-       (save-excursion
-         (save-match-data
-           (set-buffer 
-            (or (reftex-get-file-buffer-force
-                 (cdr (assoc (match-string 1 label) (nth 1
-                                                         xr-data))))
-                (error "Problem with external label %s" label))))
-         (setq label (substring label (match-end 1)))
-         (reftex-access-scan-info)
-         (setq entry 
-               (assoc label (symbol-value reftex-docstruct-symbol)))))
+        ;; Label is defined in external document
+        (save-excursion
+          (save-match-data
+            (set-buffer 
+             (or (reftex-get-file-buffer-force
+                  (cdr (assoc (match-string 1 label) (nth 1
+                                                          xr-data))))
+                 (error "Problem with external label %s" label))))
+          (setq label (substring label (match-end 1)))
+          (reftex-access-scan-info)
+          (setq entry 
+                (assoc label (symbol-value reftex-docstruct-symbol)))))
     (if (eq how 'echo)
-       ;; Display in echo area
-       (reftex-echo-ref label entry (symbol-value reftex-docstruct-symbol))
+        ;; Display in echo area
+        (reftex-echo-ref label entry (symbol-value reftex-docstruct-symbol))
       (let ((window-conf (current-window-configuration)))
-       (condition-case nil
-           (reftex-show-label-location entry t nil t t)
-         (error (set-window-configuration window-conf)
-                (message "ref: Label %s not found" label)
-                (error "ref: Label %s not found" label)))) ;; 2nd is line OK
+        (condition-case nil
+            (reftex-show-label-location entry t nil t t)
+          (error (set-window-configuration window-conf)
+                 (message "ref: Label %s not found" label)
+                 (error "ref: Label %s not found" label)))) ;; 2nd is line OK
       (add-hook 'pre-command-hook 'reftex-highlight-shall-die)
 
       (when (eq how 'tmp-window)
-       ;; Resize window and arrange restauration
-       (shrink-window (1- (- (window-height) 9)))
-       (recenter '(4))
-       (add-hook 'pre-command-hook 'reftex-restore-window-conf))
+        ;; Resize window and arrange restauration
+        (shrink-window (1- (- (window-height) 9)))
+        (recenter '(4))
+        (add-hook 'pre-command-hook 'reftex-restore-window-conf))
       (setq pop-win (selected-window))
       (select-window win)
       (goto-char pos)
       (when (equal arg 2)
-       (select-window pop-win)))))
+        (select-window pop-win)))))
 
 (defun reftex-mouse-view-crossref (ev)
   "View cross reference of \\ref or \\cite macro where you click.
@@ -233,33 +242,34 @@ With argument, actually select the window showing the cross reference."
        (or (eq reftex-auto-view-crossref 'window) (not (current-message)))
        ;; Make sure we are not already displaying this one
        (not (memq last-command '(reftex-view-crossref
-                                reftex-mouse-view-crossref)))
+                                 reftex-mouse-view-crossref)))
        ;; Quick precheck if this might be a relevant spot
-       ;; FIXME: Can fail with backslash in comment
+       ;; `reftex-view-crossref' will do a more thorough check.
        (save-excursion  
-        (search-backward "\\" nil t)
-        (looking-at "\\\\[a-zA-Z]*\\(cite\\|ref\\)"))
+         (search-backward "\\" nil t)
+         (looking-at "\\\\[a-zA-Z]*\\(cite\\|ref\\|bibentry\\)"))
 
        (condition-case nil
-          (let ((current-prefix-arg nil))
-            (cond
-             ((eq reftex-auto-view-crossref t)
-              (reftex-view-crossref -1 'echo))
-             ((eq reftex-auto-view-crossref 'window)
-              (reftex-view-crossref -1 'tmp-window))
-             (t nil)))
-        (error nil))))
+           (let ((current-prefix-arg nil))
+             (cond
+              ((eq reftex-auto-view-crossref t)
+               (reftex-view-crossref -1 'echo 'quiet))
+              ((eq reftex-auto-view-crossref 'window)
+               (reftex-view-crossref -1 'tmp-window 'quiet))
+              (t nil)))
+         (error nil))))
 
 (defun reftex-restore-window-conf ()
   (set-window-configuration (get 'reftex-auto-view-crossref 'last-window-conf))
   (put 'reftex-auto-view-crossref 'last-window-conf nil)
   (remove-hook 'pre-command-hook 'reftex-restore-window-conf))
-                 
+                  
 (defun reftex-echo-ref (label entry docstruct)
   ;; Display crossref info in echo area.
   (cond
    ((null docstruct)
-    (message (substitute-command-keys (format reftex-no-info-message "ref"))))
+    (message "%s" 
+            (substitute-command-keys (format reftex-no-info-message "ref"))))
    ((null entry)
     (message "ref: unknown label: %s" label))
    (t
@@ -267,46 +277,46 @@ With argument, actually select the window showing the cross reference."
       (message "ref(%s): %s" (nth 1 entry) (nth 2 entry)))
     (let ((buf (get-buffer " *Echo Area*")))
       (when buf
-       (save-excursion
-         (set-buffer buf)
-         (run-hooks 'reftex-display-copied-context-hook)))))))
+        (save-excursion
+          (set-buffer buf)
+          (run-hooks 'reftex-display-copied-context-hook)))))))
 
 (defun reftex-echo-cite (key files item)
   ;; Display citation info in echo area.
   (let* ((cache (assq 'bibview-cache (symbol-value reftex-docstruct-symbol)))
-        (cache-entry (assoc key (cdr cache)))
-        entry string buf (all-files files))
+         (cache-entry (assoc key (cdr cache)))
+         entry string buf (all-files files))
 
     (if (and reftex-cache-cite-echo cache-entry)
-       ;; We can just use the cache
-       (setq string (cdr cache-entry))
+        ;; We can just use the cache
+        (setq string (cdr cache-entry))
 
       ;; Need to look in the database
       (unless reftex-revisit-to-echo
-       (setq files (reftex-visited-files files)))
+        (setq files (reftex-visited-files files)))
 
       (setq entry 
-           (condition-case nil
-               (save-excursion
-                 (reftex-pop-to-bibtex-entry key files nil nil item t))
-             (error
-              (if (and files (= (length all-files) (length files)))
-                  (message "cite: no such database entry: %s" key)
-                (message (substitute-command-keys 
-                          (format reftex-no-info-message "cite"))))
-              nil)))
+            (condition-case nil
+                (save-excursion
+                  (reftex-pop-to-bibtex-entry key files nil nil item t))
+              (error
+               (if (and files (= (length all-files) (length files)))
+                   (message "cite: no such database entry: %s" key)
+                 (message "%s" (substitute-command-keys 
+                               (format reftex-no-info-message "cite"))))
+               nil)))
       (when entry
-       (if item
-           (setq string (reftex-nicify-text entry))
-         (setq string (reftex-make-cite-echo-string
-                       (reftex-parse-bibtex-entry entry)
-                       reftex-docstruct-symbol)))))
+        (if item
+            (setq string (reftex-nicify-text entry))
+          (setq string (reftex-make-cite-echo-string
+                        (reftex-parse-bibtex-entry entry)
+                        reftex-docstruct-symbol)))))
     (unless (or (null string) (equal string ""))
       (message "cite: %s" string))
     (when (setq buf (get-buffer " *Echo Area*"))
       (save-excursion
-       (set-buffer buf)
-       (run-hooks 'reftex-display-copied-context-hook)))))
+        (set-buffer buf)
+        (run-hooks 'reftex-display-copied-context-hook)))))
 
 (defvar reftex-use-itimer-in-xemacs nil
   "*Non-nil means use the idle timers in XEmacs for crossref display.
@@ -319,34 +329,34 @@ will display info in the echo area."
   (interactive)
   (if reftex-auto-view-crossref-timer
       (progn
-       (if (featurep 'xemacs)
-           (if reftex-use-itimer-in-xemacs
-               (delete-itimer reftex-auto-view-crossref-timer)
-             (remove-hook 'post-command-hook 'reftex-start-itimer-once))
-         (cancel-timer reftex-auto-view-crossref-timer))
-       (setq reftex-auto-view-crossref-timer nil)
-       (message "Automatic display of crossref information was turned off"))
+        (if (featurep 'xemacs)
+            (if reftex-use-itimer-in-xemacs
+                (delete-itimer reftex-auto-view-crossref-timer)
+              (remove-hook 'post-command-hook 'reftex-start-itimer-once))
+          (cancel-timer reftex-auto-view-crossref-timer))
+        (setq reftex-auto-view-crossref-timer nil)
+        (message "Automatic display of crossref information was turned off"))
     (setq reftex-auto-view-crossref-timer
-         (if (featurep 'xemacs)
-             (if reftex-use-itimer-in-xemacs
-                 (start-itimer "RefTeX Idle Timer"
-                               'reftex-view-crossref-when-idle 
-                               reftex-idle-time reftex-idle-time t)
-               (add-hook 'post-command-hook 'reftex-start-itimer-once)
-               t)
-           (run-with-idle-timer
-            reftex-idle-time t 'reftex-view-crossref-when-idle)))
+          (if (featurep 'xemacs)
+              (if reftex-use-itimer-in-xemacs
+                  (start-itimer "RefTeX Idle Timer"
+                                'reftex-view-crossref-when-idle 
+                                reftex-idle-time reftex-idle-time t)
+                (add-hook 'post-command-hook 'reftex-start-itimer-once)
+                t)
+            (run-with-idle-timer
+             reftex-idle-time t 'reftex-view-crossref-when-idle)))
     (unless reftex-auto-view-crossref
       (setq reftex-auto-view-crossref t))
     (message "Automatic display of crossref information was turned on")))
 
 (defun reftex-start-itimer-once ()
    (and reftex-mode
-       (not (itimer-live-p reftex-auto-view-crossref-timer))
-       (setq reftex-auto-view-crossref-timer
-             (start-itimer "RefTeX Idle Timer"
-                           'reftex-view-crossref-when-idle 
-                           reftex-idle-time nil t))))
+        (not (itimer-live-p reftex-auto-view-crossref-timer))
+        (setq reftex-auto-view-crossref-timer
+              (start-itimer "RefTeX Idle Timer"
+                            'reftex-view-crossref-when-idle 
+                            reftex-idle-time nil t))))
 
 (defun reftex-view-crossref-from-bibtex (&optional arg)
   "View location in a LaTeX document which cites the BibTeX entry at point.
@@ -357,32 +367,32 @@ Calling this function several times find successive citation locations."
   (interactive "P")
   (when arg 
     ;; Break connection to reference buffer
-    (remprop 'reftex-bibtex-view-cite-locations :ref-buffer))
+    (put 'reftex-bibtex-view-cite-locations :ref-buffer nil))
   (let ((ref-buffer (get 'reftex-bibtex-view-cite-locations :ref-buffer)))
     ;; Establish connection to reference buffer
     (unless ref-buffer
       (setq ref-buffer
-           (save-excursion
-             (completing-read 
-              "Reference buffer: "
-              (delq nil
-                    (mapcar 
-                     (lambda (b)
-                       (set-buffer b)
-                       (if reftex-mode (list (buffer-name b)) nil))
-                     (buffer-list)))
-              nil t)))
+            (save-excursion
+              (completing-read 
+               "Reference buffer: "
+               (delq nil
+                     (mapcar 
+                      (lambda (b)
+                        (set-buffer b)
+                        (if reftex-mode (list (buffer-name b)) nil))
+                      (buffer-list)))
+               nil t)))
       (put 'reftex-bibtex-view-cite-locations :ref-buffer ref-buffer))
     ;; Search for citations
     (bibtex-beginning-of-entry)
     (if (looking-at
-        "@[a-zA-Z]+[ \t\n\r]*[{(][ \t\n\r]*\\([^, \t\r\n}]+\\)")
-       (progn
-         (goto-char (match-beginning 1))
-         (reftex-view-regexp-match
-          (format reftex-find-citation-regexp-format
-                  (regexp-quote (match-string 1)))
-          3 arg ref-buffer))
+         "@[a-zA-Z]+[ \t\n\r]*[{(][ \t\n\r]*\\([^, \t\r\n}]+\\)")
+        (progn
+          (goto-char (match-beginning 1))
+          (reftex-view-regexp-match
+           (format reftex-find-citation-regexp-format
+                   (regexp-quote (match-string 1)))
+           4 arg ref-buffer))
       (error "Cannot find citation key in BibTeX entry"))))
 
 (defun reftex-view-regexp-match (re &optional highlight-group new ref-buffer)
@@ -395,39 +405,39 @@ Calling this function several times find successive citation locations."
 
   ;;; Decide if new search or continued search
   (let* ((oldprop (get 'reftex-view-regexp-match :props))
-        (newprop (list (current-buffer) re))
-        (cont (and (not new) (equal oldprop newprop)))
-        (cnt (if cont (get 'reftex-view-regexp-match :cnt) 0))
-        (current-window (selected-window))
-        (window-conf (current-window-configuration))
-        match pop-window)
+         (newprop (list (current-buffer) re))
+         (cont (and (not new) (equal oldprop newprop)))
+         (cnt (if cont (get 'reftex-view-regexp-match :cnt) 0))
+         (current-window (selected-window))
+         (window-conf (current-window-configuration))
+         match pop-window)
     (switch-to-buffer-other-window (or ref-buffer (current-buffer)))
     ;; Search
     (condition-case nil
-       (if cont
-           (setq match (reftex-global-search-continue))
-         (reftex-access-scan-info)
-         (setq match (reftex-global-search re (reftex-all-document-files))))
+        (if cont
+            (setq match (reftex-global-search-continue))
+          (reftex-access-scan-info)
+          (setq match (reftex-global-search re (reftex-all-document-files))))
       (error nil))
     ;; Evaluate the match.
     (if match
-       (progn
-         (put 'reftex-view-regexp-match :props newprop)
-         (put 'reftex-view-regexp-match :cnt (incf cnt))
-         (reftex-highlight 0 (match-beginning highlight-group)
-                           (match-end highlight-group))
-         (add-hook 'pre-command-hook 'reftex-highlight-shall-die)
-         (setq pop-window (selected-window)))
-      (remprop 'reftex-view-regexp-match :props)
+        (progn
+          (put 'reftex-view-regexp-match :props newprop)
+          (put 'reftex-view-regexp-match :cnt (incf cnt))
+          (reftex-highlight 0 (match-beginning highlight-group)
+                            (match-end highlight-group))
+          (add-hook 'pre-command-hook 'reftex-highlight-shall-die)
+          (setq pop-window (selected-window)))
+      (put 'reftex-view-regexp-match :props nil)
       (or cont (set-window-configuration window-conf)))
     (select-window current-window)
     (if match
-       (progn
-         (message "Match Nr. %s" cnt)
-         pop-window)
+        (progn
+          (message "Match Nr. %s" cnt)
+          pop-window)
       (if cont
-         (error "No further matches (total number of matches: %d)" cnt)
-       (error "No matches")))))
+          (error "No further matches (total number of matches: %d)" cnt)
+        (error "No matches")))))
 
 (defvar reftex-global-search-marker (make-marker))
 (defun reftex-global-search (regexp file-list)
@@ -442,11 +452,11 @@ Calling this function several times find successive citation locations."
   (unless (get 'reftex-global-search :file-list)
     (error "No global search to continue"))
   (let* ((file-list (get 'reftex-global-search :file-list))
-        (regexp (get 'reftex-global-search :regexp))
-        (buf (or (marker-buffer reftex-global-search-marker)
-                 (reftex-get-file-buffer-force (car file-list))))
-        (pos (or (marker-position reftex-global-search-marker) 1))
-        file)
+         (regexp (get 'reftex-global-search :regexp))
+         (buf (or (marker-buffer reftex-global-search-marker)
+                  (reftex-get-file-buffer-force (car file-list))))
+         (pos (or (marker-position reftex-global-search-marker) 1))
+         file)
     ;; Take up starting position
     (unless buf (error "No such buffer %s" buf))
     (switch-to-buffer buf)
@@ -454,22 +464,23 @@ Calling this function several times find successive citation locations."
     (goto-char pos)
     ;; Search and switch file if necessary
     (if (catch 'exit
-         (while t
-           (when (re-search-forward regexp nil t)
-             (move-marker reftex-global-search-marker (point))
-             (throw 'exit t))
-           ;; No match - goto next file
-           (pop file-list)
-           (or file-list (throw 'exit nil))
-           (setq file (car file-list)
-                 buf (reftex-get-file-buffer-force file))
-           (unless buf (error "Cannot access file %s" file))
-           (put 'reftex-global-search :file-list file-list)
-           (switch-to-buffer buf)
-           (widen)
-           (goto-char 1)))
-       t
+          (while t
+            (when (re-search-forward regexp nil t)
+              (move-marker reftex-global-search-marker (point))
+              (throw 'exit t))
+            ;; No match - goto next file
+            (pop file-list)
+            (or file-list (throw 'exit nil))
+            (setq file (car file-list)
+                  buf (reftex-get-file-buffer-force file))
+            (unless buf (error "Cannot access file %s" file))
+            (put 'reftex-global-search :file-list file-list)
+            (switch-to-buffer buf)
+            (widen)
+            (goto-char 1)))
+        t
       (move-marker reftex-global-search-marker nil)
       (error "All files processed"))))
 
+;;; arch-tag: d2f52b56-744e-44ad-830d-1fc193b90eda
 ;;; reftex-dcr.el ends here