(add-hook 'find-file-hook
#'auto-revert-find-file-function)
+(add-hook 'after-set-visited-file-name-hook
+ #'auto-revert-set-visited-file-name)
(defvar auto-revert--buffers-by-watch-descriptor
(make-hash-table :test 'equal)
(auto-revert--global-add-current-buffer)))
;; Make sure future buffers are added as well.
(add-hook 'find-file-hook #'auto-revert--global-adopt-current-buffer)
- (add-hook 'after-set-visited-file-name-hook
- #'auto-revert--global-set-visited-file-name)
;; To track non-file buffers, we need to listen in to buffer
;; creation in general. Listening to major-mode changes is
;; suitable, since we then know whether it's a mode that is tracked.
;; Turn global-auto-revert-mode OFF.
(remove-hook 'after-change-major-mode-hook
#'auto-revert--global-adopt-current-buffer)
- (remove-hook 'after-set-visited-file-name-hook
- #'auto-revert--global-set-visited-file-name)
(remove-hook 'find-file-hook #'auto-revert--global-adopt-current-buffer)
(dolist (buf (buffer-list))
(with-current-buffer buf
(auto-revert--global-add-current-buffer)
(auto-revert-set-timer))
-(defun auto-revert--global-set-visited-file-name ()
- "Update Global Auto-Revert management of the current buffer.
+(defun auto-revert-set-visited-file-name ()
+ "Update Auto-Revert management of the current buffer.
Called after `set-visited-file-name'."
- ;; Remove any existing notifier first so that we don't track the
- ;; wrong file in case the file name was changed.
(when auto-revert-notify-watch-descriptor
+ ;; Remove any existing notifier so that we don't track the wrong
+ ;; file in case the file name was changed.
(auto-revert-notify-rm-watch))
- (auto-revert--global-adopt-current-buffer))
+ (cond (global-auto-revert-mode
+ (auto-revert--global-adopt-current-buffer))
+ ((or auto-revert-mode auto-revert-tail-mode)
+ (auto-revert-set-timer))))
(defun auto-revert--polled-buffers ()
"List of buffers that need to be polled."
(auto-revert--deftest-remote auto-revert-test05-global-notify
"Test `global-auto-revert-mode' without polling for remote buffers.")
+(ert-deftest auto-revert-test06-write-file ()
+ "Verify that notification follows `write-file' correctly."
+ :tags '(:expensive-test)
+ (skip-unless (or file-notify--library
+ (file-remote-p temporary-file-directory)))
+ (let* ((auto-revert-use-notify t)
+ (file-1 (make-temp-file "auto-revert-test"))
+ (file-2 (concat file-1 "-2"))
+ (buf nil))
+ (unwind-protect
+ (progn
+ (setq buf (find-file-noselect file-1))
+ (with-current-buffer buf
+ (insert "A")
+ (save-buffer)
+
+ (auto-revert-mode 1)
+
+ (insert "B")
+ (write-file file-2)
+
+ (auto-revert-test--write-file "C" file-2)
+ (auto-revert-test--wait-for-buffer-text
+ buf "C" (+ auto-revert-interval 1))
+ (should (equal (buffer-string) "C"))))
+
+ ;; Clean up.
+ (ignore-errors (kill-buffer buf))
+ (ignore-errors (delete-file file-1))
+ (ignore-errors (delete-file file-2)))))
+
+(auto-revert--deftest-remote auto-revert-test06-write-file
+ "Test `write-file' in `auto-revert-mode' for remote buffers.")
+
(defun auto-revert-test-all (&optional interactive)
"Run all tests for \\[auto-revert]."
(interactive "p")