Subject: Re: bug#54804: 29.0.50; zap-to-char: case sensitive for upper-case letter

From: Tino Calancha <[email-masked]>
Date: Tue, 17 May 2022 14:34:06 +0200

Eli Zaretskii <[email-masked]> writes:

I have added Stefan, who suggests using the interactive arg (see
explanation below).
I have also added Juri, who is expert on isearch.

>> From: Tino Calancha <[email-masked]>
>>     * lisp/misc.el (zap-up-to-char): Add an optional arg INTERACTIVE.
>>     Perform a case-sensitive search when INTERACTIVE is non-nil and
>>     CHAR is an upper-case character.
>
> I don't understand why the need for the new INTERACTIVE argument.

> And, as mentioned above, I don't think I understand why we need to do
> this only in interactive calls.  Non-interactive invocations already
> have a way to request case-sensitivity, by let-binding
> case-fold-search, right?

I'll try to explain this.

This is what Emacs does for isearch/search.

If you go to the *scratch* buffer, and you do
C-s T C-s C-s
you only jump on 'T', that is, you skip the 't'. This is regardless
on the `case-fold-search' value.

Calling from Lisp:
(search-forward "T" nil t)
we'll also jump on the 't' if `case-fold-search' is non-nil.

I want the analog behavior for zap-to... commands: automatic
case sensitivity when the char is uppercase.
I want this behavior on interactive calls only, for instance when users
do `M-z'.

How to detect that the users are calling these commands interactively?
I got inspired from this comment found at the docstring of
`called-interactively-p' (Stefan wrote that):

"Instead of using this function, it is cleaner and more reliable to give your
function an extra optional argument whose ‘interactive’ spec specifies
non-nil unconditionally ("p" is a good way to do this), or via
(not (or executing-kbd-macro noninteractive))."