]> code.delx.au - dotemacs/blob - lisp/my-recentf.el
lexical binding
[dotemacs] / lisp / my-recentf.el
1 ;;; -*- lexical-binding: t -*-
2
3 (require 'recentf)
4
5 (setq recentf-exclude '("recentf"))
6 (setq recentf-max-saved-items 1000)
7 (run-with-idle-timer 30 t #'my/recentf-periodic)
8
9 (defvar my/recentf-list-prev nil)
10
11 (defun my/recentf-periodic ()
12 (my/with-silence #'recentf-cleanup)
13 (unless (equal recentf-list my/recentf-list-prev)
14 (my/with-silence #'recentf-save-list)
15 (setq my/recentf-list-prev recentf-list)))
16
17 (defun my/with-silence (function)
18 (advice-add 'message :around #'my/advice/silent-message)
19 (advice-add 'write-region :around #'my/advice/silent-write-region)
20 (unwind-protect
21 (funcall function)
22 (advice-remove 'message #'my/advice/silent-message)
23 (advice-remove 'write-region #'my/advice/silent-write-region)))
24
25 (defun my/advice/silent-write-region (original-function &rest args)
26 (setf (nth 4 args) 'nomsg)
27 (apply original-function args)
28 (set-buffer-modified-p nil))
29
30 (defun my/advice/silent-message (original-function &rest args)
31 (apply #'format args))
32
33 (recentf-mode 1)