;;; -*- lexical-binding: t -*- (require '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/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)) (recentf-mode 1)