📜  emacs:从 emacs“查找最近”列表中删除文件 (1)

📅  最后修改于: 2023-12-03 14:40:58.433000             🧑  作者: Mango

Emacs:从 Emacs “查找最近”列表中删除文件

在 Emacs 中,有一个非常实用的功能叫做“查找最近”。这个功能可以让用户方便地查看最近编辑或打开的文件,并且可以快速切换到这些文件。

然而,有时候您可能会希望从这个列表中删除某些文件。本文将介绍如何在 Emacs 中完成这项任务。

删除最近打开的文件

要从 Emacs 的“查找最近”列表中删除最近打开的文件,可以使用 recentf-remove-if-non-kept 函数。这个函数可以接受一个函数作为参数,然后从“查找最近”列表中删除所有不满足该函数条件的文件。

例如,要删除某个文件名为 /path/to/myfile.txt 的文件,可以执行以下 Emacs Lisp 代码:

(require 'recentf)
(setq recentf-auto-cleanup 10) ;; 设置清理频率为10分钟
(setq recentf-max-saved-items 100) ;; 最多保存100个文件
(recentf-mode 1) ;; 启用“查找最近”模式

(defun my/recentf-remove-file (file)
  "删除文件 FILE 在“查找最近”列表中的记录。"
  (let ((kept-list (remove file recentf-list :test #'equal)))
    (setq recentf-list kept-list)))

(my/recentf-remove-file "/path/to/myfile.txt")

上述代码首先启用了“查找最近”模式,然后定义了一个名为 my/recentf-remove-file 的函数,该函数接受一个文件名作为参数,并从“查找最近”列表中删除该文件。

为了删除文件,我们首先使用 remove 函数从 recentf-list 中过滤出除目标文件外的所有文件。然后,我们使用 setqkept-list 赋值给 recentf-list,从而实现删除操作。

删除最近编辑的文件

要删除 Emacs 的“查找最近”列表中最近编辑的文件,可以使用 recentf-remove-menu-item 函数。这个函数可以接受一个菜单项名称作为参数,然后从菜单中删除该项。

例如,要删除某个文件名为 /path/to/myfile.txt 的文件,可以执行以下 Emacs Lisp 代码:

(require 'recentf)
(setq recentf-auto-cleanup 10) ;; 设置清理频率为10分钟
(setq recentf-max-saved-items 100) ;; 最多保存100个文件
(recentf-mode 1) ;; 启用“查找最近”模式

(defun my/recentf-remove-menu-item (file)
  "从“查找最近”菜单中删除文件 FILE."
  (let ((menu-item (assoc file recentf-menu-cache)))
    (when menu-item
      (setq recentf-menu-cache (delete menu-item recentf-menu-cache)))))

(my/recentf-remove-menu-item "/path/to/myfile.txt")

上述代码首先启用了“查找最近”模式,然后定义了一个名为 my/recentf-remove-menu-item 的函数,该函数接受一个文件名作为参数,并从“查找最近”菜单中删除该文件。

为了删除菜单项,我们首先使用 assoc 函数从 recentf-menu-cache 中获取该文件的菜单项对象。然后,我们使用 delete 函数将该菜单项从 recentf-menu-cache 中删除。

结论

通过使用 recentf-remove-if-non-keptrecentf-remove-menu-item 函数,我们可以在 Emacs 的“查找最近”列表中删除文件。这个方法对于希望保持列表整洁的 Emacs 用户非常有用。