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

Table of Contents

缘起

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

在org中插入excalidraw文件

D:\02 Programs\08 Tools\doublecmd\009.txt

D:\02 Programs\08 Tools\doublecmd\009.txt

009.txt

009.txt

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

代码

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

  1. 获取文件路径和文件名
  2. 取得行开始和结束的地址
  3. narrow到这一区域,这样就不会与其它内容相混合。
  4. 从开始地址起,将 \ 全部替换成 / 因为地址的斜杠不同
  5. 插入 file+sys:
  6. 把文件名作为链接名
  7. 插入链接格式所需的内容。
(defun ian/winlink-to-orglink()
  "Change the windows format absolute link to file+sys file link in Emacs."
     (interactive)
     (beginning-of-line)
     (delete-horizontal-space) ;;以防行首有空格
     (let ((filepath (thing-at-point 'line)))
       (when filepath
         (let(
              (filename (string-trim-right (file-name-nondirectory filepath)))
              (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:")
           (end-of-line)
           (insert "][")
           (insert filename) 
           (insert"]]")
         ))))

D:\02 Programs\08 Tools\doublecmd\009.txt