From 05ea83385ba5478f7463d99e13b615e166c599eb Mon Sep 17 00:00:00 2001 From: Case Duckworth Date: Wed, 12 May 2021 16:41:58 -0500 Subject: Make recentf dired-aware --- init.el | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) (limited to 'init.el') diff --git a/init.el b/init.el index 24d71ed..9d2fa33 100644 --- a/init.el +++ b/init.el @@ -450,8 +450,37 @@ (:option recentf-save-file (acdw/dir "recentf.el") recentf-max-menu-items 100 recentf-max-saved-items nil - recentf-auto-cleanup 60 + recentf-auto-cleanup 'mode (append recentf-exclude) (acdw/dir)) + + ;; Magic advice to rename entries in recentf when moving files in + ;; dired. + (defun rjs/recentf-rename-notify (oldname newname &rest args) + (if (file-directory-p newname) + (rjs/recentf-rename-directory oldname newname) + (rjs/recentf-rename-file oldname newname))) + + (defun rjs/recentf-rename-file (oldname newname) + (setq recentf-list + (mapcar (lambda (name) + (if (string-equal name oldname) + newname + oldname)) + recentf-list))) + + (defun rjs/recentf-rename-directory (oldname newname) + ;; oldname, newname and all entries of recentf-list should already + ;; be absolute and normalised so I think this can just test whether + ;; oldname is a prefix of the element. + (setq recentf-list + (mapcar (lambda (name) + (if (string-prefix-p oldname name) + (concat newname (substring name (length oldname))) + name)) + recentf-list))) + + (advice-add 'dired-rename-file :after #'rjs/recentf-rename-notify) + (recentf-mode +1)) (setup (:require savehist) -- cgit 1.4.1-21-gabe81