From: Juri Linkov <juri@linkov.net>
To: Augusto Stoffel <arstoffel@gmail.com>
Cc: 53126@debbugs.gnu.org
Subject: bug#53126: 29.0.50; [PATCH] Lazy highlight/count when reading query-replace string, etc.
Date: Tue, 15 Mar 2022 19:24:01 +0200 [thread overview]
Message-ID: <86sfrjia5u.fsf@mail.linkov.net> (raw)
In-Reply-To: <87mtidip1w.fsf@gmail.com> (Augusto Stoffel's message of "Sat, 26 Feb 2022 17:13:31 +0100")
> Sorry for getting back to this after such a long time. I've attached a
> new patch that hopefully is good to merge, except for adding some NEWS
> entry. Let me know what you think.
Please see comments for your latest patch below:
> @@ -1812,6 +1812,8 @@ isearch-edit-string
> (minibuffer-history-symbol)
> ;; Search string might have meta information on text properties.
> (minibuffer-allow-text-properties t))
> + (when isearch-lazy-highlight
> + (add-hook 'minibuffer-setup-hook #'minibuffer-lazy-highlight-setup))
Since this does both highlighting and counting, shouldn't the condition be
(when (and isearch-lazy-highlight isearch-lazy-count))
Or maybe new separate customizable options are needed, e.g.
'minibuffer-lazy-highlight' and 'minibuffer-lazy-count'?
> @@ -2350,7 +2352,9 @@ isearch-query-replace
> (isearch-recursive-edit nil)
> (isearch-string-propertized
> (isearch-string-propertize isearch-string)))
> - (isearch-done nil t)
> + (let ((lazy-highlight-cleanup (and lazy-highlight-cleanup
> + (not query-replace-lazy-highlight))))
> + (isearch-done nil t))
Is this some optimization? It seems it's intended to leave
some existing highlighting? Is this to avoid double highlighting?
Also maybe this condition could use a new variable as well.
> @@ -4048,7 +4056,7 @@ isearch-lazy-highlight-new-loop
> isearch-lazy-highlight-window-end))))))
> ;; something important did indeed change
> (lazy-highlight-cleanup t (not (equal isearch-string ""))) ;stop old timer
> - (when (and isearch-lazy-count isearch-mode (null isearch-message-function))
> + (when isearch-lazy-count
> ...
> @@ -4067,7 +4075,10 @@ isearch-lazy-highlight-new-loop
> (setq isearch-lazy-count-current nil
> isearch-lazy-count-total nil)
> ;; Delay updating the message if possible, to avoid flicker
> - (when (string-equal isearch-string "") (isearch-message))))
> + (when (string-equal isearch-string "")
> + (when (and isearch-mode (null isearch-message-function))
> + (isearch-message))
> ...
> @@ -4120,13 +4131,15 @@ isearch-lazy-highlight-new-loop
> 'isearch-lazy-highlight-start))))
> ;; Update the current match number only in isearch-mode and
> ;; unless isearch-mode is used specially with isearch-message-function
> - (when (and isearch-lazy-count isearch-mode (null isearch-message-function))
> + (when isearch-lazy-count
The problem is that when these conditions 'isearch-mode (null isearch-message-function)'
are removed, now this shows wrong counts in the minibuffer history search
(e.g. 'M-! C-r s C-r C-r ...') and the shell history search
(e.g. 'M-x shell RET M-r s C-r C-r ...'). Before this change
counting was disabled in the history search because it shows wrong numbers.
> +(defun minibuffer-lazy-highlight--count ()
> + "Display total match count in the minibuffer prompt."
> + (when minibuffer-lazy-highlight--overlay
> + (overlay-put minibuffer-lazy-highlight--overlay
> + 'after-string
> + (and isearch-lazy-count-total
> + (not isearch-error)
> + (format minibuffer-lazy-count-format
> + isearch-lazy-count-total)))))
> ...
> + (setq minibuffer-lazy-highlight--overlay
> + (and minibuffer-lazy-count-format
> + (make-overlay (point-min) (point-min) (current-buffer) t)))
For some reasons the package lisp/mb-depth.el uses 'after-string'
instead of 'before-string', and (make-overlay (point-min) (1+ (point-min)))
instead of (make-overlay (point-min) (point-min)),
so maybe better to do the same?
> @@ -365,14 +372,44 @@ query-replace-read-args
> + (condition-case error
> + (let (;; Variables controlling lazy highlighting while reading
> + ;; FROM and TO.
> + (lazy-highlight-cleanup nil)
> + (isearch-lazy-highlight query-replace-lazy-highlight)
> + (isearch-regexp regexp-flag)
> + (isearch-regexp-function nil)
Highlighting is still incorrect for word replacement ('C-u M-%')
and for non-nil 'replace-char-fold'. To handle these cases correctly,
'replace-highlight' uses:
(isearch-regexp-function (or replace-regexp-function
delimited-flag
(and replace-char-fold
(not regexp-flag)
#'char-fold-to-regexp)))
> @@ -2857,22 +2914,8 @@ perform-replace
> (when region-noncontiguous-p
> - (let ((region-bounds
> - (mapcar (lambda (position)
> - (cons (copy-marker (car position))
> - (copy-marker (cdr position))))
> - (funcall region-extract-function 'bounds))))
> - (setq region-filter
> - (lambda (start end)
> - (delq nil (mapcar
> - (lambda (bounds)
> - (and
> - (>= start (car bounds))
> - (<= start (cdr bounds))
> - (>= end (car bounds))
> - (<= end (cdr bounds))))
> - region-bounds))))
> - (add-function :after-while isearch-filter-predicate region-filter)))
> + (setq region-filter (replace--region-filter
> + (funcall region-extract-function 'bounds))))
I wonder why (add-function :after-while isearch-filter-predicate region-filter)
is removed?
next prev parent reply other threads:[~2022-03-15 17:24 UTC|newest]
Thread overview: 57+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-01-08 13:24 bug#53126: 29.0.50; [PATCH] Lazy highlight/count when reading query-replace string, etc Augusto Stoffel
2022-01-08 18:59 ` Juri Linkov
2022-01-08 19:35 ` Augusto Stoffel
2022-01-09 9:10 ` Juri Linkov
2022-01-09 10:02 ` Augusto Stoffel
2022-01-09 10:30 ` Augusto Stoffel
2022-01-09 18:58 ` Juri Linkov
2022-01-10 17:34 ` Augusto Stoffel
2022-01-10 19:09 ` Juri Linkov
2022-02-26 16:13 ` Augusto Stoffel
2022-03-15 17:09 ` Juri Linkov
2022-03-15 21:33 ` Augusto Stoffel
2022-03-16 18:56 ` Juri Linkov
2022-03-16 20:09 ` Augusto Stoffel
2022-03-17 17:09 ` Juri Linkov
2022-03-17 19:10 ` Augusto Stoffel
2022-03-17 20:40 ` Juri Linkov
2022-03-17 21:42 ` Augusto Stoffel
2022-03-20 9:38 ` Augusto Stoffel
2022-03-20 18:51 ` Juri Linkov
2022-03-24 19:03 ` Augusto Stoffel
2022-03-25 8:39 ` Juri Linkov
2022-03-25 9:43 ` Augusto Stoffel
2022-03-27 7:46 ` Juri Linkov
2022-04-01 9:06 ` Augusto Stoffel
2022-04-01 16:35 ` Juri Linkov
2022-04-01 18:12 ` Augusto Stoffel
2022-04-02 18:23 ` Juri Linkov
2022-04-03 8:32 ` Augusto Stoffel
2022-04-03 17:06 ` Juri Linkov
2022-04-04 16:37 ` Juri Linkov
2022-04-05 16:38 ` Augusto Stoffel
2022-04-05 17:12 ` Juri Linkov
2022-04-07 19:32 ` Augusto Stoffel
2022-04-08 7:32 ` Juri Linkov
2022-04-08 7:53 ` Augusto Stoffel
2022-04-09 11:06 ` Augusto Stoffel
2022-04-10 19:38 ` Juri Linkov
2022-03-15 17:24 ` Juri Linkov [this message]
2022-03-15 21:21 ` Augusto Stoffel
2022-03-16 19:02 ` Juri Linkov
2022-03-16 20:25 ` Augusto Stoffel
2022-03-17 17:05 ` Juri Linkov
2022-03-17 19:06 ` Augusto Stoffel
2022-03-20 19:24 ` Juri Linkov
2022-03-20 19:59 ` Augusto Stoffel
2022-03-20 20:29 ` Juri Linkov
2022-03-20 20:56 ` Augusto Stoffel
2022-03-23 18:20 ` Juri Linkov
2022-03-23 18:54 ` Augusto Stoffel
2022-03-23 19:17 ` Eli Zaretskii
2022-03-23 19:53 ` Juri Linkov
2022-03-23 20:06 ` Juri Linkov
2022-03-23 20:30 ` Augusto Stoffel
2022-03-23 20:43 ` Juri Linkov
2022-03-17 19:45 ` Augusto Stoffel
2022-03-17 20:43 ` 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
List information: https://www.gnu.org/software/emacs/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=86sfrjia5u.fsf@mail.linkov.net \
--to=juri@linkov.net \
--cc=53126@debbugs.gnu.org \
--cc=arstoffel@gmail.com \
/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 public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).