all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Eshel Yaron via "Bug reports for GNU Emacs, the Swiss army knife of text editors" <bug-gnu-emacs@gnu.org>
To: Eli Zaretskii <eliz@gnu.org>
Cc: basil@contovou.net, Stephen Berman <stephen.berman@gmx.net>,
	71927@debbugs.gnu.org, kickingvegas@gmail.com, juri@linkov.net
Subject: bug#71927: 29.4; ibuffer-do-isearch and ibuffer-do-isearch-regexp not prompting for input
Date: Sat, 06 Jul 2024 23:13:27 +0200	[thread overview]
Message-ID: <m1wmly2phk.fsf@dazzs-mbp.home> (raw)
In-Reply-To: <86y16h6llv.fsf@gnu.org> (Eli Zaretskii's message of "Thu, 04 Jul 2024 21:46:52 +0300")

Eli Zaretskii <eliz@gnu.org> writes:

>> From: Stephen Berman <stephen.berman@gmx.net>
>> 
>> On Thu, 04 Jul 2024 21:07:36 +0300 Eli Zaretskii <eliz@gnu.org> wrote:
>> 
>> >> From: Stephen Berman <stephen.berman@gmx.net>
>> >> Cc: Eli Zaretskii <eliz@gnu.org>,  Eshel Yaron <me@eshelyaron.com>,
>> >>   kickingvegas@gmail.com,  71927@debbugs.gnu.org,  basil@contovou.net,
>> >>   jpw@gnu.org
>> >> Date: Thu, 04 Jul 2024 19:36:34 +0200
>> >>
>> >> On Thu, 04 Jul 2024 19:04:42 +0300 Juri Linkov <juri@linkov.net> wrote:
>> >>
>> >> >>>> FWIW, AFAICT everything is working correctly, it's just that the
>> >> >>>> "Operation finished" message hides the prompt.  ibuffer-do-isearch
>> >> >>>> should tell define-ibuffer-op not to display that message, somehow.
>> >> >>>
>> >> >>> I don't see how this could be considered "correct": the "Operation
>> >> >>> finished" message is supposed to be shown only after the Isearch is
>> >> >>> finished in all the marked buffer, not before.  It looks like we need
>> >> >>> a function that will not return until all the buffers where searched,
>> >> >>> because that's what define-ibuffer-op expects.  Don't you agree?
>> >> >
>> >> > It intentionally uses 'no-recursive-edit' set to t, so ibuffer-do-isearch
>> >> > correctly exits immediately while leaving isearch-mode enabled.
>> >> >
>> >> >> The attached patch appears to DTRT, but I only tested it briefly.
>> >> >> ...
>> >> >>  (define-ibuffer-op ibuffer-do-isearch ()
>> >> >>    "Perform a `isearch-forward' in marked buffers."
>> >> >>    (:interactive ()
>> >> >> -   :opstring "searched in"
>> >> >> +   :no-opstring t
>> >> >
>> >> > Thanks for the patch.  I confirm this is the right thing to do.
>> >> > Maybe instead of :no-opstring would be better to use some special value
>> >> > like :opstring 'no?  But I'm not sure if this is better than :no-opstring.
>> >>
>> >> Suppressing the message when :opstring has the value 'no is fine with
>> >> me.  If Eli is willing to accept this approach, I can go ahead and
>> >> commit it (to master, presumably, since this is a longstanding issue).
>> >
>> > I already said this didn't sound the right solution here, and I
>> > explained why.  I'd be interested in hearing counter-arguments, if
>> > there are any.
>> 
>> 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:

diff --git a/lisp/ibuf-ext.el b/lisp/ibuf-ext.el
index 95ff014aa5b..33b68b96ff2 100644
--- a/lisp/ibuf-ext.el
+++ b/lisp/ibuf-ext.el
@@ -594,22 +594,16 @@ revert
    :modifier-p :maybe)
   (revert-buffer t t))
 
-;;;###autoload (autoload 'ibuffer-do-isearch "ibuf-ext")
-(define-ibuffer-op ibuffer-do-isearch ()
+;;;###autoload
+(defun ibuffer-do-isearch ()
   "Perform a `isearch-forward' in marked buffers."
-  (:interactive ()
-   :opstring "searched in"
-   :complex t
-   :modifier-p :maybe)
+  (interactive "" ibuffer-mode)
   (multi-isearch-buffers (ibuffer-get-marked-buffers)))
 
-;;;###autoload (autoload 'ibuffer-do-isearch-regexp "ibuf-ext")
-(define-ibuffer-op ibuffer-do-isearch-regexp ()
+;;;###autoload
+(defun ibuffer-do-isearch-regexp ()
   "Perform a `isearch-forward-regexp' in marked buffers."
-  (:interactive ()
-   :opstring "searched regexp in"
-   :complex t
-   :modifier-p :maybe)
+  (interactive "" ibuffer-mode)
   (multi-isearch-buffers-regexp (ibuffer-get-marked-buffers)))
 
 ;;;###autoload (autoload 'ibuffer-do-replace-regexp "ibuf-ext")






  reply	other threads:[~2024-07-06 21:13 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-07-03 21:25 bug#71927: 29.4; ibuffer-do-isearch and ibuffer-do-isearch-regexp not prompting for input Charles Choi
2024-07-04  6:58 ` Juri Linkov
2024-07-04  7:55   ` Eli Zaretskii
2024-07-04  7:12     ` Eshel Yaron via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-07-04  9:59       ` Eli Zaretskii
2024-07-04 10:06         ` Stephen Berman via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-07-04 12:50           ` Eli Zaretskii
2024-07-04 13:32             ` Stephen Berman via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-07-04 14:12               ` Eli Zaretskii
2024-07-04 15:09                 ` Stephen Berman via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-07-04 16:04           ` Juri Linkov
2024-07-04 17:36             ` Stephen Berman via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-07-04 18:07               ` Eli Zaretskii
2024-07-04 18:29                 ` Stephen Berman via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-07-04 18:46                   ` Eli Zaretskii
2024-07-06 21:13                     ` Eshel Yaron via Bug reports for GNU Emacs, the Swiss army knife of text editors [this message]
2024-07-07 16:59                       ` Juri Linkov
2024-07-12  7:03                       ` Eli Zaretskii
2024-07-12 10:20                         ` Eshel Yaron via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-07-12 17:05                           ` Charles Choi

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

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=m1wmly2phk.fsf@dazzs-mbp.home \
    --to=bug-gnu-emacs@gnu.org \
    --cc=71927@debbugs.gnu.org \
    --cc=basil@contovou.net \
    --cc=eliz@gnu.org \
    --cc=juri@linkov.net \
    --cc=kickingvegas@gmail.com \
    --cc=me@eshelyaron.com \
    --cc=stephen.berman@gmx.net \
    /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 external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.