暗无天日

=============>DarkSun的个人博客

移动文件路径却不破坏org file link的方法

我习惯在Org file中记录电子书的文件路径、阅读耗时、笔记等信息。 电子书放在统一的目录中,按照分类分子目录进行存放。

但这会带来一个问题,就是我在整理电子书时经常会在不同分类之间移动电子书,这就会破坏Org file中电子书的文件路径。

如果每次都需要手工修改文件中的链接地址的话,那就太麻烦了。好在通过自定义link,我们可以自定义搜索函数来动态搜索电子书路径,而不是写死电子书的存放路径。

方法如下:

(defvar MY-EBOOK "~/ebooks")
(defun my-search-ebook (pattern &optional _)
  (let* ((files (directory-files-recursively MY-EBOOK pattern))
         (count (length files)))
    (cond ((= count 0)
           (message "Can't found file mathcing %s" pattern))
          ((= count 1)
           (find-file (car files)))
          ((> count 1)
           (find-file (completing-read "Please pick a file: " files nil t))))))

(org-link-set-parameters "ebook"
                         :follow #'my-search-ebook
                         :help-echo (format "Open the file in %s" MY-EBOOK)
                         :face '(underline t))

这就自定义了一个 ebook 的link,访问这个 link 会自动从 MY-EBOOK 定义的目录(~/ebooks)中搜索匹配的文件并打开。