org-drawio: 自动转换 drawio 为 svg,并插入到 orgmode buffer

我这里调不通。我这里 async-start 用不了。不知道是不是windows的缘故。

其实可以进一步精简,去掉后缀也可以:

#+drawio: diagram

这个问题我也遇到了,也找到了一个 workaround:全选,然后在 Format >> Text 面板中,禁用 Word Wrap 和 Formatted Text 两项。参考:Why text in exported SVG images may not display correctly

1 个赞

我也有遇到这问题,但我主要把 org 导成 html 来预览,在 html 下看不会有这个问题,所以不是很在意

1 个赞

我这里试用后感觉直接转 svg 相比从 pdf 转要快的多,所以没有必要使用 async 的方式。

你说的 svg 版本高不能显示的问题, Emacs 30 上好像没这个问题。

我个人 fork 后直接转 svg 了。

感谢。

发现一个小问题。

(defun org-drawio-keyword-string-to-plist ()
  "Return the \"#+drawio:\" keyword's values if any at point."
  (save-excursion
    (beginning-of-line)
    (let ((plist))
      (when (string= "DRAWIO"
                     (org-element-property :key (org-element-at-point)))
        ;; #+drawio: keyword exists.
        ;; Further checking the value
        (when-let ((str (org-element-property :value (org-element-at-point))))
          (dolist (fn org-drawio-keyword-value-functions) plist
                  (setq plist (append plist (funcall fn str)))))
        plist))))

上面这个函数获取的文件名不能有空格存在,否则获取不全。

暂时先要求没空格吧。 不然的话,就要添加双引号。 我希望越简洁越好,所以就不加引号。

期待 emacs 30

出现Empty filename,看代码是由于 org-drawio-keyword-value-input 匹配不出这个文件名


        (start-process-shell-command
         "org-drawio"
         nil
         final-cmd)

用这个就是异步执行了

文件名要分开写

#+drawio: 2024....drawio :input-dir ~/attach_ts

执行时快了,但是 (org-display-inline-images) 没效果了。不能显示图片。

(defun my-process-sentinel (process event)
  (when (string-match-p "finished" event)
    (org-redisplay-inline-images)))

(let ((process (start-process-shell-command "org-drawio" nil final-cmd)))
  (set-process-sentinel process #'my-process-sentinel))

等待进程结束之后再调用图片刷新。

1 个赞

感谢! 改成异步的了。现在不卡了。

或者把 ~/attach_ts 设置为默认input-dir

(defcustom org-drawio-input-dir "./draws"
  "Define input folder of drawio file."
  :type 'string)

添加input-dir或设置 org-drawio-input-dir试过,也匹配不上,发现是文件名不能带有下划线。

奇怪,我这里这样也可以

#+drawio: diagram.drawio :input-dir ./draws_hello_world

其实这个方案不只局限于drawio,所有能使用命令行转换为图片文件的都能用一套方案。 感觉貌似在论坛里看到过?

因为我自己更习惯以列表项的形式插入,所以之前写过一个包用的 [[drawio:xxx.drawio]] 的链接方案,支持 drawio,xournalpp,krita,但是好久不用了 :woman_facepalming:t2:

换成 22_diagram.drawio

我一直在用这个哈哈,记得有些小问题,好像是多次在编辑中保存会导出好几次,改改用起来不错。