]> code.delx.au - dotemacs/blobdiff - lisp/my-recentf.el
counsel improvements
[dotemacs] / lisp / my-recentf.el
index 977d153cbd6854dce868c08150556744d6f2fdb8..4f8ba5d311b580e7cf59033422c48dd5d0eb1b93 100644 (file)
@@ -1,31 +1,32 @@
+;;; -*- lexical-binding: t -*-
+
 (require 'recentf)
 
-(setq recentf-exclude '("recentf"))
+(setq recentf-exclude (list
+                       "/\\.emacs\\.d/recentf$"
+                       "/\\.git/"))
+
 (setq recentf-max-saved-items 1000)
+
 (run-with-idle-timer 30 t #'my/recentf-periodic)
 
 (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/advice/silent-message)
-  (advice-add 'write-region :around #'my/advice/silent-write-region)
-  (unwind-protect
-      (funcall function)
-    (advice-remove 'message #'my/advice/silent-message)
-    (advice-remove 'write-region #'my/advice/silent-write-region)))
-
-(defun my/advice/silent-write-region (original-function &rest args)
-  (setf (nth 4 args) 'nomsg)
-  (apply original-function args)
-  (set-buffer-modified-p nil))
-
-(defun my/advice/silent-message (original-function &rest args)
-  (apply #'format args))
+  (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)