GNU bug report logs - #78520
31.0.50; Performance issue in dired+isearch with dired-isearch-filenames

Previous Next

Package: emacs;

Reported by: Ergus <spacibba <at> aol.com>

Date: Tue, 20 May 2025 23:34:02 UTC

Severity: normal

Tags: fixed

Found in version 31.0.50

Done: Eli Zaretskii <eliz <at> gnu.org>

Bug is archived. No further changes may be made.

Full log


View this message in rfc822 format

From: Michael Heerdegen <michael_heerdegen <at> web.de>
To: Juri Linkov <juri <at> linkov.net>
Cc: Eli Zaretskii <eliz <at> gnu.org>, 78520 <at> debbugs.gnu.org, spacibba <at> aol.com
Subject: bug#78520: 31.0.50; Performance issue in dired+isearch with dired-isearch-filenames
Date: Thu, 05 Jun 2025 01:41:26 +0200
Juri Linkov <juri <at> linkov.net> writes:

> > I had a pending fix for Bug#73018 that caused the bad performance.
> > Without it I see a very good performance.
>
> Does the problem reported in bug#73018 still exist?

No, the problem discussed there seems to be fixed.  Good :-)


> > One small thing I noticed (but that does not have a large impact) was
> > that `search-within-boundaries' is called repeatedly, and the binding
> > #+begin_src emacs-lisp
> > (subregexp
> >   (and isearch-regexp
> >        (save-match-data
> >          (catch 'subregexp
> >            (while (string-match "\\^\\|\\$" string i)
> >              (setq i (match-end 0))
> >              (when (subregexp-context-p string (match-beginning 0))
> >                ;; The ^/$ is not inside a char-range or escaped.
> >                (throw 'subregexp t)))))))
> > #+end_src
> > is computed every time with the same bindings in effect.  This could
> > maybe be factored out (i.e., the computation could maybe be moved
> > upwards in the call tree).
>
> This would require adding a new buffer-local variable
> with an ad-hoc name.

Or some kind of reorganisation of the whole logic of the involved
functions, but that's just not worth the trouble.  (buffer-local
variable... would we not want to support multi isearch?)


But let me please come back to wdired, I have some questions about that
before I continue to experiment:

1.  In `wdired-change-to-wdired-mode', we do this:

| (when wdired-search-replace-filenames
|   (add-function :around (local 'isearch-search-fun-function)
|                 #'dired-isearch-search-filenames
|                 '((isearch-message-prefix . "filename ")))
|   (setq-local replace-search-function
|               (setq-local replace-re-search-function
|                           (funcall isearch-search-fun-function)))
|   ;; Original dired hook removes dired-isearch-search-filenames that
|   ;; is needed outside isearch for lazy-highlighting in query-replace.
|   (remove-hook 'isearch-mode-hook #'dired-isearch-filenames-setup t))

Does that mean that after switching to wdired there is no way to switch
between filename-only and normal search and replace?  Is the behavior
determined when switching to wdired, or can it still be change while in
wdired-mode?

2.  How was that - was it possible to control whether to search and
replace in the symlink targets?


TIA,

Michael.




This bug report was last modified 21 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.