aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLin Sun2024-10-20 10:05:19 +0200
committerMichael Albinus2024-10-20 10:05:19 +0200
commit545c54aea1ecccf84eaebbe3a3cb7b5fbc5716f8 (patch)
treeecdaff2cadf06b380bc329dfd8d000f533c5fe4e
parent80627a31c67b383393c53bd87dd21b7f0de3844e (diff)
downloademacs-545c54aea1ecccf84eaebbe3a3cb7b5fbc5716f8.tar.gz
emacs-545c54aea1ecccf84eaebbe3a3cb7b5fbc5716f8.zip
Enhance the auto-revert to avoid revert a buffer in short time
* lisp/autorevert.el (auto-revert--last-time): New defvar. (auto-revert-handler, auto-revert-notify-handler): Use it. * test/lisp/autorevert-tests.el (with-auto-revert-test): Set `auto-revert--lockout-interval' correctly.
-rw-r--r--lisp/autorevert.el16
-rw-r--r--test/lisp/autorevert-tests.el7
2 files changed, 17 insertions, 6 deletions
diff --git a/lisp/autorevert.el b/lisp/autorevert.el
index 0fdab6ffc9f..ef758584c0d 100644
--- a/lisp/autorevert.el
+++ b/lisp/autorevert.el
@@ -370,6 +370,9 @@ buffer.")
370 "Non-nil when file has been modified on the file system. 370 "Non-nil when file has been modified on the file system.
371This has been reported by a file notification event.") 371This has been reported by a file notification event.")
372 372
373(defvar-local auto-revert--last-time nil
374 "The last time of buffer was reverted.")
375
373(defvar auto-revert-debug nil 376(defvar auto-revert-debug nil
374 "Use for debug messages.") 377 "Use for debug messages.")
375 378
@@ -749,13 +752,17 @@ system.")
749 ;; Mark buffer modified. 752 ;; Mark buffer modified.
750 (setq auto-revert-notify-modified-p t) 753 (setq auto-revert-notify-modified-p t)
751 754
752 ;; Revert the buffer now if we're not locked out. 755 ;; Lock out the buffer
753 (unless auto-revert--lockout-timer 756 (unless auto-revert--lockout-timer
754 (auto-revert-handler)
755 (setq auto-revert--lockout-timer 757 (setq auto-revert--lockout-timer
756 (run-with-timer 758 (run-with-timer
757 auto-revert--lockout-interval nil 759 auto-revert--lockout-interval nil
758 #'auto-revert--end-lockout buffer)))))))))) 760 #'auto-revert--end-lockout buffer))
761 ;; Revert it when first entry or it was reverted intervals ago
762 (when (or (null auto-revert--last-time)
763 (> (float-time (time-since auto-revert--last-time))
764 auto-revert--lockout-interval))
765 (auto-revert-handler))))))))))
759 766
760(defun auto-revert--end-lockout (buffer) 767(defun auto-revert--end-lockout (buffer)
761 "End the lockout period after a notification. 768 "End the lockout period after a notification.
@@ -801,7 +808,8 @@ This is an internal function used by Auto-Revert Mode."
801 #'buffer-stale--default-function) 808 #'buffer-stale--default-function)
802 t)))) 809 t))))
803 eob eoblist) 810 eob eoblist)
804 (setq auto-revert-notify-modified-p nil) 811 (setq auto-revert-notify-modified-p nil
812 auto-revert--last-time (current-time))
805 (when revert 813 (when revert
806 (when (and auto-revert-verbose 814 (when (and auto-revert-verbose
807 (not (eq revert 'fast))) 815 (not (eq revert 'fast)))
diff --git a/test/lisp/autorevert-tests.el b/test/lisp/autorevert-tests.el
index 4763994c5d4..7e176df6803 100644
--- a/test/lisp/autorevert-tests.el
+++ b/test/lisp/autorevert-tests.el
@@ -132,12 +132,15 @@ This expects `auto-revert--messages' to be bound by
132 (error (message "%s" err) (signal (car err) (cdr err))))))) 132 (error (message "%s" err) (signal (car err) (cdr err)))))))
133 133
134(defmacro with-auto-revert-test (&rest body) 134(defmacro with-auto-revert-test (&rest body)
135 `(let ((auto-revert-interval-orig auto-revert-interval)) 135 `(let ((auto-revert-interval-orig auto-revert-interval)
136 (auto-revert--lockout-interval-orig auto-revert--lockout-interval))
136 (unwind-protect 137 (unwind-protect
137 (progn 138 (progn
138 (customize-set-variable 'auto-revert-interval 0.1) 139 (customize-set-variable 'auto-revert-interval 0.1)
140 (setq auto-revert--lockout-interval 0.05)
139 ,@body) 141 ,@body)
140 (customize-set-variable 'auto-revert-interval auto-revert-interval-orig)))) 142 (customize-set-variable 'auto-revert-interval auto-revert-interval-orig)
143 (setq auto-revert--lockout-interval auto-revert--lockout-interval-orig))))
141 144
142(defun auto-revert-tests--write-file (text file time-delta &optional append) 145(defun auto-revert-tests--write-file (text file time-delta &optional append)
143 (write-region text nil file append 'no-message) 146 (write-region text nil file append 'no-message)