(require 'recentf)
(setq recentf-exclude (list
- "/emacs\\.d/recentf$"
- "/\\.git/"
- #'my/filename-not-truename-p))
+ "/\\.emacs\\.d/recentf$"
+ "/\\.git/"))
(setq recentf-max-saved-items 1000)
(defvar my/recentf-list-prev nil)
(defun my/recentf-periodic ()
- (my/with-silence #'recentf-cleanup)
- (unless (equal recentf-list my/recentf-list-prev)
- (my/with-silence #'recentf-save-list)
- (setq my/recentf-list-prev recentf-list)))
-
-(defun my/with-silence (function)
- (advice-add 'message :around #'my/with-silence/advice-message)
- (advice-add 'write-region :around #'my/with-silence/advice-write-region)
- (unwind-protect
- (funcall function)
- (advice-remove 'message #'my/with-silence/advice-message)
- (advice-remove 'write-region #'my/with-silence/advice-write-region)))
-
-(defun my/with-silence/advice-message (original-function &rest args)
- (ignore original-function)
- (apply #'format args))
-
-(defun my/with-silence/advice-write-region (original-function &rest args)
- (setf (nth 4 args) 'nomsg)
- (apply original-function args)
- (set-buffer-modified-p nil))
-
-(defun my/filename-not-truename-p (filename)
- (not (equal (file-truename filename) filename)))
+ (when (my/recentf-has-changed)
+ (my/with-inhibit-message #'recentf-cleanup)
+ (when (equal recentf-list my/recentf-list-prev)
+ (my/with-inhibit-message #'recentf-save-list)
+ (setq my/recentf-list-prev recentf-list))))
+
+(defun my/recentf-has-changed ()
+ (not (equal recentf-list my/recentf-list-prev)))
+
+(defun my/with-inhibit-message (function)
+ (let ((old-inhibit-message inhibit-message))
+ (setq inhibit-message t)
+ (unwind-protect
+ (funcall function)
+ (setq inhibit-message old-inhibit-message))))
(recentf-mode 1)