Subject: bug#71927: 29.4; ibuffer-do-isearch and ibuffer-do-isearch-regexp not prompting for input

From: Eli Zaretskii <[email-masked]>
Date: Fri, 12 Jul 2024 10:03:19 +0300

> From: Eshel Yaron <[email-masked]>
> Cc: Stephen Berman <[email-masked]>,  [email-masked],
>   [email-masked],  [email-masked],  [email-masked]
> Date: Sat, 06 Jul 2024 23:13:27 +0200
> 
> Eli Zaretskii <[email-masked]> writes:
> 
> >> I gave a mild counterargument upthread, that making
> >> ibuffer-do-isearch{-regexp} defuns independent of define-ibuffer-op
> >> seems like accepting the inadequacy of the latter instead of trying to
> >> improve it.
> >
> > It is indeed inadequate for commands that just put Emacs in a special
> > state and return, as opposed to commands that don't return before they
> > did the complete job of operating on the marked buffers.
> 
> Actually, there's another problem with the way ibuffer-do-isearch is
> currently defined via define-ibuffer-op: the BODY of the definition is a
> call to multi-isearch-buffers, but the BODY is called for each marked
> buffer, not once for all of them, so this command currently calls
> multi-isearch-buffers repeatedly when there are multiple marked buffers.
> This causes multi-isearch-setup to be called while multi-buffer Isearch
> is already in progress, which unfortunately breaks regular Isearch for
> the rest of the session.
> 
> To see this effect, invoke ibuffer-do-isearch with two or more marked
> buffers, quit or finish the search (e.g. type C-g), and then try regular
> Isearch with C-s and repeat C-s until wrapping around.  But instead of
> wrapping around as expected, Emacs displays an error:
> 
>   Symbol’s function definition is void: nil
> 
> A simple solution is to use plain defun for these commands, as follows:

Thanks.  Since there were no objections in a week, and Juri also
agreed with this solution, please install this on the emacs-30 branch.