It's not hard to extend emacs

当有多个标签页打开时,关闭firefox会被询问“是否真的关闭多个标签页”;使用gnome-terminal也是一样,于是我就想,能不能让emacs在有多个frame存在的时候也询问类似的问题。写出来之后发现,还真简单:

(defun multiple-frames-kill-emacs-query-function ()
  "Ask before exiting Emacs if it has more than one frames."
  (let ((frames (length (frame-list))))
    (if (= frames 1)
	t
      (let ((msg (format "%d frames exist; exit anyway? " frames)))
	(yes-or-no-p msg)))))

(add-to-list 'kill-emacs-query-functions
	     'multiple-frames-kill-emacs-query-function)

实现了这个功能后就想,emacs有没有会话保存、恢复功能呢?找了找,发现已经有了,就是desktop-save,尽管不是emacs里面的所有东西都能保存(比如gnus就不行),但是打开的文件都没问题。

最近尝试着写了一些emacs lisp代码,自我感觉是件挺好的事情,只有不断地实践,才能学好一门语言。

Apply customized default face to new frame

试用了带unicode和multi-tty的cvs emacs,感觉很不错,唯一的遗憾是后来创建的frame并没有使用自定义的face,而是使用了缺省的face。这应该是个bug,解决方法是在.emacs里加上这么一句:

(set-face-attribute 'default t :family "Liberation Mono" :height 170)

需要注意的是字体高度一定要是10的整数倍,不然显示新的frame会非常慢,先要闪好多次。