列出emacs创建的编号备份文件的规范方法是什么?
我知道如何配置emacs以保留编号备份。我不知道找到那些编号备份的最规范的方法 emacs函数find backup file name似乎是最接近的。其文件规定: 此函数用于计算文件名的新备份文件的文件名。它还可能建议删除某些现有备份文件。find backup file name返回一个列表,其中CAR是新备份文件的名称,CDR是建议删除的备份文件的列表 然而,这不是我想要的。我正在查找以前创建的所有备份文件的列表。以下是我为实现这一目标而编写的代码:列出emacs创建的编号备份文件的规范方法是什么?,emacs,elisp,Emacs,Elisp,我知道如何配置emacs以保留编号备份。我不知道找到那些编号备份的最规范的方法 emacs函数find backup file name似乎是最接近的。其文件规定: 此函数用于计算文件名的新备份文件的文件名。它还可能建议删除某些现有备份文件。find backup file name返回一个列表,其中CAR是新备份文件的名称,CDR是建议删除的备份文件的列表 然而,这不是我想要的。我正在查找以前创建的所有备份文件的列表。以下是我为实现这一目标而编写的代码: (defvar backup-dire
(defvar backup-directory "~/emacs.d/backups/")
(defun get-backup-pattern (file-name)
(concat "*" (replace-regexp-in-string "\/" "\\!" file-name t t) ".~*"))
(butlast
(split-string
(shell-command-to-string
(concat "find "
backup-directory
" -name \""
(get-backup-pattern (buffer-file-name))
"\""))
"\n"))
这种方法效果很好。然而,炮轰出来寻找似乎是一个黑客给我;特别是因为这种方法是特定于平台的
有没有我应该使用的内置方法或至少是更惯用的方法?就我个人而言,我不会将备份文件保存在中心文件夹中,因此无法提供工作代码,但如果您想搜索目录的内容,请使用目录文件。因此,我决定使用以下解决方案。我不再使用*nix find命令,而是按照建议使用目录文件
(defun get-filter-pattern (file-name)
(concat (replace-regexp-in-string "\/" "!" file-name t t)
".~[0-9]*~*$"))
(defun filter (condp lst)
(delq nil
(mapcar (lambda (x) (and (funcall condp x) x)) lst)))
(defun filter-files (backup-directory buffer-file-name)
(mapcar (lambda (backup-name) (concat backup-directory backup-name))
(filter (lambda (backup-name)
(string-match (get-filter-pattern buffer-file-name) backup-name))
(directory-files backup-directory))))
也许这并不像使用find那样优化。但是,它应该是独立于平台的,ie可以在Windows上使用。这不是一个坏主意。它允许我以独立于平台的方式获取所有文件。但是,我仍然需要进一步筛选该列表。