summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJuri Linkov <juri@linkov.net>2021-05-09 22:27:08 +0300
committerJuri Linkov <juri@linkov.net>2021-05-09 22:27:08 +0300
commit25c775b4e964aaa2cbf17997c0479dfc2ecf33e2 (patch)
tree38736a9f82b8e11cab42d6ffbcd63d4427bfe410
parent3d2c892114ebd35cb10928bb87f991316a0ca55c (diff)
downloademacs-25c775b4e964aaa2cbf17997c0479dfc2ecf33e2.tar.gz
* lisp/misearch.el (multi-isearch-switch-buffer): New function.
* lisp/isearch.el (isearch-search-string): * lisp/misearch.el (multi-isearch-wrap, multi-isearch-pop-state): Use it. https://lists.gnu.org/archive/html/emacs-devel/2021-05/msg00309.html
-rw-r--r--lisp/isearch.el5
-rw-r--r--lisp/misearch.el22
2 files changed, 18 insertions, 9 deletions
diff --git a/lisp/isearch.el b/lisp/isearch.el
index 9f3cfd70fb3..536c76ea5df 100644
--- a/lisp/isearch.el
+++ b/lisp/isearch.el
@@ -3506,9 +3506,8 @@ Optional third argument, if t, means if fail just return nil (no error).
(when pos1
;; When using multiple buffers isearch, switch to the new buffer here,
;; because `save-excursion' above doesn't allow doing it inside funcall.
- (if (and multi-isearch-next-buffer-current-function
- (buffer-live-p multi-isearch-current-buffer))
- (switch-to-buffer multi-isearch-current-buffer))
+ (when multi-isearch-next-buffer-current-function
+ (multi-isearch-switch-buffer))
(goto-char pos1)
pos1)))
diff --git a/lisp/misearch.el b/lisp/misearch.el
index 335efb95161..338880f25f2 100644
--- a/lisp/misearch.el
+++ b/lisp/misearch.el
@@ -190,10 +190,10 @@ the initial buffer."
(if (or (null multi-isearch-pause)
(and multi-isearch-pause multi-isearch-current-buffer))
(progn
- (switch-to-buffer
- (setq multi-isearch-current-buffer
- (funcall multi-isearch-next-buffer-current-function
- (current-buffer) t)))
+ (setq multi-isearch-current-buffer
+ (funcall multi-isearch-next-buffer-current-function
+ (current-buffer) t))
+ (multi-isearch-switch-buffer)
(goto-char (if isearch-forward (point-min) (point-max))))
(setq multi-isearch-current-buffer (current-buffer))
(setq isearch-wrapped nil)))
@@ -208,8 +208,18 @@ search status stack."
(defun multi-isearch-pop-state (_cmd buffer)
"Restore the multiple buffers search state in BUFFER.
Switch to the buffer restored from the search status stack."
- (unless (equal buffer (current-buffer))
- (switch-to-buffer (setq multi-isearch-current-buffer buffer))))
+ (unless (eq buffer (current-buffer))
+ (setq multi-isearch-current-buffer buffer)
+ (multi-isearch-switch-buffer)))
+
+;;;###autoload
+(defun multi-isearch-switch-buffer ()
+ "Switch to the next buffer in multi-buffer search."
+ (when (and (buffer-live-p multi-isearch-current-buffer)
+ (not (eq multi-isearch-current-buffer (current-buffer))))
+ (setq isearch-mode nil)
+ (switch-to-buffer multi-isearch-current-buffer)
+ (setq isearch-mode " M-Isearch")))
;;; Global multi-buffer search invocations