在 Emacs 中,“
File
”菜单有一个“Open Recent
”条目,它显示 recentf-list
变量的前 N 个元素。
我知道 recentf-list
变量必须包含所有最新打开的文件(按最近打开的顺序排列),但“File/Open Recent
”仅显示相同的文件,包括当前在 Emacs 中打开的文件。
是否可以排除(仅在“
File/Open Recent
”中)当前在 Emacs 中打开的所有文件?
示例:
下面是我当前的缓冲区列表。我确实评论了“不相关”的内容。我目前打开了 9 个文件。
(buffer-list)
( ;; #<buffer *scratch*>
;; #<buffer *Async-native-compile-log*>
;; #<buffer *Minibuf-1*>
;; #<buffer *temp-0*>
[...]
#<buffer passwd>
#<buffer c/Makefile>
#<buffer brchess/Makefile>
;; #<buffer *Messages*>
;; #<buffer *scratch*>
;; #<buffer *Minibuf-0*>
;; #<buffer *Native-compile-Log*>
[...]
#<buffer boot-disk.org>
#<buffer beaglebone-buster-setup.org>
#<buffer init.el>
#<buffer emacs-cheatsheet.org>
#<buffer 2023/Makefile>
#<buffer list-pgn-games.php>
;; #<buffer *Compile-Log*>
[...])
下面是
recentf-list
值(前 9 个当前已打开 - 见上文)。 “File/Open Recent
”显示前 10 个元素:
("/etc/passwd"**
"/home/br/dev/www/devs/php/chess/list-pgn-games.php"**
"/home/br/dev/advent-of-code/2023/Makefile"**
"/home/br/org/emacs-cheatsheet.org"**
"/home/br/.emacs.d/init.el"**
"/home/br/org/beaglebone-buster-setup.org"**
"/home/br/org/boot-disk.org"**
"/home/br/dev/tools/c/Makefile"**
"/home/br/dev/brchess/Makefile"**
;; files above are currently opened in Emacs
"/home/br/list-all-ppa.sh"
;; "File/Open Recent" (10 entries) shows all above entries, first 9 are useless.
"/home/br/dev/userspace-rcu/include/urcu/arch/x86.h"
"/home/br/dev/userspace-rcu/include/urcu/arch/generic.h"
"/home/br/dev/userspace-rcu/doc/examples/list/cds_list_add_rcu.c"
"/home/br/dev/userspace-rcu/include/urcu/list.h"
"/home/br/dev/brchess/include/debug.h"
"/home/br/dev/tools/config/home/.bashrc.br.lorien"
"/home/br/dev/tools/config/home/.bashrc.br"
"/home/br/dev/test/Makefile"
"/home/br/dev/test/definitions.h"
"/home/br/dev/test/definitions.c"
"/home/br/dev/test/main.c"
"/home/br/.bashrc.br")
在此示例中,我希望“文件/打开最近的”跳过前 9 个条目。
注意:不幸的是,我对 Elisp 不太流利。
您可以自定义选项
recentf-exclude
或 recentf-keep
或两者,添加一个谓词来根据您的喜好进行过滤(例如,排除缓冲区中当前访问的文件)。函数 buffer-alist
为您提供当前现有缓冲区的列表。您可以使用 cl-delete-if(-not)
或 remove-if(-not)
等函数进行过滤。