[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: master e8488bcc9c: Avoid having font locking triggering unnecessary
From: |
Lars Ingebrigtsen |
Subject: |
Re: master e8488bcc9c: Avoid having font locking triggering unnecessary auto-saving |
Date: |
Mon, 09 May 2022 19:40:00 +0200 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/29.0.50 (gnu/linux) |
The following builds (from bootstrap), all the tests pass, and it seems
to work. But I'd like some more eyeballs on it anyway. 😓
diff --git a/doc/lispref/buffers.texi b/doc/lispref/buffers.texi
index d8cf3d7919..3e3b0bd9f0 100644
--- a/doc/lispref/buffers.texi
+++ b/doc/lispref/buffers.texi
@@ -541,10 +541,12 @@ Buffer Modification
@ref{Text}.
@defun buffer-modified-p &optional buffer
-This function returns @code{t} if the buffer @var{buffer} has been modified
-since it was last read in from a file or saved, or @code{nil}
-otherwise. If @var{buffer} is not supplied, the current buffer
-is tested.
+This function returns non-@code{nil} if the buffer @var{buffer} has
+been modified since it was last read in from a file or saved, or
+@code{nil} otherwise. If @var{buffer} has been autosaved after
+@var{buffer} was last modified, the symbol @code{autosaved} is
+returned. If @var{buffer} is not supplied, the current buffer is
+tested.
@end defun
@defun set-buffer-modified-p flag
diff --git a/lisp/subr.el b/lisp/subr.el
index 01549cc6f7..54c9f35264 100644
--- a/lisp/subr.el
+++ b/lisp/subr.el
@@ -4594,21 +4594,17 @@ with-silent-modifications
someone else, running buffer modification hooks, and other things
of that nature."
(declare (debug t) (indent 0))
- (let ((modified (make-symbol "modified"))
- (tick (make-symbol "tick")))
+ (let ((modified (make-symbol "modified")))
`(let* ((,modified (buffer-modified-p))
- (,tick (buffer-modified-tick))
(buffer-undo-list t)
(inhibit-read-only t)
(inhibit-modification-hooks t))
(unwind-protect
(progn
,@body)
- ;; We restore the buffer tick count, too, because otherwise
- ;; we'll trigger a new auto-save.
- (internal--set-buffer-modified-tick ,tick)
- (unless ,modified
- (restore-buffer-modified-p nil))))))
+ (when (or (not ,modified)
+ (eq ,modified 'autosaved))
+ (restore-buffer-modified-p ,modified))))))
(defmacro with-output-to-string (&rest body)
"Execute BODY, return the text it sent to `standard-output', as a string."
diff --git a/src/buffer.c b/src/buffer.c
index 6334e197f0..d830943994 100644
--- a/src/buffer.c
+++ b/src/buffer.c
@@ -1376,12 +1376,23 @@ DEFUN ("buffer-local-variables",
Fbuffer_local_variables,
DEFUN ("buffer-modified-p", Fbuffer_modified_p, Sbuffer_modified_p,
0, 1, 0,
- doc: /* Return t if BUFFER was modified since its file was last read or
saved.
-No argument or nil as argument means use current buffer as BUFFER. */)
+ doc: /* Return non-nil if BUFFER was modified since its file was last
read or saved.
+No argument or nil as argument means use current buffer as BUFFER.
+
+If BUFFER has been autosaved after BUFFER was last modified, the
+symbol `autosaved' is returned. */)
(Lisp_Object buffer)
{
struct buffer *buf = decode_buffer (buffer);
- return BUF_SAVE_MODIFF (buf) < BUF_MODIFF (buf) ? Qt : Qnil;
+ if (BUF_SAVE_MODIFF (buf) < BUF_MODIFF (buf))
+ {
+ if (BUF_AUTOSAVE_MODIFF (buf) == BUF_MODIFF (buf))
+ return Qautosaved;
+ else
+ return Qt;
+ }
+ else
+ return Qnil;
}
DEFUN ("force-mode-line-update", Fforce_mode_line_update,
@@ -1475,16 +1486,19 @@ DEFUN ("restore-buffer-modified-p",
Frestore_buffer_modified_p,
recent-auto-save-p from t to nil.
Vice versa, if FLAG is non-nil and SAVE_MODIFF>=auto_save_modified
we risk changing recent-auto-save-p from nil to t. */
- SAVE_MODIFF = (NILP (flag)
- /* FIXME: This unavoidably sets recent-auto-save-p to nil. */
- ? MODIFF
- /* Let's try to preserve recent-auto-save-p. */
- : SAVE_MODIFF < MODIFF ? SAVE_MODIFF
- /* If SAVE_MODIFF == auto_save_modified == MODIFF,
- we can either decrease SAVE_MODIFF and auto_save_modified
- or increase MODIFF. */
- : modiff_incr (&MODIFF));
-
+ if (NILP (flag))
+ /* This unavoidably sets recent-auto-save-p to nil. */
+ SAVE_MODIFF = MODIFF;
+ else
+ {
+ if (EQ (flag, Qautosaved))
+ BUF_AUTOSAVE_MODIFF (b) = MODIFF;
+ /* If SAVE_MODIFF == auto_save_modified == MODIFF, we can either
+ decrease SAVE_MODIFF and auto_save_modified or increase
+ MODIFF. */
+ else if (SAVE_MODIFF >= MODIFF)
+ SAVE_MODIFF = modiff_incr (&MODIFF);
+ }
return flag;
}
@@ -6465,5 +6479,7 @@ Functions (implicitly) running this hook are
`get-buffer-create',
defsubr (&Soverlay_put);
defsubr (&Srestore_buffer_modified_p);
+ DEFSYM (Qautosaved, "autosaved");
+
Fput (intern_c_string ("erase-buffer"), Qdisabled, Qt);
}
--
(domestic pets only, the antidote for overdose, milk.)
bloggy blog: http://lars.ingebrigtsen.no
- Re: master e8488bcc9c: Avoid having font locking triggering unnecessary auto-saving, (continued)
- Re: master e8488bcc9c: Avoid having font locking triggering unnecessary auto-saving, Lars Ingebrigtsen, 2022/05/07
- Re: master e8488bcc9c: Avoid having font locking triggering unnecessary auto-saving, Lars Ingebrigtsen, 2022/05/09
- Re: master e8488bcc9c: Avoid having font locking triggering unnecessary auto-saving, Stefan Monnier, 2022/05/09
- Re: master e8488bcc9c: Avoid having font locking triggering unnecessary auto-saving, Lars Ingebrigtsen, 2022/05/09
- Re: master e8488bcc9c: Avoid having font locking triggering unnecessary auto-saving, Lars Ingebrigtsen, 2022/05/09
- Re: master e8488bcc9c: Avoid having font locking triggering unnecessary auto-saving, Stefan Monnier, 2022/05/09
- Re: master e8488bcc9c: Avoid having font locking triggering unnecessary auto-saving, Lars Ingebrigtsen, 2022/05/09
- Re: master e8488bcc9c: Avoid having font locking triggering unnecessary auto-saving, Eli Zaretskii, 2022/05/09
- Re: master e8488bcc9c: Avoid having font locking triggering unnecessary auto-saving, Lars Ingebrigtsen, 2022/05/09
- Re: master e8488bcc9c: Avoid having font locking triggering unnecessary auto-saving,
Lars Ingebrigtsen <=
- Re: master e8488bcc9c: Avoid having font locking triggering unnecessary auto-saving, Stefan Monnier, 2022/05/09
- Re: master e8488bcc9c: Avoid having font locking triggering unnecessary auto-saving, Lars Ingebrigtsen, 2022/05/09
- Re: master e8488bcc9c: Avoid having font locking triggering unnecessary auto-saving, Stefan Monnier, 2022/05/09
- Re: master e8488bcc9c: Avoid having font locking triggering unnecessary auto-saving, Lars Ingebrigtsen, 2022/05/10
- Re: master e8488bcc9c: Avoid having font locking triggering unnecessary auto-saving, Stefan Monnier, 2022/05/10
- Re: master e8488bcc9c: Avoid having font locking triggering unnecessary auto-saving, Lars Ingebrigtsen, 2022/05/11
- Re: master e8488bcc9c: Avoid having font locking triggering unnecessary auto-saving, Stefan Monnier, 2022/05/11
- Re: master e8488bcc9c: Avoid having font locking triggering unnecessary auto-saving, Lars Ingebrigtsen, 2022/05/11
- Re: master e8488bcc9c: Avoid having font locking triggering unnecessary auto-saving, Lars Ingebrigtsen, 2022/05/09