My first common lisp program

已经不记得自己第一个Perl程序是什么样子了,更不用说第一个C++程序了。那个时候,还没有什么版本控制概念,当然也没有自己的网站。哪像现在,是个东西就想塞进subversion里。

我的一个common lisp程序是一个推箱子游戏求解程序,参见http://www.wanglianghome.org/svn/pushbox/。不用等到几年后再回过头来看,现在我就知道这程序写得相当烂,尽管居然还有40多个单元测试。But it works! 🙂

这个程序还有相当多应该改进的地方,不断完善的过程,也是我不断提高编写common lisp程序水平的过程,就用它来做个见证吧。

select-gud-interaction-window

最近尝试在Emacs里面调用gdb调试程序,使用了gdb-many-windows这个特性,一个frame上开5个window(参见截图)。窗口多了切换便成了问题,很快就放弃使用C-x o,而用了鼠标。而来发现可以使用windmove,只要在.emacs文件里面加上:

(windmove-default-keybindings)

然后就可以使用Shift加方向键来移动光标到不同窗口。然而,好多快捷键只有当光标在GUD interaction buffer时才有效,我就写了一个命令,并绑定在F9上,一键返回GUD interaction buffer所在的window。

(defun select-gud-interaction-window ()
  (interactive)
  (if (and (boundp 'gud-comint-buffer)
	   gud-comint-buffer
	   (window-live-p (get-buffer-window gud-comint-buffer)))
      (select-window (get-buffer-window gud-comint-buffer))
    (message "GUD interaction window is inactive")))

(define-key global-map [(f9)] 'select-gud-interaction-window)

更多emacs配置参见我的.emacs文件