* 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.
(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)
(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."
"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.
(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))
\f
;; Functions for searching in tags style among marked files.
(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
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.
(unwind-protect
(progn ,@body)
+ (setq isearch-suspended nil)
+
;; Always resume isearching by restarting it.
(isearch-mode isearch-forward
isearch-regexp
(message "")))))
(quit ; handle abort-recursive-edit
+ (setq isearch-suspended nil)
(isearch-abort) ;; outside of let to restore outside global values
)))