emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] master 71e4585: Restore isearch correctly after M-e in spe


From: Juri Linkov
Subject: [Emacs-diffs] master 71e4585: Restore isearch correctly after M-e in special modes (bug#30187)
Date: Mon, 22 Jan 2018 17:14:21 -0500 (EST)

branch: master
commit 71e458505f3f3fb5e545b83f7609dac5dff1c289
Author: Juri Linkov <address@hidden>
Commit: Juri Linkov <address@hidden>

    Restore isearch correctly after M-e in special modes (bug#30187)
    
    * lisp/isearch.el (isearch-suspended): New defvar.
    (with-isearch-suspended): Set isearch-suspended to t
    at the beginning, then set it back to nil at the end.
    
    * lisp/comint.el (comint-history-isearch-backward)
    (comint-history-isearch-backward-regexp): Set global value of
    comint-history-isearch to t.
    (comint-history-isearch-end): Reevaluate
    comint-history-isearch when isearch-edit-string finishes.
    
    * lisp/dired-aux.el (dired-isearch-filenames)
    (dired-isearch-filenames-regexp): Set global value of
    dired-isearch-filenames to t.
    (dired-isearch-filenames-end): Reevaluate
    dired-isearch-filenames when isearch-edit-string finishes.
---
 lisp/comint.el    | 12 +++++++-----
 lisp/dired-aux.el | 12 +++++++-----
 lisp/isearch.el   |  7 +++++++
 3 files changed, 21 insertions(+), 10 deletions(-)

diff --git a/lisp/comint.el b/lisp/comint.el
index a79e34b..8dba317 100644
--- a/lisp/comint.el
+++ b/lisp/comint.el
@@ -1434,14 +1434,14 @@ If nil, Isearch operates on the whole comint buffer."
 (defun comint-history-isearch-backward ()
   "Search for a string backward in input history using Isearch."
   (interactive)
-  (let ((comint-history-isearch t))
-    (isearch-backward nil t)))
+  (setq comint-history-isearch t)
+  (isearch-backward nil t))
 
 (defun comint-history-isearch-backward-regexp ()
   "Search for a regular expression backward in input history using Isearch."
   (interactive)
-  (let ((comint-history-isearch t))
-    (isearch-backward-regexp nil t)))
+  (setq comint-history-isearch t)
+  (isearch-backward-regexp nil t))
 
 (defvar-local comint-history-isearch-message-overlay nil)
 
@@ -1472,7 +1472,9 @@ Intended to be added to `isearch-mode-hook' in 
`comint-mode'."
   (setq isearch-message-function nil)
   (setq isearch-wrap-function nil)
   (setq isearch-push-state-function nil)
-  (remove-hook 'isearch-mode-end-hook 'comint-history-isearch-end t))
+  (remove-hook 'isearch-mode-end-hook 'comint-history-isearch-end t)
+  (unless isearch-suspended
+    (custom-reevaluate-setting 'comint-history-isearch)))
 
 (defun comint-goto-input (pos)
   "Put input history item of the absolute history position POS."
diff --git a/lisp/dired-aux.el b/lisp/dired-aux.el
index 223b254..55b68a3 100644
--- a/lisp/dired-aux.el
+++ b/lisp/dired-aux.el
@@ -2766,7 +2766,9 @@ Intended to be added to `isearch-mode-hook'."
   "Clean up the Dired file name search after terminating isearch."
   (define-key isearch-mode-map "\M-sff" nil)
   (dired-isearch-filenames-mode -1)
-  (remove-hook 'isearch-mode-end-hook 'dired-isearch-filenames-end t))
+  (remove-hook 'isearch-mode-end-hook 'dired-isearch-filenames-end t)
+  (unless isearch-suspended
+    (custom-reevaluate-setting 'dired-isearch-filenames)))
 
 (defun dired-isearch-filter-filenames (beg end)
   "Test whether some part of the current search match is inside a file name.
@@ -2779,15 +2781,15 @@ is part of a file name (i.e., has the text property 
`dired-filename')."
 (defun dired-isearch-filenames ()
   "Search for a string using Isearch only in file names in the Dired buffer."
   (interactive)
-  (let ((dired-isearch-filenames t))
-    (isearch-forward nil t)))
+  (setq dired-isearch-filenames t)
+  (isearch-forward nil t))
 
 ;;;###autoload
 (defun dired-isearch-filenames-regexp ()
   "Search for a regexp using Isearch only in file names in the Dired buffer."
   (interactive)
-  (let ((dired-isearch-filenames t))
-    (isearch-forward-regexp nil t)))
+  (setq dired-isearch-filenames t)
+  (isearch-forward-regexp nil t))
 
 
 ;; Functions for searching in tags style among marked files.
diff --git a/lisp/isearch.el b/lisp/isearch.el
index 3725779..23dd9af 100644
--- a/lisp/isearch.el
+++ b/lisp/isearch.el
@@ -1233,6 +1233,8 @@ If this is set inside code wrapped by the macro
 (define-obsolete-variable-alias 'isearch-new-word
   'isearch-new-regexp-function "25.1")
 
+(defvar isearch-suspended nil)
+
 (defmacro with-isearch-suspended (&rest body)
   "Exit Isearch mode, run BODY, and reinvoke the pending search.
 You can update the global isearch variables by setting new values to
@@ -1299,6 +1301,8 @@ You can update the global isearch variables by setting 
new values to
               isearch-original-minibuffer-message-timeout)
              old-point old-other-end)
 
+          (setq isearch-suspended t)
+
          ;; Actually terminate isearching until editing is done.
          ;; This is so that the user can do anything without failure,
          ;; like switch buffers and start another isearch, and return.
@@ -1313,6 +1317,8 @@ You can update the global isearch variables by setting 
new values to
          (unwind-protect
              (progn ,@body)
 
+            (setq isearch-suspended nil)
+
            ;; Always resume isearching by restarting it.
            (isearch-mode isearch-forward
                          isearch-regexp
@@ -1374,6 +1380,7 @@ You can update the global isearch variables by setting 
new values to
                  (message "")))))
 
     (quit  ; handle abort-recursive-edit
+     (setq isearch-suspended nil)
      (isearch-abort)  ;; outside of let to restore outside global values
      )))
 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]