# HG changeset patch # User Juri Linkov # Date 1259610136 0 # Node ID 5475f1c5e4ed1656df326af0a1eccd5cfed25273 # Parent 8cb95e673f03e65b7c2d82a796f84e083886bf08 (multi-isearch-read-buffers) (multi-isearch-read-matching-buffers): New functions. (multi-isearch-buffers, multi-isearch-buffers-regexp): Use them in the `interactive' spec. Doc fix. (multi-isearch-read-files, multi-isearch-read-matching-files): New functions. (multi-isearch-files, multi-isearch-files-regexp): Use them in the `interactive' spec. Doc fix. (Bug#4725) diff -r 8cb95e673f03 -r 5475f1c5e4ed etc/NEWS --- a/etc/NEWS Mon Nov 30 16:14:48 2009 +0000 +++ b/etc/NEWS Mon Nov 30 19:42:16 2009 +0000 @@ -304,6 +304,14 @@ and `comint-history-isearch-backward-regexp' (bound to M-r) start Isearch in the input history regardless of the value of `comint-history-isearch'. +*** Interactively `multi-isearch-buffers' and `multi-isearch-buffers-regexp' +read buffer names to search, one by one, ended with RET. With a prefix +argument, they ask for a regexp, and search in buffers whose names match +the specified regexp. Interactively `multi-isearch-files' and +`multi-isearch-files-regexp' read file names to search, one by one, +ended with RET. With a prefix argument, they ask for a wildcard, and +search in file buffers whose file names match the specified wildcard. + +++ *** Autorevert Tail mode now works also for remote files. diff -r 8cb95e673f03 -r 5475f1c5e4ed lisp/ChangeLog --- a/lisp/ChangeLog Mon Nov 30 16:14:48 2009 +0000 +++ b/lisp/ChangeLog Mon Nov 30 19:42:16 2009 +0000 @@ -1,3 +1,14 @@ +2009-11-30 Juri Linkov + + * misearch.el (multi-isearch-read-buffers) + (multi-isearch-read-matching-buffers): New functions. + (multi-isearch-buffers, multi-isearch-buffers-regexp): + Use them in the `interactive' spec. Doc fix. + (multi-isearch-read-files, multi-isearch-read-matching-files): + New functions. + (multi-isearch-files, multi-isearch-files-regexp): + Use them in the `interactive' spec. Doc fix. (Bug#4725) + 2009-11-30 Juri Linkov * doc-view.el (doc-view-continuous): diff -r 8cb95e673f03 -r 5475f1c5e4ed lisp/misearch.el --- a/lisp/misearch.el Mon Nov 30 16:14:48 2009 +0000 +++ b/lisp/misearch.el Mon Nov 30 19:42:16 2009 +0000 @@ -224,9 +224,46 @@ (car buffers) (cadr (member (or buffer (current-buffer)) buffers))))) +(defun multi-isearch-read-buffers () + "Return a list of buffers specified interactively, one by one." + ;; Most code from `multi-occur'. + (let* ((bufs (list (read-buffer "First buffer to search: " + (current-buffer) t))) + (buf nil) + (ido-ignore-item-temp-list bufs)) + (while (not (string-equal + (setq buf (read-buffer + (if (eq read-buffer-function 'ido-read-buffer) + "Next buffer to search (C-j to end): " + "Next buffer to search (RET to end): ") + nil t)) + "")) + (add-to-list 'bufs buf) + (setq ido-ignore-item-temp-list bufs)) + (nreverse (mapcar #'get-buffer bufs)))) + +(defun multi-isearch-read-matching-buffers () + "Return a list of buffers whose names match specified regexp." + ;; Most code from `multi-occur-in-matching-buffers' + ;; and `kill-matching-buffers'. + (let ((bufregexp + (read-regexp "Search in buffers whose names match regexp"))) + (when bufregexp + (delq nil (mapcar (lambda (buf) + (when (string-match bufregexp (buffer-name buf)) + buf)) + (buffer-list)))))) + ;;;###autoload (defun multi-isearch-buffers (buffers) - "Start multi-buffer Isearch on a list of BUFFERS." + "Start multi-buffer Isearch on a list of BUFFERS. +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." + (interactive + (list (if current-prefix-arg + (multi-isearch-read-matching-buffers) + (multi-isearch-read-buffers)))) (let ((multi-isearch-next-buffer-function 'multi-isearch-next-buffer-from-list) (multi-isearch-buffer-list buffers)) @@ -236,7 +273,14 @@ ;;;###autoload (defun multi-isearch-buffers-regexp (buffers) - "Start multi-buffer regexp Isearch on a list of BUFFERS." + "Start multi-buffer regexp Isearch on a list of BUFFERS. +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." + (interactive + (list (if current-prefix-arg + (multi-isearch-read-matching-buffers) + (multi-isearch-read-buffers)))) (let ((multi-isearch-next-buffer-function 'multi-isearch-next-buffer-from-list) (multi-isearch-buffer-list buffers)) @@ -264,9 +308,43 @@ (car files) (cadr (member (buffer-file-name buffer) files)))))) +(defun multi-isearch-read-files () + "Return a list of files specified interactively, one by one." + ;; Most code from `multi-occur'. + (let* ((files (list (read-file-name "First file to search: " + default-directory + buffer-file-name))) + (file nil)) + (while (not (string-equal + (setq file (read-file-name + "Next file to search (RET to end): " + default-directory + default-directory)) + default-directory)) + (add-to-list 'files file)) + (nreverse files))) + +(defun multi-isearch-read-matching-files () + "Return a list of files whose names match specified wildcard." + ;; Most wildcard code from `find-file-noselect'. + (let ((filename (read-regexp "Search in files whose names match wildcard"))) + (when (and filename + (not (string-match "\\`/:" filename)) + (string-match "[[*?]" filename)) + (condition-case nil + (file-expand-wildcards filename t) + (error (list filename)))))) + ;;;###autoload (defun multi-isearch-files (files) - "Start multi-buffer Isearch on a list of FILES." + "Start multi-buffer Isearch on a list of FILES. +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." + (interactive + (list (if current-prefix-arg + (multi-isearch-read-matching-files) + (multi-isearch-read-files)))) (let ((multi-isearch-next-buffer-function 'multi-isearch-next-file-buffer-from-list) (multi-isearch-file-list files)) @@ -276,7 +354,14 @@ ;;;###autoload (defun multi-isearch-files-regexp (files) - "Start multi-buffer regexp Isearch on a list of FILES." + "Start multi-buffer regexp Isearch on a list of FILES. +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." + (interactive + (list (if current-prefix-arg + (multi-isearch-read-matching-files) + (multi-isearch-read-files)))) (let ((multi-isearch-next-buffer-function 'multi-isearch-next-file-buffer-from-list) (multi-isearch-file-list files))