将文件的本地链接修改为org-mode文件链接

缘起

将文件进行链接是一个必须的功能,现在的笔记软件都做了笔记与笔记之间是的链接,但除了笔记之间的链接外,很多时间,我需要将文件与文件或文件与笔记进行链接。

之前我的做法是将文件名的全名写入笔记,这样未来使用类似everything的软件就可以直接找到,有时候直接插入文件的绝对路径加文件名,在有了一定的 elisp 基础后,我发觉其实可以直接将文件的绝对路径链接改为 file+sys: 的链接。

代码

思路是将文件的绝对地址粘贴后,通常是一行。

  1. 取得行开始和结束的地址
  2. narrow到这一区域,这样就不会与其它内容相混合。
  3. 从开始地址起,将 \ 全部替换成 / 因为地址的斜杠不同
  4. 插入 file+sys:
  5. 把文件名作为链接名
  6. 插入链接格式所需的内容。
(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"]]")
       ))
海上一民工