将文件的本地链接修改为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"]]")
       ))