如何编写Emacs函数bookmark-config-files为指定目录匹配的.el文件批量创建书签
实现代码
(defun bookmark-config-files () "为`user-emacs-directory'/els/下所有匹配asdasd-*.el的文件批量创建书签" (interactive) (let* ((target-dir (expand-file-name "els/" user-emacs-directory)) (config-files (directory-files target-dir t "^asdasd-.*\\.el$"))) (dolist (file config-files) (let* ((bookmark-name (file-name-nondirectory file)) ;; 手动构造标准文件书签结构,无需打开目标文件 (bookmark-record `((filename . ,file) (name . ,bookmark-name) (position . 1)))) ;; 默认跳转至文件开头 ;; 写入全局书签列表,第三个参数设为t可覆盖同名书签 (bookmark-store bookmark-name bookmark-record nil))) ;; 持久化保存书签到磁盘,重启Emacs后依然可用 (bookmark-save))
说明
- 无需打开目标文件即可完成创建,执行效率远高于读写文件缓存的方案
- 路径基于
user-emacs-directory拼接为绝对路径,不会受当前工作目录变化影响 - 生成的书签名为对应
.el文件的文件名,若需要自定义跳转位置,修改position字段的取值即可
之前实现的问题
- 第一次尝试:
bookmark-make-record默认生成当前buffer的书签记录,仅修改文件名属性也没有调用存储接口写入全局书签列表,修改不生效 - 第二次尝试:生成了目标文件的书签记录但同样没有执行存储逻辑,且打开文件的操作属于冗余开销,无必要执行
内容的提问来源于stack exchange,提问作者Commander Asdasd
相关产品推荐
相关产品推荐

