Subject: Re: bug#75626: 31.0.50; Dired misses or double-processes files when auto-revert-mode is enabled

From: Eli Zaretskii <[email-masked]>
Date: Mon, 20 Jan 2025 14:50:35 +0200

> From: Michael Heerdegen <[email-masked]>
> Cc: Eli Zaretskii <[email-masked]>,  [email-masked]
> Date: Mon, 20 Jan 2025 02:51:17 +0100
> 
> Tassilo Horn <[email-masked]> writes:
> 
> > Good idea.  I've tried this simple patch and it fixes the issue for me.
> >
> > diff --git a/lisp/dired.el b/lisp/dired.el
> > index bab5e833a76..1152d85f149 100644
> > --- a/lisp/dired.el
> > +++ b/lisp/dired.el
> > @@ -1289,6 +1289,10 @@ dired-buffer-stale-p
> >          ;; Do not auto-revert when the dired buffer can be currently
> >          ;; written by the user as in `wdired-mode'.
> >          buffer-read-only
> > +         ;; When a dired operation using dired-map-over-marks is in
> > +         ;; progress, inhibit-read-only is set and we must not
> 
> Better say "bound" please.
> 
> > +         ;; auto-revert.
> > +         (null inhibit-read-only)
> 
> And use `not' here, since we are testing a boolean valued flag.
> 
> >          (dired-directory-changed-p dirname))))
> >
> >  (defcustom dired-auto-revert-buffer nil
> >
> > Probably testing inhibit-read-only is not TRT but the expansion of
> > dired-map-over-marks should explicitly let-bind some new
> > dired--map-over-marks-in-progress variable to make it more explicit...
> 
> Yes.  OTOH it's not bad either.  `inhibit-read-only' bound (together
> with buffer-read-only which we already have) is a good indicator for
> that some operation is running and we should not auto revert.
> 
> Unless I'm missing something I would prefer this solution.

But inhibit-read-only is also nil in WDired.  Do we want to disable
auto-revert in that case?

Why don't you prefer the new dired--map-over-marks-in-progress
variable idea?  Or Drew's suggestion to bind revert-buffer-function to
'ignore while dired-map-over-marks runs?  Both sound cleaner to me
than relying on inhibit-read-only, which is used in gazillion places.