From: Juri Linkov Date: Tue, 4 Dec 2018 00:41:54 +0000 (+0200) Subject: * lisp/isearch.el (isearch-yank-on-move): New defcustom X-Git-Tag: emacs-27.0.90~4053 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=f745cf8c438cdb258bc1a37b617749d1c84e688e;p=emacs.git * lisp/isearch.el (isearch-yank-on-move): New defcustom with shift-move related options extracted from `search-exit-option'. (isearch-pre-command-hook): Rename search-exit-option to isearch-yank-on-move in shift-move related places. (isearch-post-command-hook): Check for isearch-pre-move-point instead of search-exit-option. (Bug#15839) * doc/emacs/search.texi (Not Exiting Isearch): Rename search-exit-option to isearch-yank-on-move. * lisp/menu-bar.el (menu-bar-i-search-menu): Add more isearch commands. --- diff --git a/doc/emacs/search.texi b/doc/emacs/search.texi index 35e2bfbb623..8ea80cb9c68 100644 --- a/doc/emacs/search.texi +++ b/doc/emacs/search.texi @@ -548,12 +548,12 @@ an incremental search. This feature is disabled if @item Motion Commands @cindex motion commands, during incremental search -When @code{search-exit-option} is customized to @code{shift-move}, +When @code{isearch-yank-on-move} is customized to @code{shift}, you can extend the search string by holding down the shift key while typing cursor motion commands. It will yank text that ends at the new position after moving point in the current buffer. -When @code{search-exit-option} is @code{move}, you can extend the +When @code{isearch-yank-on-move} is @code{t}, you can extend the search string without using the shift key for cursor motion commands, but it applies only for certain motion command that have the @code{isearch-move} property on their symbols. diff --git a/etc/NEWS b/etc/NEWS index 042a4b59d35..206f0fc1e6e 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -691,11 +691,10 @@ highlight in one iteration while processing the full buffer. 'C-M-d'. +++ -*** 'search-exit-option' provides new options 'move' and 'shift-move' +*** New variable 'isearch-yank-on-move' provides options 't' and 'shift' to extend the search string by yanking text that ends at the new -position after moving point in the current buffer. 'shift-move' -extends the search string by motion commands while holding down -the shift key. +position after moving point in the current buffer. 'shift' extends +the search string by motion commands while holding down the shift key. *** 'isearch-allow-scroll' provides new option 'unlimited' to allow scrolling any distance off screen. diff --git a/lisp/isearch.el b/lisp/isearch.el index cc199b16d81..dcd119a517c 100644 --- a/lisp/isearch.el +++ b/lisp/isearch.el @@ -72,21 +72,11 @@ If t, random control and meta characters terminate the search and are then executed normally. If `edit', edit the search string instead of exiting. -If `move', extend the search string by motion commands -that have the `isearch-move' property on their symbols -equal to `enabled', or the shift-translated command is -not disabled by the value `disabled' of the same property. -If `shift-move', extend the search string by motion commands -while holding down the shift key. -Both `move' and `shift-move' extend the search string by yanking text -that ends at the new position after moving point in the current buffer. If `append', the characters which you type that are not interpreted by the incremental search are simply appended to the search string. If nil, run the command without exiting Isearch." :type '(choice (const :tag "Terminate incremental search" t) (const :tag "Edit the search string" edit) - (const :tag "Extend the search string by motion commands" move) - (const :tag "Extend the search string by shifted motion keys" shift-move) (const :tag "Append control characters to the search string" append) (const :tag "Don't terminate incremental search" nil)) :version "27.1") @@ -2816,6 +2806,21 @@ the bottom." (defvar isearch-pre-scroll-point nil) (defvar isearch-pre-move-point nil) +(defcustom isearch-yank-on-move nil + "Motion keys yank text to the search string while you move the cursor. +If `shift', extend the search string by motion commands while holding down +the shift key. The search string is extended by yanking text that +ends at the new position after moving point in the current buffer. +If t, extend the search string without the shift key pressed +by motion commands that have the `isearch-move' property on their +symbols equal to `enabled', or for which the shift-translated command +is not disabled by the value `disabled' of property `isearch-move'." + :type '(choice (const :tag "Motion keys exit Isearch" nil) + (const :tag "Motion keys extend the search string" t) + (const :tag "Shifted motion keys extend the search string" shift)) + :group 'isearch + :version "27.1") + (defun isearch-pre-command-hook () "Decide whether to exit Isearch mode before executing the command. Don't exit Isearch if the key sequence that invoked this command @@ -2859,13 +2864,13 @@ See more for options in `search-exit-option'." (read-event) (setq this-command 'isearch-edit-string)) ;; Don't terminate the search for motion commands. - ((or (and (eq search-exit-option 'move) + ((or (and (eq isearch-yank-on-move t) (symbolp this-command) (or (eq (get this-command 'isearch-move) 'enabled) (and (not (eq (get this-command 'isearch-move) 'disabled)) (stringp (nth 1 (interactive-form this-command))) (string-match-p "^^" (nth 1 (interactive-form this-command)))))) - (and (eq search-exit-option 'shift-move) + (and (eq isearch-yank-on-move 'shift) this-command-keys-shift-translated)) (setq this-command-keys-shift-translated nil) (setq isearch-pre-move-point (point))) @@ -2890,9 +2895,8 @@ See more for options in `search-exit-option'." (when (eq isearch-allow-scroll 'unlimited) (when isearch-lazy-highlight (isearch-lazy-highlight-new-loop))) - (when (memq search-exit-option '(move shift-move)) - (when (and isearch-pre-move-point - (not (eq isearch-pre-move-point (point)))) + (when isearch-pre-move-point + (when (not (eq isearch-pre-move-point (point))) (let ((string (buffer-substring-no-properties (or isearch-other-end isearch-opoint) (point)))) (if isearch-regexp (setq string (regexp-quote string))) @@ -3188,12 +3192,12 @@ the word mode." (defun isearch-message-suffix (&optional c-q-hack) (propertize (concat (if c-q-hack "^Q" "") - (if isearch-error - (concat " [" isearch-error "]") - "") - (isearch-lazy-count-format 'suffix) - (or isearch-message-suffix-add "")) - 'face 'minibuffer-prompt)) + (isearch-lazy-count-format 'suffix) + (if isearch-error + (concat " [" isearch-error "]") + "") + (or isearch-message-suffix-add "")) + 'face 'minibuffer-prompt)) (defun isearch-lazy-count-format (&optional suffix-p) "Format the current match number and the total number of matches. diff --git a/lisp/menu-bar.el b/lisp/menu-bar.el index 6de0a62bc2d..1081fb4a052 100644 --- a/lisp/menu-bar.el +++ b/lisp/menu-bar.el @@ -277,6 +277,15 @@ ;; The Edit->Search->Incremental Search menu (defvar menu-bar-i-search-menu (let ((menu (make-sparse-keymap "Incremental Search"))) + (bindings--define-key menu [isearch-forward-symbol-at-point] + '(menu-item "Forward Symbol at Point..." isearch-forward-symbol-at-point + :help "Search forward for a symbol found at point")) + (bindings--define-key menu [isearch-forward-symbol] + '(menu-item "Forward Symbol..." isearch-forward-symbol + :help "Search forward for a symbol as you type it")) + (bindings--define-key menu [isearch-forward-word] + '(menu-item "Forward Word..." isearch-forward-word + :help "Search forward for a word as you type it")) (bindings--define-key menu [isearch-backward-regexp] '(menu-item "Backward Regexp..." isearch-backward-regexp :help "Search backwards for a regular expression as you type it"))