org-excalidraw,正好愁怎么在 emacs 里画思维导图

现在感觉不愁了。 wdavew/org-excalidraw

5 个赞

虽然在看到这个帖子之前没听过 excalidraw,但点进去看了说明后,对其中把外部设计图转成特殊链接并且可以在 org 里预览的做法比较感兴趣,不知道有没有人对 PPT 做类似的处理,比如可以引用 PPT 的某一页,然后把 PPT 这一页默认转成一个图片格式的缓存,在 org 里直接看到 PPT 内容,执行某个命令或者直接 follow-link 可以将这一页从指定的 PPT 外部软件打开,修改保存后预览图也自动更新?

并且感觉这个思路似乎可以扩展到任何设计类的格式,比如 PS,其他类型的思维导图,视频的某个时刻图片等等,这样就可以在 org 里引用、预览和方便地跳转到与这个 org 有关的各类多媒体的视角里去了?

我以前搞过一个pdf相关的(私人的),大概就是org link里加一个有关pdf页数的schema,显示图片的时候会顺便把pdf相应页数的截图显示出来。

pdf 也适合这种需求场景,比如某一页 pdf 是个示意图或者大表格,做笔记的时候引用这一页时还能显示图片,想看上下文点进去就打开 pdf。

这么一说,我又觉得这类功能或许应该抽象成一个通用的框架,更像是协议性质的,增加一种 org link 的语法,比如叫做 filepreview

那么在配置文件里,只需要对不同后缀(格式)的文件设置一个转成图片的命令和命令参数,比如以下设置:

(setq filepreview-preview-command
'(("\\.ps"  "convert %s.ps %s_hash.png")
  ("\\.pptx"  "convert %s.pptx %s_hash.jpg -page %d")
 ("\\.pdf"  "convert %s.pptx %s_hash.jpg -page %d -rotate 90")
  ("\\.mm"  "convert %s.mm %s_hash.jpg")
)
(setq filepreview-cache-folder ~/org/.previewcache)

以上 convert 语法都是伪代码了,不同格式可能有不同命令 然后

[[filepreview:~/product/presentation.pptx:3]]

在每次执行 org-redisplay-inline-images 时候检查 presentation.pptx 修改的时间戳,如果相比上次有修改, 就去调用 preview-command 把第三页重新转成 jpg ,更新 cache 里的图片预览并且显示出来 (每个预览用文件名 hash 之类的对应上)

点击链接的话还是遵循 find-file/org-open-at-point 之类的打开外部程序的接口

2 个赞

我在尝试实现一个把 ppt 某一页转成图片并且显示在 org 里的功能,发现坑比较多,我以为会有现成的工具直接指定某一页就能进行转换,但在 linux 上一般还得用 libreoffice 把 ppt 转成 pdf, 然后再用别的工具把 pdf 转图片,请问你用什么方式来把 pdf 做成图片的?有推荐的话可以少踩点坑

抱歉才看到,我相关的逻辑是这么写的,如果你还需要的话:

(unless (file-exists-p image-path)
  (shell-command-to-string
   (format "pdftoppm -png -f %s -l %s %s %s%s" n n pdf-path image-path-dir pdf-name)))

没关系的,谢谢!我先试试

有些冒昧问下, excalidraw, 我用 docker 装在 局域网的群晖上了, 可正常使用, 不知现在有用

org-excalidraw 吗, 能否 把配置中 关于 org-excalidraw 的配置, 让我学习下吗