在org中插入excalidraw文件

缘起

把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))想立即打开,没成功

     )
海上一民工