用文学编程写 Emacs 配置文件

文学编程(Literate programming)由高德纳提出一种编程方法——用写文字作品一样的方式来表达代码逻辑。

这种方式尤其适合写 Emacs 配置文件——如果你的配置文件杂乱无章。它比单纯的注释更好——更易读、内容更丰富,并且内容的逻辑性更强。配置文件最终不再是单纯的配置文件,同时也是一篇表达你定制 Emacs 想法的文章。

Emacs 里靠 Org mode 就可以轻松把配置文件写得像一篇文档一样,只要两个步骤:

1、在 Emacs 配置文件(~/.emacs.d/init.el)中加入:

(require 'org)
(org-babel-load-file "~/.emacs.d/startup.org")

2、像写文档一样写编写 ~/.emacs.d/startup.org,比如截取我的其中一部分内容:

* 包管理配置
Emacs 首先加载配置文件(~/.emacs 或 ~/.emacs.d/init.el),然后再加载 ELPA,但配置文件中依赖 ELPA,所以配置文件中手动加载:

#+BEGIN_SRC emacs-lisp
  (setq package-enable-at-startup nil)
  (package-initialize)
#+END_SRC

使用三方的软件源,有更丰富的插件:

#+BEGIN_SRC emacs-lisp
  (setq package-archives '(("gnu" . "http://elpa.gnu.org/packages/")
                           ("marmalade" . "http://marmalade-repo.org/packages/")
                           ("melpa" . "https://melpa.org/packages/")
                           ("melpa-stable" . "https://stable.melpa.org/packages/")))
#+END_SRC

背后的原理:

首次启动 Emacs 时:

  1. 通过 org 库的 org-babel-load-file 函数加载 startup.org 文件;
  2. 提取 #+BEGIN_SRC emacs-lisp ... #+END_SRC 之间的 Emacs Lisp 代码;
  3. 把提取的代码写到 startup.el 中。

下次启动时,先检测 startup.org 内容有无变化,无变化就直接加载 startup.el 内容;否则重复以上步骤。

更多的参考,不妨去 GitHub 搜索“org-babel-load-file”,看看别人是怎么写。