将文件的本地链接修改为org-mode文件链接
缘起
将文件进行链接是一个必须的功能,现在的笔记软件都做了笔记与笔记之间是的链接,但除了笔记之间的链接外,很多时间,我需要将文件与文件或文件与笔记进行链接。
D:\02 Programs\08 Tools\doublecmd\009.txt
D:\02 Programs\08 Tools\doublecmd\009.txt
之前我的做法是将文件名的全名写入笔记,这样未来使用类似everything的软件就可以直接找到,有时候直接插入文件的绝对路径加文件名,在有了一定的 elisp 基础后,我发觉其实可以直接将文件的绝对路径链接改为 file+sys: 的链接。
代码
思路是将文件的绝对地址粘贴后,通常是一行。
- 获取文件路径和文件名
- 取得行开始和结束的地址
- narrow到这一区域,这样就不会与其它内容相混合。
- 从开始地址起,将
\全部替换成/因为地址的斜杠不同 - 插入
file+sys: - 把文件名作为链接名
- 插入链接格式所需的内容。
(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