[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RE: emacs 22 - regular-expression isearch on spaces extremely lenient

From: Drew Adams
Subject: RE: emacs 22 - regular-expression isearch on spaces extremely lenient
Date: Sat, 29 Apr 2006 07:41:08 -0700

    i recently started noticing that emacs 22 regular expression isearches
    do not treat spaces exactly - any number of spaces in your search will
    map to any number, same or different, of spaces in the target.

    can anyone tell me whether or not it's deliberate, and what the
    rationale is?

(setq search-whitespace-regexp nil) will turn this off. When this is nil,
each space you type matches literally, against one space.

`search-whitespace-regexp' is, by default, "\\s-+", which searches for any
amount of whitespace when you type a space. This was introduced for regexp
search in Emacs 21, I believe. There is no such "magic-space" searching in
Emacs 20. Doc:

 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 `]+'.

The rationale was, I believe, that some users might want that: type space to
find any amount of whitespace, in particular, to find two words that are
separated by a newline.

There was talk of using this "magic-space" searching also for plain
incremental search in Emacs 22, but I don't think that was done.

FWIW, I agree with Miles on this - this is a misfeature, if turned on by
default. It should be off by default, and you should be able to turn it on
via a simple toggle during incremental search (regexp or plain).

Here is what I wrote 2005/02/06 to emacs-devel on this:

            > > sometimes the actual whitespace matters.
            > Right: in *regexp* search.
          while people generally expect regexp searches to be a bit
          fuzzy, they might expect a non-regexp search to be exact.
          Since the fuzzy whitespace matching often "looks" like normal
          matching (because the majority of whitespace is in fact a
          single space), it might take some time to see what's going on,
          resulting in some subtle errors. This is particularly true if
          one embeds a search inside a keyboard macro [which I often do].

    Plain (incremental) search should be a literal search. Regexp
    search should rigorously respect the regexp. People don't expect
    either to be fuzzy.

    The question is "Under what circumstances should typing a space be
    interpreted as wanting to search for any amount of whitespace?"

    This is unrelated to both plain search and regexp search. You
    might or might not want this _input effect_ with either plain
    or regexp search.

    This is akin to word search (as I think someone mentioned).
    Ultimately, a word search or a space-means-whitespace search is
    implemented with a regexp search - but the point in both cases
    is to provide a user-friendly way to do it, instead of requiring
    users to know about regexps.

    By default, neither `C-M-s' nor `C-s' should respect the
    user-friendly space-input feature. Or, rather, the default
    behavior of each should be determined by a user option - a la
    case-fold-search. And, regardless of the value of this option,
    you should be able to toggle space-means-whitespace
    searching from both `C-M-s' and `C-s', via a key sequence.

    The question then becomes how to toggle this space-means-whitespace

reply via email to

[Prev in Thread] Current Thread [Next in Thread]