在 Emacs 中,如何通过“文件/打开最近的”菜单来忽略当前打开的菜单?

问题描述 投票:0回答:1

在 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 不太流利。

emacs recent-file-list
1个回答
0
投票

您可以自定义选项

recentf-exclude
recentf-keep
或两者,添加一个谓词来根据您的喜好进行过滤(例如,排除缓冲区中当前访问的文件)。函数
buffer-alist
为您提供当前现有缓冲区的列表。您可以使用
cl-delete-if(-not)
remove-if(-not)
等函数进行过滤。

© www.soinside.com 2019 - 2024. All rights reserved.