all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Augusto Stoffel <arstoffel@gmail.com>
To: Juri Linkov <juri@linkov.net>
Cc: 55110@debbugs.gnu.org
Subject: bug#55110: 29.0.50; Regression in query-replace prompt
Date: Sat, 14 May 2022 18:02:09 +0200	[thread overview]
Message-ID: <87fslcumpq.fsf@gmail.com> (raw)
In-Reply-To: <86tuaft1fr.fsf@mail.linkov.net> (Juri Linkov's message of "Wed,  27 Apr 2022 10:44:56 +0300")

[-- Attachment #1: Type: text/plain, Size: 1944 bytes --]

On Wed, 27 Apr 2022 at 10:44, Juri Linkov <juri@linkov.net> wrote:

>>> Maybe this is caused by minibuffer-lazy-highlight-setup
>>> that sets filter to replace--region-filter in the minibuffer
>>> instead of the original buffer?
>>
>> Most likely, yes.  `replace--region-filter' is modified globally, so a
>> similar problem should happen if you temporarily leave the minibuffer
>> and do Isearch in any other buffer.
>>
>> If that's the case, I think we would have two options:
>>
>> 1) Add a quick fix for the minibuffer Isearch only.
>>
>> 2) A more complicated change that solves the issue generally by saving
>> the region filter in the fashion of isearch-lazy-highlight-regexp et
>> alii.
>>
>> WDYT?
>
> Recently we fixed a similar problem in `perform-replace'
> by creating a dynamically bound value in `let':
>
>   (let ((opos (point-marker))
>         ;; Restore original isearch filter to allow
>         ;; using isearch in a recursive edit even
>         ;; when perform-replace was started from
>         ;; `xref--query-replace-1' that let-binds
>         ;; `isearch-filter-predicate' (bug#53758).
>         (isearch-filter-predicate #'isearch-filter-visible))
>
> So maybe a buffer-local value of `isearch-filter-predicate'
> in the minibuffer would help.

Yes, that indeed solves the problem.  See attached patch.

> Also I recommend to make all hooks in `minibuffer-lazy-highlight-setup'
> local by adding the argument LOCAL to add-hook/remove-hook.

Indeed, the minibuffer lazy highlight feature is currently incompatible
with recursive minibuffers.  The patch fixes that as well.

There's a caveat, though: isearch in a recursive minibuffer is again
affected by the presence of an inappropriate filter function.  Fixing
that in a robust way might require a bigger refactoring of the lazy
highlight feature, I think.  Another option might be to make
`replace--region-filter' also check for the value of `(current-buffer)'.


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-Make-minibuffer-lazy-highlight-setup-buffer-local-wh.patch --]
[-- Type: text/x-patch, Size: 1599 bytes --]

From 37de4e53fce6adbf5e52f3184c163574e3129def Mon Sep 17 00:00:00 2001
From: Augusto Stoffel <arstoffel@gmail.com>
Date: Sat, 14 May 2022 17:21:27 +0200
Subject: [PATCH] Make minibuffer lazy highlight setup buffer-local where
 appropriate

* lisp/isearch.el (minibuffer-lazy-highlight-setup): Modify hooks
buffer-locally, so that recursive minibuffers are not affected by the
special behavior of lazy-highlight.  Also make
'isearch-filter-predicate' buffer-local, so that isearch in the
minibuffer is not affected by the region filter (bug#55110).
---
 lisp/isearch.el | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/lisp/isearch.el b/lisp/isearch.el
index 96168f94bd..3e1dab4d15 100644
--- a/lisp/isearch.el
+++ b/lisp/isearch.el
@@ -4441,12 +4441,13 @@ minibuffer-lazy-highlight-setup
                                 (format minibuffer-lazy-count-format
                                         isearch-lazy-count-total)))))
       (lambda ()
-        (add-hook 'minibuffer-exit-hook unwind)
-        (add-hook 'after-change-functions after-change)
+        (add-hook 'minibuffer-exit-hook unwind nil t)
+        (add-hook 'after-change-functions after-change nil t)
         (when minibuffer-lazy-count-format
           (setq overlay (make-overlay (point-min) (point-min) (current-buffer) t))
           (add-hook 'lazy-count-update-hook display-count))
         (when filter
+          (make-local-variable 'isearch-filter-predicate)
           (add-function :after-while isearch-filter-predicate filter))
         (funcall after-change nil nil nil)))))
 
-- 
2.36.1


  reply	other threads:[~2022-05-14 16:02 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-04-25 15:37 bug#55110: 29.0.50; Regression in query-replace prompt Juri Linkov
2022-04-26 19:42 ` Augusto Stoffel
2022-04-27  7:44   ` Juri Linkov
2022-05-14 16:02     ` Augusto Stoffel [this message]
2022-05-15 18:45       ` Juri Linkov

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=87fslcumpq.fsf@gmail.com \
    --to=arstoffel@gmail.com \
    --cc=55110@debbugs.gnu.org \
    --cc=juri@linkov.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.