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