X-Git-Url: https://git.hcoop.net/bpt/emacs.git/blobdiff_plain/c585bf3275d8204c67eb0a3dd52dd2bd3af8ed5f..9dd40b000598aff88c6249ecf2b5a866935e9321:/lisp/misearch.el diff --git a/lisp/misearch.el b/lisp/misearch.el index cfdd5efa49..502de52a05 100644 --- a/lisp/misearch.el +++ b/lisp/misearch.el @@ -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 ;; 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))) (provide 'multi-isearch) - -;; arch-tag: a6d38ffa-4d14-4e39-8ac6-46af9d6a6773 +(provide 'misearch) ;;; misearch.el ends here