Subject: Re: bug#13480: 24.3.50; `C-w' from Isearch should translate newlines to spaces

From: Dani Moncayo <[email-masked]>
Date: Sun, 20 Jan 2013 10:41:56 +0100

>>>> So we could use `isearch-message' to display the translated
>>>> search string but not to translate it in `isearch-string'.
>>> Yes, +1.
>>
>> IIRC there's the same problem with case-sensitivity.
>
> Not downcasing the yanked string could help to fix bug#10118.

Of course, because altering the original text supplied by the user is
definitely a mistake.

> According to the docstring of `search-upper-case',
> if its value is `not-yanks', text yanked into the
> search string is always downcased.
>
> So maybe a better default value for `search-upper-case'
> would be `nil' instead of the current default `not-yanks'.

I've just read the docstring of that variable, and I think its design
is clearly misguided.  The text in the search string that came from a
yank should not be treated differently from the rest.  I see no point
in that approach.

I would control the behavior of Isearch wrt case-sensitivity with a
variable `isearch-case-sensitive' which the user could set to:
1. `auto' (the default): the search is case-sensitive only when the
search string contains at least one uppercase character.
2. `nil': the search is case-insensitive.
3. (any other value): the search is case-sensitive.

> If a tri-state option with three values t/nil/not-yanks
> is a good customization UI then perhaps `isearch-lax-whitespace'
> should provide the option `not-yanks' too, specifying whether
> newlines should be translated to a single space in text yanked
> into the search string.
>
> If the value `not-yanks' is a bad UI then search functions should
> take care about translating the characters in the search string internally
> depending on a new set of options specifying how search functions should
> use the right case and whitespace.

I don't think this is a question of good or bad UI, but of good or bad design.

In summary, I see two mistake here:

1. Losing information.  Example: downcasing the text in `C-s C-y' or
`C-s C-w'.  The text supplied by the user to search for should be kept
untouched.  Not doing so is asking for trouble.

2. Not interpreting correctly the search string.  Example: the
original post in this thread.  If `isearch-lax-whitespace' is non-nil,
`C-s fooXbar' should find every string `fooYbar' in the buffer, where
X and Y are arbitrary strings that match `search-whitespace-regexp'.

-- 
Dani Moncayo