在org中插入excalidraw文件
Table of Contents
缘起
把org文件作为笔记工具是必定要走到的路,图文混排是很难绕过的槛。emacs可以插入图片,但是这个排版并不理想。个人也是很不喜欢这种模式,因为会造成笔记文件的臃肿,所以我也尽量避免在文本中插入图片。对于实在要插入图片的笔记,我全部移到了有道这种方便图片粘贴的工具中。
之前用过 graphviz 来解决文字和图的妥协,但是 graphviz 使用中并不友好,因此发觉在实际中也很难用。
在org中新建excalidraw
excalidraw 是什么,这里不详细介绍,简单地讲就是一个比较简单、轻量的画图工具。并有人为之开发了一个 org-excalidraw 的插件:https://github.com/wdavew/org-excalidraw 。
按照插件的说明,应该在安装插件后,可以在org中生成excalidraw文件,并显示。但我安装后,未达到相应的效果。
突然想到,其实可以直接看看源码,说不定能看出哪里出错了。事实证明,也没看出来哪里出错,但发现有些我还是能看懂的。在看了之后,我发觉可以缩改一下,将我要用的功能拿出来,其实我要的也就是一个新建的功能:新建一个excalidraw文件,并同时插入 file+sys 链接,此时如果把excalidraw安装成网页应用,就可以直接点出链接打开文件了。代码如下:
(defun org-excalidraw-create() "Create an excalidraw drawing and insert an org-mode’ link to it at Point." (interactive) (let* ((filename (format "%s.excalidraw" (read-from-minibuffer "Enter your filename:"))) (org-excalidraw-directory "d:/01 Data/03 Docs/02 OffWork/02 Notes/04Charts/") (org-excalidraw-base "{ \"type\": \"excalidraw\", \"version\": 2, \"source\": \"https://excalidraw.com\", \"elements\": [], \"appState\": { \"gridSize\": null, \"viewBackgroundColor\": \"#ffffff\" }, \"files\": {} }") (path (expand-file-name filename org-excalidraw-directory)) (link (format "[[file+sys:%s]]" path))) (insert link) (with-temp-file path (insert org-excalidraw-base)) ;; (org-open-at-point path))想立即打开,没成功 )