将文件的本地链接修改为org-mode文件链接
缘起
将文件进行链接是一个必须的功能,现在的笔记软件都做了笔记与笔记之间是的链接,但除了笔记之间的链接外,很多时间,我需要将文件与文件或文件与笔记进行链接。
之前我的做法是将文件名的全名写入笔记,这样未来使用类似everything的软件就可以直接找到,有时候直接插入文件的绝对路径加文件名,在有了一定的 elisp 基础后,我发觉其实可以直接将文件的绝对路径链接改为 file+sys:
的链接。
代码
思路是将文件的绝对地址粘贴后,通常是一行。
- 取得行开始和结束的地址
- narrow到这一区域,这样就不会与其它内容相混合。
- 从开始地址起,将
\
全部替换成/
因为地址的斜杠不同 - 插入
file+sys:
- 把文件名作为链接名
- 插入链接格式所需的内容。
(defun change-link()
"Change the windows format absolute link to file+sys file link in Emacs."
(interactive)
(let (
(p1 (line-beginning-position))
(p2 (line-end-position)))
(save-restriction
(narrow-to-region p1 p2)
(goto-char p1)
(while (search-forward "\\" nil t)
(replace-match "/" "FIXEDCASE" "LITERAL")))
(goto-char p1)
(insert "[[file+sys:")
(goto-char p2)
(search-backward "/")
(forward-char)
(copy-region-as-kill (point) p2)
(end-of-line)
(insert "][")
(yank)
(insert"]]")
))