;;; -*- 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 () (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)