Add 2010 to copyright years.
[bpt/emacs.git] / lisp / textmodes / reftex-global.el
index 9ddfb5a..22e8a57 100644 (file)
@@ -1,7 +1,7 @@
 ;;; reftex-global.el --- operations on entire documents with RefTeX
 
 ;; Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
-;;   2006, 2007 Free Software Foundation, Inc.
+;;   2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
 
 ;; Author: Carsten Dominik <dominik@science.uva.nl>
 ;; Maintainer: auctex-devel@gnu.org
@@ -9,10 +9,10 @@
 
 ;; This file is part of GNU Emacs.
 
-;; GNU Emacs is free software; you can redistribute it and/or modify
+;; GNU Emacs is free software: you can redistribute it and/or modify
 ;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 2, or (at your option)
-;; any later version.
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
 
 ;; GNU Emacs is distributed in the hope that it will be useful,
 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -20,9 +20,7 @@
 ;; GNU General Public License for more details.
 
 ;; 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., 51 Franklin Street, Fifth Floor,
-;; Boston, MA 02110-1301, USA.
+;; along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.
 
 ;;; Commentary:
 
@@ -42,8 +40,7 @@ The TAGS file is also immediately visited with `visit-tags-table'."
          (files  (reftex-all-document-files))
          (cmd    (format "etags %s" (mapconcat 'shell-quote-argument
                                               files " "))))
-    (save-excursion
-      (set-buffer (reftex-get-file-buffer-force master))
+    (with-current-buffer (reftex-get-file-buffer-force master)
       (message "Running etags to create TAGS file...")
       (shell-command cmd)
       (visit-tags-table "TAGS"))))
@@ -102,9 +99,8 @@ No active TAGS table is required."
     (tags-query-replace from to (or delimited current-prefix-arg)
                         (list 'reftex-all-document-files))))
 
-(eval-when-compile
-  (defvar TeX-master)
-  (defvar isearch-next-buffer-function))
+(defvar TeX-master)
+(defvar isearch-next-buffer-function)
 
 (defun reftex-find-duplicate-labels ()
   "Produce a list of all duplicate labels in the document."
@@ -317,7 +313,7 @@ labels."
   (interactive)
   (let ((files (reftex-all-document-files))
         file buffer)
-    (save-excursion
+    (save-current-buffer
       (while (setq file (pop files))
         (setq buffer (reftex-get-buffer-visiting file))
         (when buffer
@@ -338,14 +334,21 @@ Also checks if buffers visiting the files are in read-only mode."
         (or (y-or-n-p (format "No write access to %s. Continue? " file))
             (error "Abort")))
       (when (and (setq buf (reftex-get-buffer-visiting file))
-                 (save-excursion
-                   (set-buffer buf)
+                 (with-current-buffer buf
                    buffer-read-only))
         (ding)
         (or (y-or-n-p (format "Buffer %s is read-only. Continue? "
                               (buffer-name buf)))
             (error "Abort"))))))
 
+;;; Multi-file RefTeX Isearch
+
+;; `reftex-isearch-wrap-function', `reftex-isearch-push-state-function',
+;; `reftex-isearch-pop-state-function', `reftex-isearch-isearch-search'
+;; functions remain here only for backward-compatibility with Emacs 22
+;; and are obsolete since Emacs 23 that supports a single function
+;; variable `multi-isearch-next-buffer-function'.
+
 (defun reftex-isearch-wrap-function ()
   (if (not isearch-word)
       (switch-to-buffer 
@@ -397,31 +400,29 @@ Also checks if buffers visiting the files are in read-only mode."
             (point))
         (error nil))))))
 
-;;; This function is called when isearch reaches the end of a
-;;; buffer. For reftex what we want to do is not wrap to the
-;;; beginning, but switch to the next buffer in the logical order of
-;;; the document.  This function looks through list of files in the
-;;; document (reftex-all-document-files), searches for the current
-;;; buffer and switches to the next/previous one in the logical order
-;;; of the document.  If WRAPP is true then wrap the search to the
-;;; beginning/end of the file list, depending of the search direction.
+;; This function is called when isearch reaches the end of a
+;; buffer. For reftex what we want to do is not wrap to the
+;; beginning, but switch to the next buffer in the logical order of
+;; the document.  This function looks through list of files in the
+;; document (reftex-all-document-files), searches for the current
+;; buffer and switches to the next/previous one in the logical order
+;; of the document.  If WRAPP is true then wrap the search to the
+;; beginning/end of the file list, depending of the search direction.
 (defun reftex-isearch-switch-to-next-file (crt-buf &optional wrapp)
   (reftex-access-scan-info)
-  (let* ((cb (buffer-file-name crt-buf))
-        (flist (reftex-all-document-files))
-        (orig-flist flist))
+  (let ((cb (buffer-file-name crt-buf))
+       (flist (reftex-all-document-files)))
     (when flist
       (if wrapp
          (unless isearch-forward
              (setq flist (last flist)))
        (unless isearch-forward
-         (setq flist (nreverse (copy-list flist)))
-         (setq orig-flist flist))
+         (setq flist (reverse flist)))
        (while (not (string= (car flist) cb))
          (setq flist (cdr flist)))
        (setq flist (cdr flist)))
       (when flist
-       (find-file  (car flist))))))
+       (find-file-noselect (car flist))))))
 
 ;;;###autoload
 (defun reftex-isearch-minor-mode (&optional arg)
@@ -431,7 +432,7 @@ the current TeX document.
 
 With no argument, this command toggles
 `reftex-isearch-minor-mode'.  With a prefix argument ARG, turn
-`reftex-isearch-minor-mode' on iff ARG is positive."
+`reftex-isearch-minor-mode' on if ARG is positive, otherwise turn it off."
   (interactive "P")
   (let ((old-reftex-isearch-minor-mode reftex-isearch-minor-mode))
     (setq reftex-isearch-minor-mode 
@@ -443,23 +444,28 @@ With no argument, this command toggles
            (dolist (crt-buf (buffer-list))
              (with-current-buffer crt-buf
                (when reftex-mode
-                 (set (make-local-variable 'isearch-wrap-function)
-                      'reftex-isearch-wrap-function)
-                 (set (make-local-variable 'isearch-search-fun-function)
-                      (lambda () 'reftex-isearch-isearch-search))
-                 (set (make-local-variable 'isearch-push-state-function)
-                      'reftex-isearch-push-state-function)
-                 (set (make-local-variable 'isearch-next-buffer-function)
-                      'reftex-isearch-switch-to-next-file)
+                 (if (boundp 'multi-isearch-next-buffer-function)
+                     (set (make-local-variable 'multi-isearch-next-buffer-function)
+                          'reftex-isearch-switch-to-next-file)
+                   (set (make-local-variable 'isearch-wrap-function)
+                        'reftex-isearch-wrap-function)
+                   (set (make-local-variable 'isearch-search-fun-function)
+                        (lambda () 'reftex-isearch-isearch-search))
+                   (set (make-local-variable 'isearch-push-state-function)
+                        'reftex-isearch-push-state-function)
+                   (set (make-local-variable 'isearch-next-buffer-function)
+                        'reftex-isearch-switch-to-next-file))
                  (setq reftex-isearch-minor-mode t))))
            (add-hook 'reftex-mode-hook 'reftex-isearch-minor-mode))
        (dolist (crt-buf (buffer-list))
          (with-current-buffer crt-buf
            (when reftex-mode
-             (kill-local-variable 'isearch-wrap-function)
-             (kill-local-variable 'isearch-search-fun-function)
-             (kill-local-variable 'isearch-push-state-function)
-             (kill-local-variable 'isearch-next-buffer-function)
+             (if (boundp 'multi-isearch-next-buffer-function)
+                 (kill-local-variable 'multi-isearch-next-buffer-function)
+               (kill-local-variable 'isearch-wrap-function)
+               (kill-local-variable 'isearch-search-fun-function)
+               (kill-local-variable 'isearch-push-state-function)
+               (kill-local-variable 'isearch-next-buffer-function))
              (setq reftex-isearch-minor-mode nil))))
        (remove-hook 'reftex-mode-hook 'reftex-isearch-minor-mode)))
     ;; Force modeline redisplay.
@@ -468,5 +474,5 @@ With no argument, this command toggles
 (add-minor-mode 'reftex-isearch-minor-mode "/I" nil nil 
                'reftex-isearch-minor-mode)
 
-;;; arch-tag: 2dbf7633-92c8-4340-8656-7aa019d0f80d
+;; arch-tag: 2dbf7633-92c8-4340-8656-7aa019d0f80d
 ;;; reftex-global.el ends here