Evil eval

lisp中的eval和C中的goto一样,都被人强烈建议不要使用。奈何咱水平有限,也只好evil一把了。

都是为了做单元测试,emacswiki上逛了一圈,没发现什么好用的,文档也有限,看看人家的代码不长,索性自己写一个吧,几个函数加一个macro搞定,只是用了eval。有了单元测试,写起代码来底气十足,再也不会像以前那样补了东墙弄倒西墙。尽管看common lisp的书要多一些,但代码还是写emacs lisp多。代码写得多了发现很多功能很容易实现,越写越想写,一天下来,几乎精疲力尽,其它的事情都不想做了。

写lisp程序真的很容易上瘾。

Define mode-map before mode definition

在Intel的时候写过一个简单的emacs mode,这次又写了一个。和前一个一样,都是用来显示编译器打印出来的中间语言,不过这次的要复杂一些,除了高亮、光标定位之外,还有narrow、以及自动生成控制流图等(用dot)。

写得过程中发现一个问题,即define-derived-mode要在定义mode-map的语句之后,如:

(defvar foo-mode-map ...)
(define-derived-mode foo-mode ...)

否则keybinding为空!因为define-derived-mode如果发现mode-map没有定义,就会自动定义一个,而后面的defvar在发现mode-map已经定义,就不会再赋值了。