mirror of
https://git.savannah.gnu.org/git/emacs.git
synced 2024-11-27 07:37:33 +00:00
* lisp/isearch.el (word-search-regexp): Match whitespace if the search
string begins or ends in whitespace. The LAX arg is applied to both ends of the search string. Use `regexp-quote' and explicit \< and \> instead of \b. Use \` and \' instead of ^ and $. (isearch-symbol-regexp): Sync with `word-search-regexp' where word boundaries are replaced with symbol boundaries, and characters between symbols match non-word non-symbol syntax. Fixes: debbugs:14602
This commit is contained in:
parent
cb89acab6c
commit
a22289f7ab
8
etc/NEWS
8
etc/NEWS
@ -300,6 +300,14 @@ Set `isearch-allow-prefix' to nil to restore old behavior.
|
||||
`isearch-printing-char', `isearch-quote-char', `isearch-yank-word',
|
||||
`isearch-yank-line'.
|
||||
|
||||
*** Word search now matches whitespace at the beginning/end
|
||||
of the search string if it contains leading/trailing whitespace.
|
||||
In an incremental word search or when using a non-nil LAX argument
|
||||
of `word-search-regexp', the lax matching can also match part of
|
||||
the first word (in addition to the lax matching of the last word).
|
||||
The same rules are now applied to the symbol search with the difference
|
||||
that it matches symbols, and non-symbol characters between symbols.
|
||||
|
||||
** MH-E has been updated to MH-E version 8.5.
|
||||
See MH-E-NEWS for details.
|
||||
|
||||
|
@ -1,3 +1,13 @@
|
||||
2013-06-13 Juri Linkov <juri@jurta.org>
|
||||
|
||||
* isearch.el (word-search-regexp): Match whitespace if the search
|
||||
string begins or ends in whitespace. The LAX arg is applied to
|
||||
both ends of the search string. Use `regexp-quote' and explicit
|
||||
\< and \> instead of \b. Use \` and \' instead of ^ and $.
|
||||
(isearch-symbol-regexp): Sync with `word-search-regexp' where word
|
||||
boundaries are replaced with symbol boundaries, and characters
|
||||
between symbols match non-word non-symbol syntax. (Bug#14602)
|
||||
|
||||
2013-06-13 Juri Linkov <juri@jurta.org>
|
||||
|
||||
* isearch.el (isearch-del-char): Don't exceed the length of
|
||||
|
@ -1540,17 +1540,22 @@ nil and a non-nil value of the option `search-invisible'
|
||||
"Return a regexp which matches words, ignoring punctuation.
|
||||
Given STRING, a string of words separated by word delimiters,
|
||||
compute a regexp that matches those exact words separated by
|
||||
arbitrary punctuation. If LAX is non-nil, the end of the string
|
||||
need not match a word boundary unless it ends in whitespace.
|
||||
arbitrary punctuation. If the string begins or ends in whitespace,
|
||||
the beginning or the end of the string matches arbitrary whitespace.
|
||||
Otherwise if LAX is non-nil, the beginning or the end of the string
|
||||
need not match a word boundary.
|
||||
|
||||
Used in `word-search-forward', `word-search-backward',
|
||||
`word-search-forward-lax', `word-search-backward-lax'."
|
||||
(if (string-match-p "^\\W*$" string)
|
||||
""
|
||||
(concat
|
||||
"\\b"
|
||||
(mapconcat 'identity (split-string string "\\W+" t) "\\W+")
|
||||
(if (or (not lax) (string-match-p "\\W$" string)) "\\b"))))
|
||||
(cond
|
||||
((equal string "") "")
|
||||
((string-match-p "\\`\\W+\\'" string) "\\W+")
|
||||
(t (concat
|
||||
(if (string-match-p "\\`\\W" string) "\\W+"
|
||||
(unless lax "\\<"))
|
||||
(mapconcat 'regexp-quote (split-string string "\\W+" t) "\\W+")
|
||||
(if (string-match-p "\\W\\'" string) "\\W+"
|
||||
(unless lax "\\>"))))))
|
||||
|
||||
(defun word-search-backward (string &optional bound noerror count)
|
||||
"Search backward from point for STRING, ignoring differences in punctuation.
|
||||
@ -1625,8 +1630,24 @@ to punctuation."
|
||||
(defun isearch-symbol-regexp (string &optional lax)
|
||||
"Return a regexp which matches STRING as a symbol.
|
||||
Creates a regexp where STRING is surrounded by symbol delimiters \\_< and \\_>.
|
||||
If LAX is non-nil, the end of the string need not match a symbol boundary."
|
||||
(concat "\\_<" (regexp-quote string) (unless lax "\\_>")))
|
||||
If there are more than one symbol, then compute a regexp that matches
|
||||
those exact symbols separated by non-symbol characters. If the string
|
||||
begins or ends in whitespace, the beginning or the end of the string
|
||||
matches arbitrary non-symbol whitespace. Otherwise if LAX is non-nil,
|
||||
the beginning or the end of the string need not match a symbol boundary."
|
||||
(let ((not-word-symbol-re
|
||||
;; This regexp matches all syntaxes except word and symbol syntax.
|
||||
;; FIXME: Replace it with something shorter if possible (bug#14602).
|
||||
"\\(?:\\s-\\|\\s.\\|\\s(\\|\\s)\\|\\s\"\\|\\s\\\\|\\s/\\|\\s$\\|\\s'\\|\\s<\\|\\s>\\|\\s@\\|\\s!\\|\\s|\\)+"))
|
||||
(cond
|
||||
((equal string "") "")
|
||||
((string-match-p (format "\\`%s\\'" not-word-symbol-re) string) not-word-symbol-re)
|
||||
(t (concat
|
||||
(if (string-match-p (format "\\`%s" not-word-symbol-re) string) not-word-symbol-re
|
||||
(unless lax "\\_<"))
|
||||
(mapconcat 'regexp-quote (split-string string not-word-symbol-re t) not-word-symbol-re)
|
||||
(if (string-match-p (format "%s\\'" not-word-symbol-re) string) not-word-symbol-re
|
||||
(unless lax "\\_>")))))))
|
||||
|
||||
(put 'isearch-symbol-regexp 'isearch-message-prefix "symbol ")
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user