# HG changeset patch # User Richard M. Stallman # Date 851061521 0 # Node ID f93f805e86dae1abbc13254b788725fb6be05de9 # Parent 981e116b4ac6f6c54efcd05a15fe11f11a5e48c1 (isearch-edit-string): When we try the search at the end, do that outside of the let which binds all the search state. diff -r 981e116b4ac6 -r f93f805e86da lisp/isearch.el --- a/lisp/isearch.el Fri Dec 20 00:09:23 1996 +0000 +++ b/lisp/isearch.el Fri Dec 20 05:58:41 1996 +0000 @@ -636,108 +636,111 @@ ;; Editing doesn't back up the search point. Should it? (interactive) (condition-case err - (let ((isearch-nonincremental isearch-nonincremental) + (progn + (let ((isearch-nonincremental isearch-nonincremental) - ;; Locally bind all isearch global variables to protect them - ;; from recursive isearching. - ;; isearch-string -message and -forward are not bound - ;; so they may be changed. Instead, save the values. - (isearch-new-string isearch-string) - (isearch-new-message isearch-message) - (isearch-new-forward isearch-forward) - (isearch-new-word isearch-word) + ;; Locally bind all isearch global variables to protect them + ;; from recursive isearching. + ;; isearch-string -message and -forward are not bound + ;; so they may be changed. Instead, save the values. + (isearch-new-string isearch-string) + (isearch-new-message isearch-message) + (isearch-new-forward isearch-forward) + (isearch-new-word isearch-word) - (isearch-regexp isearch-regexp) - (isearch-op-fun isearch-op-fun) - (isearch-cmds isearch-cmds) - (isearch-success isearch-success) - (isearch-wrapped isearch-wrapped) - (isearch-barrier isearch-barrier) - (isearch-adjusted isearch-adjusted) - (isearch-yank-flag isearch-yank-flag) - (isearch-invalid-regexp isearch-invalid-regexp) - (isearch-within-brackets isearch-within-brackets) -;;; Don't bind this. We want isearch-search, below, to set it. -;;; And the old value won't matter after that. -;;; (isearch-other-end isearch-other-end) -;;; Perhaps some of these other variables should be bound for a -;;; shorter period, ending before the next isearch-search. -;;; But there doesn't seem to be a real bug, so let's not risk it now. - (isearch-opoint isearch-opoint) - (isearch-slow-terminal-mode isearch-slow-terminal-mode) - (isearch-small-window isearch-small-window) - (isearch-recursive-edit isearch-recursive-edit) - ;; Save current configuration so we can restore it here. - (isearch-window-configuration (current-window-configuration)) - ) + (isearch-regexp isearch-regexp) + (isearch-op-fun isearch-op-fun) + (isearch-cmds isearch-cmds) + (isearch-success isearch-success) + (isearch-wrapped isearch-wrapped) + (isearch-barrier isearch-barrier) + (isearch-adjusted isearch-adjusted) + (isearch-yank-flag isearch-yank-flag) + (isearch-invalid-regexp isearch-invalid-regexp) + (isearch-within-brackets isearch-within-brackets) + ;;; Don't bind this. We want isearch-search, below, to set it. + ;;; And the old value won't matter after that. + ;;; (isearch-other-end isearch-other-end) + ;;; Perhaps some of these other variables should be bound for a + ;;; shorter period, ending before the next isearch-search. + ;;; But there doesn't seem to be a real bug, so let's not risk it now. + (isearch-opoint isearch-opoint) + (isearch-slow-terminal-mode isearch-slow-terminal-mode) + (isearch-small-window isearch-small-window) + (isearch-recursive-edit isearch-recursive-edit) + ;; Save current configuration so we can restore it here. + (isearch-window-configuration (current-window-configuration)) + ) - ;; 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. - (condition-case err - (isearch-done t t) - (exit nil)) ; was recursive editing + ;; 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. + (condition-case err + (isearch-done t t) + (exit nil)) ; was recursive editing - (isearch-message) ;; for read-char - (unwind-protect - (let* (;; Why does following read-char echo? - ;;(echo-keystrokes 0) ;; not needed with above message - (e (let ((cursor-in-echo-area t)) - (read-event))) - ;; Binding minibuffer-history-symbol to nil is a work-around - ;; for some incompatibility with gmhist. - (minibuffer-history-symbol) - (message-log-max nil)) - ;; If the first character the user types when we prompt them - ;; for a string is the yank-word character, then go into - ;; word-search mode. Otherwise unread that character and - ;; read a key the normal way. - ;; Word search does not apply (yet) to regexp searches, - ;; no check is made here. - (message (isearch-message-prefix nil nil t)) - (if (eq 'isearch-yank-word - (lookup-key isearch-mode-map (vector e))) - (setq isearch-word t;; so message-prefix is right - isearch-new-word t) - (cancel-kbd-macro-events) - (isearch-unread e)) - (setq cursor-in-echo-area nil) - (setq isearch-new-string - (let (junk-ring) - (read-from-minibuffer - (isearch-message-prefix nil nil isearch-nonincremental) - isearch-string - minibuffer-local-isearch-map nil - 'junk-ring)) - isearch-new-message - (mapconcat 'isearch-text-char-description - isearch-new-string ""))) - ;; Always resume isearching by restarting it. - (isearch-mode isearch-forward - isearch-regexp - isearch-op-fun - nil - isearch-word) + (isearch-message) ;; for read-char + (unwind-protect + (let* (;; Why does following read-char echo? + ;;(echo-keystrokes 0) ;; not needed with above message + (e (let ((cursor-in-echo-area t)) + (read-event))) + ;; Binding minibuffer-history-symbol to nil is a work-around + ;; for some incompatibility with gmhist. + (minibuffer-history-symbol) + (message-log-max nil)) + ;; If the first character the user types when we prompt them + ;; for a string is the yank-word character, then go into + ;; word-search mode. Otherwise unread that character and + ;; read a key the normal way. + ;; Word search does not apply (yet) to regexp searches, + ;; no check is made here. + (message (isearch-message-prefix nil nil t)) + (if (eq 'isearch-yank-word + (lookup-key isearch-mode-map (vector e))) + (setq isearch-word t;; so message-prefix is right + isearch-new-word t) + (cancel-kbd-macro-events) + (isearch-unread e)) + (setq cursor-in-echo-area nil) + (setq isearch-new-string + (let (junk-ring) + (read-from-minibuffer + (isearch-message-prefix nil nil isearch-nonincremental) + isearch-string + minibuffer-local-isearch-map nil + 'junk-ring)) + isearch-new-message + (mapconcat 'isearch-text-char-description + isearch-new-string ""))) + ;; Always resume isearching by restarting it. + (isearch-mode isearch-forward + isearch-regexp + isearch-op-fun + nil + isearch-word) - ;; Copy new local values to isearch globals - (setq isearch-string isearch-new-string - isearch-message isearch-new-message - isearch-forward isearch-new-forward - isearch-word isearch-new-word)) + ;; Copy new local values to isearch globals + (setq isearch-string isearch-new-string + isearch-message isearch-new-message + isearch-forward isearch-new-forward + isearch-word isearch-new-word)) - ;; Empty isearch-string means use default. - (if (= 0 (length isearch-string)) - (setq isearch-string (or (car (if isearch-regexp - regexp-search-ring - search-ring)) - "")) - ;; This used to set the last search string, - ;; but I think it is not right to do that here. - ;; Only the string actually used should be saved. - ) + ;; Empty isearch-string means use default. + (if (= 0 (length isearch-string)) + (setq isearch-string (or (car (if isearch-regexp + regexp-search-ring + search-ring)) + "")) + ;; This used to set the last search string, + ;; but I think it is not right to do that here. + ;; Only the string actually used should be saved. + )) + + ;; Push the state as of before this C-s. + (isearch-push-state) ;; Reinvoke the pending search. - (isearch-push-state) (isearch-search) (isearch-update) (if isearch-nonincremental