@kindex M-s C-e @r{(Incremental search)}
@findex isearch-yank-line
- Similarly, @kbd{M-s C-e} (@code{isearch-yank-line}) appends the rest
+ @kbd{M-s C-e} (@code{isearch-yank-line}) appends the rest
of the current line to the search string. If point is already at the
end of a line, it appends the next line. With a prefix argument
@var{n}, it appends the next @var{n} lines.
+@kindex C-M-z @r{(Incremental search)}
+@findex isearch-yank-until-char
+ Similarly, @kbd{C-M-z} (@code{isearch-yank-until-char}) appends to
+the search string everything from point until the next occurence of
+a specified character (not including that character). This is especially
+useful for keyboard macros, for example in programming languages or
+markup languages in which that character marks a token boundary.
+
@kindex C-y @r{(Incremental search)}
@kindex M-y @r{(Incremental search)}
@kindex mouse-2 @r{in the minibuffer (Incremental search)}
+++
*** New isearch bindings.
+'C-M-z' invokes new function 'isearch-yank-until-char', which yanks
+everything from point up to but not including the specified
+character into the search string. This is especially useful for
+keyboard macros.
+
'C-M-w' in isearch changed from 'isearch-del-char' to the new function
'isearch-yank-symbol-or-char'. 'isearch-del-char' is now bound to
'C-M-d'.
(define-key map [isearch-yank-kill]
'(menu-item "Current kill" isearch-yank-kill
:help "Append current kill to search string"))
+ (define-key map [isearch-yank-until-char]
+ '(menu-item "Until char..." isearch-yank-until-char
+ :help "Yank from point to specified character into search string"))
(define-key map [isearch-yank-line]
'(menu-item "Rest of line" isearch-yank-line
:help "Yank the rest of the current line on search string"))
(define-key map "\M-\C-d" 'isearch-del-char)
(define-key map "\M-\C-y" 'isearch-yank-char)
(define-key map "\C-y" 'isearch-yank-kill)
+ (define-key map "\M-\C-z" 'isearch-yank-until-char)
(define-key map "\M-s\C-e" 'isearch-yank-line)
(define-key map "\M-s\M-<" 'isearch-beginning-of-buffer)
Type \\[isearch-del-char] to delete character from end of search string.
Type \\[isearch-yank-char] to yank char from buffer onto end of search\
string and search for it.
+Type \\[isearch-yank-until-char] to yank from point until the next instance of a
+ specified character onto end of search string and search for it.
Type \\[isearch-yank-line] to yank rest of line onto end of search string\
and search for it.
Type \\[isearch-yank-kill] to yank the last string of killed text.
(interactive "p")
(isearch-yank-internal (lambda () (forward-word arg) (point))))
+(defun isearch-yank-until-char (char)
+ "Pull everything until next instance of CHAR from buffer into search string.
+Interactively, prompt for CHAR.
+This is often useful for keyboard macros, for example in programming
+languages or markup languages in which CHAR marks a token boundary."
+ (interactive "cYank until character: ")
+ (isearch-yank-internal
+ (lambda () (let ((inhibit-field-text-motion t))
+ (condition-case nil
+ (progn
+ (search-forward (char-to-string char))
+ (forward-char -1))
+ (search-failed
+ (message "`%c' not found" char)
+ (sit-for 2)))
+ (point)))))
+
(defun isearch-yank-line (&optional arg)
"Pull rest of line from buffer into search string.
If optional ARG is non-nil, yank the next ARG lines."