From: "Chong Yidong" <cyd@stupidchicken.com>
Subject: search-whitespace-regexp
Date: Fri, 4 Feb 2005 09:12:33 -0500 (EST) [thread overview]
Message-ID: <1982.220.255.95.17.1107526353.squirrel@220.255.95.17> (raw)
CVS Emacs has a variable, search-whitespace-regexp, which is a regexp that
replaces any space or spaces entered into isearch-forward-regexp. Setting
this variable to "[ \t\r\n]+" provides incremental searching across line
breaks, which is a commonly requested feature. However, I believe that
using search-whitespace-regexp in isearch-forward-regexp is a misfeature.
It should instead be used for isearch-forward.
When a user calls isearch-forward-regexp, he probably knows the precise
expression he wants, and how to craft a regular expression to find it. In
certain situations, it might be a nuisance for Emacs to silently tamper
with the regular expression he supplies.
The search-whitespace-regexp feature is more appropriate for "casual"
incremental searching. New users, in particular, do not expect isearch to
be foiled by line breaks. However, telling them to set
search-whitespace-regexp and use isearch-forward-regexp instead is not a
good solution, because commonly-used characters such as "." have a special
meaning in regexps.
The solution is to apply the search-whitespace-regexp behavior to
isearch-forward, rather than isearch-forward-regexp. The following patch
accomplishes this
*** isearch.el~ Fri Feb 4 19:33:15 2005
--- isearch.el Fri Feb 4 21:59:13 2005
***************
*** 109,120 ****
:type 'boolean
:group 'isearch)
! (defcustom search-whitespace-regexp "\\s-+"
"*If non-nil, regular expression to match a sequence of whitespace chars.
! This applies to regular expression incremental search.
! When you put a space or spaces in the incremental regexp, it stands for
! this, unless it is inside of a regexp construct such as [...] or *, + or ?.
! You might want to use something like \"[ \\t\\r\\n]+\" instead.
In the Customization buffer, that is `[' followed by a space,
a tab, a carriage return (control-M), a newline, and `]+'."
:type 'regexp
--- 109,119 ----
:type 'boolean
:group 'isearch)
! (defcustom search-whitespace-regexp nil
"*If non-nil, regular expression to match a sequence of whitespace chars.
! This applies to incremental search. When you put a space or
! spaces in the incremental search string, it stands for this.
! You might want to use something like \"[ \\t\\r\\n]+\".
In the Customization buffer, that is `[' followed by a space,
a tab, a carriage return (control-M), a newline, and `]+'."
:type 'regexp
***************
*** 573,584 ****
Do incremental search forward for regular expression.
With a prefix argument, do a regular string search instead.
Like ordinary incremental search except that your input
! is treated as a regexp. See \\[isearch-forward] for more info.
!
! In regexp incremental searches, a space or spaces normally matches
! any whitespace (the variable `search-whitespace-regexp' controls
! precisely what that means). If you want to search for a literal space
! and nothing else, enter `[ ]'."
(interactive "P\np")
(isearch-mode t (null not-regexp) nil (not no-recursive-edit)))
--- 572,578 ----
Do incremental search forward for regular expression.
With a prefix argument, do a regular string search instead.
Like ordinary incremental search except that your input
! is treated as a regexp. See \\[isearch-forward] for more info."
(interactive "P\np")
(isearch-mode t (null not-regexp) nil (not no-recursive-edit)))
***************
*** 2029,2035 ****
(isearch-regexp
(if isearch-forward 're-search-forward 're-search-backward))
(t
! (if isearch-forward 'search-forward 'search-backward)))))
(defun isearch-search ()
;; Do the search with the current search string.
--- 2023,2043 ----
(isearch-regexp
(if isearch-forward 're-search-forward 're-search-backward))
(t
! (if isearch-forward 'isearch-search-forward
'isearch-search-backward)))))
!
! (defun isearch-search-forward (string &optional bound noerror count)
! (re-search-forward
! (if search-whitespace-regexp
! (replace-regexp-in-string " +" search-whitespace-regexp string)
! string)
! bound noerror count))
!
! (defun isearch-search-backward (string &optional bound noerror count)
! (re-search-backward
! (if search-whitespace-regexp
! (replace-regexp-in-string " +" search-whitespace-regexp string)
! string)
! bound noerror count))
(defun isearch-search ()
;; Do the search with the current search string.
***************
*** 2041,2047 ****
(let ((inhibit-point-motion-hooks search-invisible)
(inhibit-quit nil)
(case-fold-search isearch-case-fold-search)
- (search-spaces-regexp search-whitespace-regexp)
(retry t))
(if isearch-regexp (setq isearch-invalid-regexp nil))
(setq isearch-within-brackets nil)
--- 2049,2054 ----
***************
*** 2377,2384 ****
(defun isearch-lazy-highlight-search ()
"Search ahead for the next or previous match, for lazy highlighting.
Attempt to do the search exactly the way the pending isearch would."
! (let ((case-fold-search isearch-case-fold-search)
! (search-spaces-regexp search-whitespace-regexp))
(funcall (isearch-search-fun)
isearch-string
(if isearch-forward
--- 2384,2390 ----
(defun isearch-lazy-highlight-search ()
"Search ahead for the next or previous match, for lazy highlighting.
Attempt to do the search exactly the way the pending isearch would."
! (let ((case-fold-search isearch-case-fold-search))
(funcall (isearch-search-fun)
isearch-string
(if isearch-forward
next reply other threads:[~2005-02-04 14:12 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-02-04 14:12 Chong Yidong [this message]
2005-02-04 14:36 ` search-whitespace-regexp Andreas Schwab
2005-02-04 15:22 ` search-whitespace-regexp Chong Yidong
2005-02-04 15:27 ` search-whitespace-regexp Chong Yidong
2005-02-04 15:17 ` search-whitespace-regexp Stefan Monnier
2005-02-04 15:55 ` search-whitespace-regexp Chong Yidong
2005-02-05 17:39 ` search-whitespace-regexp Richard Stallman
2005-02-06 1:59 ` search-whitespace-regexp Chong Yidong
2005-02-06 12:42 ` search-whitespace-regexp Richard Stallman
2005-02-06 16:21 ` search-whitespace-regexp Stefan Monnier
2005-02-06 22:39 ` search-whitespace-regexp Miles Bader
2005-02-06 22:49 ` search-whitespace-regexp Stefan Monnier
2005-02-06 23:17 ` search-whitespace-regexp Miles Bader
2005-02-07 0:28 ` search-whitespace-regexp Drew Adams
2005-02-07 0:41 ` search-whitespace-regexp Miles Bader
2005-02-07 1:36 ` search-whitespace-regexp Chong Yidong
2005-02-07 4:12 ` search-whitespace-regexp Drew Adams
2005-02-07 9:48 ` search-whitespace-regexp Andreas Schwab
2005-02-07 20:51 ` search-whitespace-regexp Richard Stallman
2005-02-07 20:51 ` search-whitespace-regexp Richard Stallman
2005-02-07 21:07 ` search-whitespace-regexp Stefan Monnier
2005-02-08 0:01 ` search-whitespace-regexp Miles Bader
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.gnu.org/software/emacs/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1982.220.255.95.17.1107526353.squirrel@220.255.95.17 \
--to=cyd@stupidchicken.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).