Emacs图表优雅的解决方案

在搞js环境的时候我就说过,Emacs在解决实际问题时,很多时候都是作为"前端"工具出现的。即解决问题的核心工具是一个独立的程序,而Emacs作为一个交互工具,收集用户的输入,反馈其他程序的输出。这样做的好处是:

  1. 核心功能的开发与面对用户的UI分开,开发人员能更专注于功能的实现。
  2. 利用Emacs的流行性与其强大的可扩展性,低成本高效率的开发出可供使用的界面。
  3. 核心功能由于其独立平台的特性,可以方便的与其他需要与其交互的程序实现对接。

这个方案的大概结构是这样的:

     +-----------------+
     |   ditaa         |
     |                 |      backend
     +-----------------+
----------------------------
     +-----------------+
     |   artist-mode   |
     |                 |      frontend
     +-----------------+

这个图的源代码是这样的:

#+begin_src ditaa :file ../static/20170826-emacsChart-1.png
       +-----------------+
       |   ditaa         |
       |                 |      backend
       +-----------------+
  ----------------------------
       +-----------------+
       |   artist-mode   |
       |                 |      frontend
       +-----------------+
#+end_src

可以看到ditaa 是这个方案的核心存在。而其前端交互使用的是Emacs内置的artist-mode,可以简单的绘制出文本状态的框图。更幸运的是,ditaa已经集成进了org mode。所以不需要任何额外的安装就可以直接在org mode中使用其导出功能。唯一需要配置的语句:

(org-babel-do-load-languages
 'org-babel-load-languages
 '((ditaa . t)))

此时,只要在org mode中加入

#+begin_src ditaa :file some-file-name.png
...
#+end_src

在导出org mode的时候,就会自动将框图导出成png文件保存在指定的路径。

至于例子以及转换的规则,请参照视频以及ditaa的文档,这里不做赘述。


License: CC BY-SA 4.0

Contact