* bug#40808: 27.0.91; inaccuracy in isearch-lazy-count
@ 2020-04-24 6:42 Abdullah Asad
2020-04-25 20:53 ` Juri Linkov
0 siblings, 1 reply; 13+ messages in thread
From: Abdullah Asad @ 2020-04-24 6:42 UTC (permalink / raw)
To: 40808
When using isearch with isearch-lazy-count in org mode with heading
collapsed isearch gives wrong number of matches (both total & current).
Reproducing it is simple just enable isearch-lazy-count and perform
isearch in org buffer with collapsed heading.
In GNU Emacs 27.0.91 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.24.17)
of 2020-04-23 built on notArch
Windowing system distributor 'The X.Org Foundation
^ permalink raw reply [flat|nested] 13+ messages in thread
* bug#40808: 27.0.91; inaccuracy in isearch-lazy-count
2020-04-24 6:42 bug#40808: 27.0.91; inaccuracy in isearch-lazy-count Abdullah Asad
@ 2020-04-25 20:53 ` Juri Linkov
2020-04-28 18:46 ` Abdullah Asad
0 siblings, 1 reply; 13+ messages in thread
From: Juri Linkov @ 2020-04-25 20:53 UTC (permalink / raw)
To: Abdullah Asad; +Cc: 40808
> When using isearch with isearch-lazy-count in org mode with heading
> collapsed isearch gives wrong number of matches (both total & current).
>
> Reproducing it is simple just enable isearch-lazy-count and perform
> isearch in org buffer with collapsed heading.
Thanks for bringing up this question, it will help to fix this feature
for the upcoming release. I tend to agree that isearch-lazy-count
should show the number of *all* matches in the buffer, even the matches that
are invisible, and that can be opened when visited by isearch navigation.
Eli, do you agree with this patch for emacs-27. It counts all matches, even
invisible. And also it fixes an old bug existed in previous Emacs versions
where lazy-highlight didn't update lazy-highlighting when a hidden outline
was automatically opened at the end of the file (I noticed this bug only now).
So the condition ‘(eq search-invisible 'open)’ fixes an old bug, and
the condition ‘isearch-lazy-count’ fixes the new feature added in emacs-27:
diff --git a/lisp/isearch.el b/lisp/isearch.el
index e13a4dda83..ed1097c5ea 100644
--- a/lisp/isearch.el
+++ b/lisp/isearch.el
@@ -319,7 +319,7 @@ isearch-lazy-count
"Show match numbers in the search prompt.
When both this option and `isearch-lazy-highlight' are non-nil,
show the current match number and the total number of matches
-in the buffer (or its restriction)."
+in the buffer (or its restriction), including all hidden matches."
:type 'boolean
:group 'lazy-count
:group 'isearch
@@ -3869,7 +3871,8 @@ isearch-lazy-highlight-search
(isearch-regexp-lax-whitespace
isearch-lazy-highlight-regexp-lax-whitespace)
(isearch-forward isearch-lazy-highlight-forward)
- (search-invisible nil) ; don't match invisible text
+ ;; don't match invisible text unless it can open or counting matches
+ (search-invisible (or (eq search-invisible 'open) isearch-lazy-count))
(retry t)
(success nil))
;; Use a loop like in `isearch-search'.
^ permalink raw reply related [flat|nested] 13+ messages in thread
* bug#40808: 27.0.91; inaccuracy in isearch-lazy-count
2020-04-25 20:53 ` Juri Linkov
@ 2020-04-28 18:46 ` Abdullah Asad
2020-04-28 19:19 ` Eli Zaretskii
0 siblings, 1 reply; 13+ messages in thread
From: Abdullah Asad @ 2020-04-28 18:46 UTC (permalink / raw)
To: Juri Linkov; +Cc: 40808
> Eli, do you agree with this patch for emacs-27.
So, what is decided. Is it getting patched for emacs-27?
^ permalink raw reply [flat|nested] 13+ messages in thread
* bug#40808: 27.0.91; inaccuracy in isearch-lazy-count
2020-04-28 18:46 ` Abdullah Asad
@ 2020-04-28 19:19 ` Eli Zaretskii
2020-04-28 23:54 ` Juri Linkov
0 siblings, 1 reply; 13+ messages in thread
From: Eli Zaretskii @ 2020-04-28 19:19 UTC (permalink / raw)
To: Abdullah Asad; +Cc: 40808, juri
> From: Abdullah Asad <abdullah@net-c.com>
> Date: Wed, 29 Apr 2020 00:16:39 +0530
> Cc: 40808@debbugs.gnu.org
>
> > Eli, do you agree with this patch for emacs-27.
> So, what is decided. Is it getting patched for emacs-27?
Yes, it's fine with me. Thanks.
^ permalink raw reply [flat|nested] 13+ messages in thread
* bug#40808: 27.0.91; inaccuracy in isearch-lazy-count
2020-04-28 19:19 ` Eli Zaretskii
@ 2020-04-28 23:54 ` Juri Linkov
2020-04-29 7:11 ` Eli Zaretskii
0 siblings, 1 reply; 13+ messages in thread
From: Juri Linkov @ 2020-04-28 23:54 UTC (permalink / raw)
To: Eli Zaretskii; +Cc: 40808, Abdullah Asad
[-- Attachment #1: Type: text/plain, Size: 761 bytes --]
>> So, what is decided. Is it getting patched for emacs-27?
>
> Yes, it's fine with me. Thanks.
Now pushed to emacs-27.
But there is still one corner case I'm worried about:
isearch-lazy-count still counts matches that can't be opened
and can't be visited, such as hidden links in org-mode.
To not count them we need to bind 'search-invisible' to 'open'
in isearch-lazy-highlight-search, but the problem is that
isearch-filter-predicate and isearch-range-invisible will
temporarily open them, whereas we need just to check
whether they can be opened.
So in the following patch I added a new variable isearch-check-overlays
that could instruct isearch-range-invisible to not open overlays
when it's non-nil that means we need only to check them, not open:
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: isearch-check-overlays.patch --]
[-- Type: text/x-diff, Size: 1952 bytes --]
diff --git a/lisp/isearch.el b/lisp/isearch.el
index e13a4dda83..0ad97a092f 100644
--- a/lisp/isearch.el
+++ b/lisp/isearch.el
@@ -3535,6 +3535,7 @@ isearch-close-unnecessary-overlays
(overlay-put ov 'invisible (overlay-get ov 'isearch-invisible))
(overlay-put ov 'isearch-invisible nil)))))))
+(defvar isearch-check-overlays nil)
(defun isearch-range-invisible (beg end)
"Return t if all the text from BEG to END is invisible."
@@ -3546,7 +3547,7 @@ isearch-range-invisible
(can-be-opened (eq search-invisible 'open))
;; the list of overlays that could be opened
(crt-overlays nil))
- (when (and can-be-opened isearch-hide-immediately)
+ (when (and can-be-opened isearch-hide-immediately (not isearch-check-overlays))
(isearch-close-unnecessary-overlays beg end))
;; If the following character is currently invisible,
;; skip all characters with that same `invisible' property value.
@@ -3585,9 +3586,10 @@ isearch-range-invisible
(if (>= (point) end)
(if (and can-be-opened (consp crt-overlays))
(progn
- (setq isearch-opened-overlays
- (append isearch-opened-overlays crt-overlays))
- (mapc 'isearch-open-overlay-temporary crt-overlays)
+ (unless isearch-check-overlays
+ (setq isearch-opened-overlays
+ (append isearch-opened-overlays crt-overlays))
+ (mapc 'isearch-open-overlay-temporary crt-overlays))
nil)
(setq isearch-hidden t)))))))
@@ -3880,8 +3885,10 @@ isearch-lazy-highlight-search
(if (or (not success)
(= (point) bound) ; like (bobp) (eobp) in `isearch-search'.
(= (match-beginning 0) (match-end 0))
- (funcall isearch-filter-predicate
- (match-beginning 0) (match-end 0)))
+ (let ((search-invisible (and search-invisible 'open))
+ (isearch-check-overlays t))
+ (funcall isearch-filter-predicate
+ (match-beginning 0) (match-end 0))))
(setq retry nil)))
success)
(error nil)))
^ permalink raw reply related [flat|nested] 13+ messages in thread
* bug#40808: 27.0.91; inaccuracy in isearch-lazy-count
2020-04-28 23:54 ` Juri Linkov
@ 2020-04-29 7:11 ` Eli Zaretskii
2020-04-29 20:56 ` Juri Linkov
0 siblings, 1 reply; 13+ messages in thread
From: Eli Zaretskii @ 2020-04-29 7:11 UTC (permalink / raw)
To: Juri Linkov; +Cc: 40808, abdullah
> From: Juri Linkov <juri@linkov.net>
> Cc: Abdullah Asad <abdullah@net-c.com>, 40808@debbugs.gnu.org
> Date: Wed, 29 Apr 2020 02:54:06 +0300
>
> But there is still one corner case I'm worried about:
> isearch-lazy-count still counts matches that can't be opened
> and can't be visited, such as hidden links in org-mode.
>
> To not count them we need to bind 'search-invisible' to 'open'
> in isearch-lazy-highlight-search, but the problem is that
> isearch-filter-predicate and isearch-range-invisible will
> temporarily open them, whereas we need just to check
> whether they can be opened.
>
> So in the following patch I added a new variable isearch-check-overlays
> that could instruct isearch-range-invisible to not open overlays
> when it's non-nil that means we need only to check them, not open:
Fine with me, but please make this change on master, not on emacs-27.
^ permalink raw reply [flat|nested] 13+ messages in thread
* bug#40808: 27.0.91; inaccuracy in isearch-lazy-count
2020-04-29 7:11 ` Eli Zaretskii
@ 2020-04-29 20:56 ` Juri Linkov
2020-04-30 20:18 ` Juri Linkov
0 siblings, 1 reply; 13+ messages in thread
From: Juri Linkov @ 2020-04-29 20:56 UTC (permalink / raw)
To: Eli Zaretskii; +Cc: 40808, abdullah
>> But there is still one corner case I'm worried about:
>> isearch-lazy-count still counts matches that can't be opened
>> and can't be visited, such as hidden links in org-mode.
>>
>> To not count them we need to bind 'search-invisible' to 'open'
>> in isearch-lazy-highlight-search, but the problem is that
>> isearch-filter-predicate and isearch-range-invisible will
>> temporarily open them, whereas we need just to check
>> whether they can be opened.
>>
>> So in the following patch I added a new variable isearch-check-overlays
>> that could instruct isearch-range-invisible to not open overlays
>> when it's non-nil that means we need only to check them, not open:
>
> Fine with me, but please make this change on master, not on emacs-27.
Right decision, because org-mode is broken anyway, and this fix won't make
it better. A test case that demonstrates the problem in org-mode:
0. emacs -Q
1. visit emacs/etc/ORG-NEWS
2. isearch for "http": C-s http C-s C-s C-s ...
it eventually stops at org links where "http" is invisible, such as
[[https://orgmode.org/worg/library-of-babel.html][here]]
The problem is that org-mode puts the text property 'invisible'
only when the link is scrolled into view, I guess it puts the property
using font-lock.
So at least in emacs-27 now it consistently counts all matches
ignoring their visibility.
^ permalink raw reply [flat|nested] 13+ messages in thread
* bug#40808: 27.0.91; inaccuracy in isearch-lazy-count
2020-04-29 20:56 ` Juri Linkov
@ 2020-04-30 20:18 ` Juri Linkov
2020-05-01 5:58 ` Eli Zaretskii
0 siblings, 1 reply; 13+ messages in thread
From: Juri Linkov @ 2020-04-30 20:18 UTC (permalink / raw)
To: Eli Zaretskii; +Cc: 40808, abdullah
>> Fine with me, but please make this change on master, not on emacs-27.
>
> Right decision, because org-mode is broken anyway, and this fix won't make
> it better. A test case that demonstrates the problem in org-mode:
>
> 0. emacs -Q
> 1. visit emacs/etc/ORG-NEWS
> 2. isearch for "http": C-s http C-s C-s C-s ...
>
> it eventually stops at org links where "http" is invisible, such as
>
> [[https://orgmode.org/worg/library-of-babel.html][here]]
>
> The problem is that org-mode puts the text property 'invisible'
> only when the link is scrolled into view, I guess it puts the property
> using font-lock.
>
> So at least in emacs-27 now it consistently counts all matches
> ignoring their visibility.
I'm still unsure about pushing this change. The current state of things:
- in emacs-27 and master now it counts all matches, including invisible,
regardless of the value of search-invisible;
- the proposed change for master doesn't include in the count these
invisible matches that can't be visited by opening overlays;
- but this fix is pointless for org-mode where visiting invisible
matches is broken, and where its count varies after visiting
and opening hidden overlays.
^ permalink raw reply [flat|nested] 13+ messages in thread
* bug#40808: 27.0.91; inaccuracy in isearch-lazy-count
2020-04-30 20:18 ` Juri Linkov
@ 2020-05-01 5:58 ` Eli Zaretskii
2020-05-03 22:33 ` Juri Linkov
0 siblings, 1 reply; 13+ messages in thread
From: Eli Zaretskii @ 2020-05-01 5:58 UTC (permalink / raw)
To: Juri Linkov; +Cc: 40808, abdullah
> From: Juri Linkov <juri@linkov.net>
> Cc: 40808@debbugs.gnu.org, abdullah@net-c.com
> Date: Thu, 30 Apr 2020 23:18:08 +0300
>
> I'm still unsure about pushing this change. The current state of things:
>
> - in emacs-27 and master now it counts all matches, including invisible,
> regardless of the value of search-invisible;
>
> - the proposed change for master doesn't include in the count these
> invisible matches that can't be visited by opening overlays;
>
> - but this fix is pointless for org-mode where visiting invisible
> matches is broken, and where its count varies after visiting
> and opening hidden overlays.
Would it be possible to fix the breakage in Org on master?
^ permalink raw reply [flat|nested] 13+ messages in thread
* bug#40808: 27.0.91; inaccuracy in isearch-lazy-count
2020-05-01 5:58 ` Eli Zaretskii
@ 2020-05-03 22:33 ` Juri Linkov
2020-05-24 21:45 ` bug#40808: Org-mode " Juri Linkov
0 siblings, 1 reply; 13+ messages in thread
From: Juri Linkov @ 2020-05-03 22:33 UTC (permalink / raw)
To: Eli Zaretskii; +Cc: 40808, abdullah
>> I'm still unsure about pushing this change. The current state of things:
>>
>> - in emacs-27 and master now it counts all matches, including invisible,
>> regardless of the value of search-invisible;
>>
>> - the proposed change for master doesn't include in the count these
>> invisible matches that can't be visited by opening overlays;
>>
>> - but this fix is pointless for org-mode where visiting invisible
>> matches is broken, and where its count varies after visiting
>> and opening hidden overlays.
>
> Would it be possible to fix the breakage in Org on master?
We need help from Org developers to fix the breakage in Org.
Meanwhile, I reverted a part of the recent fix on emacs-27
that tried to fix a long-standing corner case of lazy-highlighting
in outlines, but whose side-effect might slow down lazy-highlighting
in collapsed outlines. This needs more testing on master.
Whereas the fix for isearch-lazy-count still remains in the release branch.
^ permalink raw reply [flat|nested] 13+ messages in thread
* bug#40808: Org-mode inaccuracy in isearch-lazy-count
2020-05-03 22:33 ` Juri Linkov
@ 2020-05-24 21:45 ` Juri Linkov
2020-05-25 8:49 ` Bastien
0 siblings, 1 reply; 13+ messages in thread
From: Juri Linkov @ 2020-05-24 21:45 UTC (permalink / raw)
To: Bastien; +Cc: 40808
Hi Bastien,
Could you please look at this problem as well:
>>> - but this fix is pointless for org-mode where visiting invisible
>>> matches is broken, and where its count varies after visiting
>>> and opening hidden overlays.
>>
>> Would it be possible to fix the breakage in Org on master?
>
> We need help from Org developers to fix the breakage in Org.
^ permalink raw reply [flat|nested] 13+ messages in thread
* bug#40808: Org-mode inaccuracy in isearch-lazy-count
2020-05-24 21:45 ` bug#40808: Org-mode " Juri Linkov
@ 2020-05-25 8:49 ` Bastien
2020-08-26 12:40 ` Stefan Kangas
0 siblings, 1 reply; 13+ messages in thread
From: Bastien @ 2020-05-25 8:49 UTC (permalink / raw)
To: Juri Linkov; +Cc: 40808
Hi Juri,
Juri Linkov <juri@linkov.net> writes:
> Could you please look at this problem as well:
thanks for the heads up -- I will have a look at it this week.
--
Bastien
^ permalink raw reply [flat|nested] 13+ messages in thread
* bug#40808: Org-mode inaccuracy in isearch-lazy-count
2020-05-25 8:49 ` Bastien
@ 2020-08-26 12:40 ` Stefan Kangas
0 siblings, 0 replies; 13+ messages in thread
From: Stefan Kangas @ 2020-08-26 12:40 UTC (permalink / raw)
To: Bastien; +Cc: 40808, Juri Linkov
Hi Bastien,
Bastien <bzg@gnu.org> writes:
> Juri Linkov <juri@linkov.net> writes:
>
>> Could you please look at this problem as well:
>
> thanks for the heads up -- I will have a look at it this week.
Did you have any chance to look into this? Thanks.
^ permalink raw reply [flat|nested] 13+ messages in thread
end of thread, other threads:[~2020-08-26 12:40 UTC | newest]
Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-04-24 6:42 bug#40808: 27.0.91; inaccuracy in isearch-lazy-count Abdullah Asad
2020-04-25 20:53 ` Juri Linkov
2020-04-28 18:46 ` Abdullah Asad
2020-04-28 19:19 ` Eli Zaretskii
2020-04-28 23:54 ` Juri Linkov
2020-04-29 7:11 ` Eli Zaretskii
2020-04-29 20:56 ` Juri Linkov
2020-04-30 20:18 ` Juri Linkov
2020-05-01 5:58 ` Eli Zaretskii
2020-05-03 22:33 ` Juri Linkov
2020-05-24 21:45 ` bug#40808: Org-mode " Juri Linkov
2020-05-25 8:49 ` Bastien
2020-08-26 12:40 ` Stefan Kangas
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).