* progmodes/python.el (python-shell-send-string): When
[bpt/emacs.git] / lisp / misearch.el
index cfdd5ef..502de52 100644 (file)
@@ -1,6 +1,6 @@
 ;;; misearch.el --- isearch extensions for multi-buffer search
 
-;; Copyright (C) 2007, 2008, 2009  Free Software Foundation, Inc.
+;; Copyright (C) 2007-2012  Free Software Foundation, Inc.
 
 ;; Author: Juri Linkov <juri@jurta.org>
 ;; Keywords: matching
@@ -130,19 +130,13 @@ Intended to be added to `isearch-mode-hook'."
   (lambda (string bound noerror)
     (let ((search-fun
           ;; Use standard functions to search within one buffer
-          (cond
-           (isearch-word
-            (if isearch-forward 'word-search-forward 'word-search-backward))
-           (isearch-regexp
-            (if isearch-forward 're-search-forward 're-search-backward))
-           (t
-            (if isearch-forward 'search-forward 'search-backward))))
+          (isearch-search-fun-default))
          found buffer)
       (or
        ;; 1. First try searching in the initial buffer
        (let ((res (funcall search-fun string bound noerror)))
         ;; Reset wrapping for all-buffers pause after successful search
-        (if (and res (eq multi-isearch-pause t))
+        (if (and res (not bound) (eq multi-isearch-pause t))
             (setq multi-isearch-current-buffer nil))
         res)
        ;; 2. If the above search fails, start visiting next/prev buffers
@@ -158,7 +152,7 @@ Intended to be added to `isearch-mode-hook'."
                   (while (not found)
                     ;; Find the next buffer to search
                     (setq buffer (funcall multi-isearch-next-buffer-current-function
-                                          buffer nil))
+                                          (or buffer (current-buffer)) nil))
                     (with-current-buffer buffer
                       (goto-char (if isearch-forward (point-min) (point-max)))
                       (setq isearch-barrier (point) isearch-opoint (point))
@@ -173,8 +167,8 @@ Intended to be added to `isearch-mode-hook'."
                   found)
               ;; Return nil when multi-isearch-next-buffer-current-function fails
               ;; (`with-current-buffer' raises an error for nil returned from it).
-              (error nil))
-          (signal 'search-failed (list string "Repeat for next buffer"))))))))
+              (error (signal 'search-failed (list string "end of multi"))))
+          (signal 'search-failed (list string "repeat for next buffer"))))))))
 
 (defun multi-isearch-wrap ()
   "Wrap the multiple buffers search when search is failed.
@@ -201,7 +195,7 @@ search status stack."
   `(lambda (cmd)
      (multi-isearch-pop-state cmd ,(current-buffer))))
 
-(defun multi-isearch-pop-state (cmd buffer)
+(defun multi-isearch-pop-state (_cmd buffer)
   "Restore the multiple buffers search state.
 Switch to the buffer restored from the search status stack."
   (unless (equal buffer (current-buffer))
@@ -222,7 +216,9 @@ set in `multi-isearch-buffers' or `multi-isearch-buffers-regexp'."
                   (reverse multi-isearch-buffer-list))))
     (if wrap
        (car buffers)
-      (cadr (member (or buffer (current-buffer)) buffers)))))
+      (cadr (member buffer buffers)))))
+
+(defvar ido-ignore-item-temp-list)  ; from ido.el
 
 (defun multi-isearch-read-buffers ()
   "Return a list of buffers specified interactively, one by one."
@@ -240,7 +236,7 @@ set in `multi-isearch-buffers' or `multi-isearch-buffers-regexp'."
                 ""))
       (add-to-list 'bufs buf)
       (setq ido-ignore-item-temp-list bufs))
-    (nreverse (mapcar #'get-buffer bufs))))
+    (nreverse bufs)))
 
 (defun multi-isearch-read-matching-buffers ()
   "Return a list of buffers whose names match specified regexp."
@@ -257,6 +253,7 @@ set in `multi-isearch-buffers' or `multi-isearch-buffers-regexp'."
 ;;;###autoload
 (defun multi-isearch-buffers (buffers)
   "Start multi-buffer Isearch on a list of BUFFERS.
+This list can contain live buffers or their names.
 Interactively read buffer names to search, one by one, ended with RET.
 With a prefix argument, ask for a regexp, and search in buffers
 whose names match the specified regexp."
@@ -266,14 +263,15 @@ whose names match the specified regexp."
           (multi-isearch-read-buffers))))
   (let ((multi-isearch-next-buffer-function
         'multi-isearch-next-buffer-from-list)
-       (multi-isearch-buffer-list buffers))
-    (switch-to-buffer (car buffers))
+       (multi-isearch-buffer-list (mapcar #'get-buffer buffers)))
+    (switch-to-buffer (car multi-isearch-buffer-list))
     (goto-char (if isearch-forward (point-min) (point-max)))
     (isearch-forward)))
 
 ;;;###autoload
 (defun multi-isearch-buffers-regexp (buffers)
   "Start multi-buffer regexp Isearch on a list of BUFFERS.
+This list can contain live buffers or their names.
 Interactively read buffer names to search, one by one, ended with RET.
 With a prefix argument, ask for a regexp, and search in buffers
 whose names match the specified regexp."
@@ -283,8 +281,8 @@ whose names match the specified regexp."
           (multi-isearch-read-buffers))))
   (let ((multi-isearch-next-buffer-function
         'multi-isearch-next-buffer-from-list)
-       (multi-isearch-buffer-list buffers))
-    (switch-to-buffer (car buffers))
+       (multi-isearch-buffer-list (mapcar #'get-buffer buffers)))
+    (switch-to-buffer (car multi-isearch-buffer-list))
     (goto-char (if isearch-forward (point-min) (point-max)))
     (isearch-forward-regexp)))
 
@@ -338,6 +336,8 @@ Every next/previous file in the defined sequence is visited by
 ;;;###autoload
 (defun multi-isearch-files (files)
   "Start multi-buffer Isearch on a list of FILES.
+Relative file names in this list are expanded to absolute
+file names using the current buffer's value of `default-directory'.
 Interactively read file names to search, one by one, ended with RET.
 With a prefix argument, ask for a wildcard, and search in file buffers
 whose file names match the specified wildcard."
@@ -347,14 +347,16 @@ whose file names match the specified wildcard."
           (multi-isearch-read-files))))
   (let ((multi-isearch-next-buffer-function
         'multi-isearch-next-file-buffer-from-list)
-       (multi-isearch-file-list files))
-    (find-file (car files))
+       (multi-isearch-file-list (mapcar #'expand-file-name files)))
+    (find-file (car multi-isearch-file-list))
     (goto-char (if isearch-forward (point-min) (point-max)))
     (isearch-forward)))
 
 ;;;###autoload
 (defun multi-isearch-files-regexp (files)
   "Start multi-buffer regexp Isearch on a list of FILES.
+Relative file names in this list are expanded to absolute
+file names using the current buffer's value of `default-directory'.
 Interactively read file names to search, one by one, ended with RET.
 With a prefix argument, ask for a wildcard, and search in file buffers
 whose file names match the specified wildcard."
@@ -364,13 +366,12 @@ whose file names match the specified wildcard."
           (multi-isearch-read-files))))
   (let ((multi-isearch-next-buffer-function
         'multi-isearch-next-file-buffer-from-list)
-       (multi-isearch-file-list files))
-    (find-file (car files))
+       (multi-isearch-file-list (mapcar #'expand-file-name files)))
+    (find-file (car multi-isearch-file-list))
     (goto-char (if isearch-forward (point-min) (point-max)))
     (isearch-forward-regexp)))
 
 \f
 (provide 'multi-isearch)
-
-;; arch-tag: a6d38ffa-4d14-4e39-8ac6-46af9d6a6773
+(provide 'misearch)
 ;;; misearch.el ends here