写了两个 elisp 函数

第一个:

(defun c-header (project module)
  "Insert some macro to prevent the header file included multiply"
  (interactive "sWhat's the project name? \nsWhat's the module name? ")
  (let ((p (upcase project)) (m (upcase module)))
    (insert (format "#ifndef %s_%s_HEADER\n" p m))
    (insert (format "#define %s_%s_HEADER\n\n\n\n" p m))
    (insert (format "#endif /* %s_%s_HEADER */\n" p m))
  )
  (let ((l (- (line-number-at-pos) 3)))
    (goto-line l)))

用于自动生成类似这样的 C 语言头文件代码:

#ifndef PM_POINTS_HEADER
#define PM_POINTS_HEADER



#endif /* PM_POINTS_HEADER */

第二个:

(defun gobject-macro (project object)
  "Insert some macroes about gobject"
  (interactive "sWhat's the project name? \nsWhat's the object name? ")
  (let ((P (upcase project)) 
	(O (upcase object))
	(p (downcase project))
	(o (downcase object))
	(pp (capitalize project))
	(oo (capitalize object)))
    (insert (format "#define %s_TYPE_%s (%s_%s_get_type ())\n" P O p o))
    (insert (format "#define %s_%s(object) (G_TYPE_CHECK_INSTANCE_CAST((object), %s_TYPE_%s, %s%s))\n" P O P O pp oo))
    (insert (format "#define %s_%s_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), %s_TYPE_%s, %sClass))\n" P O P O pp oo))
    (insert (format "#define %s_IS_%s(object) (G_TYPE_CHECK_INSTANCE_TYPE((object), %s_TYPE_%s))\n" P O P O))
    (insert (format "#define %s_IS_%s_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), %s_TYPE_%s))\n" P O P O))
    (insert (format "#define %s_%s_GET_CLASS(object) (G_TYPE_INSTANCE_GET_CLASS((object), %s_TYPE_%s, %s%sClass))\n" P O P O pp oo))))

用于生成类似这样的 GObject 类型宏:

#define PM_TYPE_POINTS (pm_points_get_type ())
#define PM_POINTS(object) (G_TYPE_CHECK_INSTANCE_CAST((object), PM_TYPE_POINTS, PmPoints))
#define PM_POINTS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), PM_TYPE_POINTS, PmClass))
#define PM_IS_POINTS(object) (G_TYPE_CHECK_INSTANCE_TYPE((object), PM_TYPE_POINTS))
#define PM_IS_POINTS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), PM_TYPE_POINTS))
#define PM_POINTS_GET_CLASS(object) (G_TYPE_INSTANCE_GET_CLASS((object), PM_TYPE_POINTS, PmPointsClass))

在 GNOME 中为 Emacs 交换 Caps 与左 Ctrl 键

用 Emacs 要注意保护左手小拇指……

为了保护左手小拇指,很多人在打调整 Caps 键与左 Ctrl 键的主意,参见:http://emacser.com/capslock.htm

对于 GNOME 用户而言,调换 Caps 键与左 Ctrl 键实际上是件很容易的事情(至少在 GNOME 2.30 中如此),方法是打开“系统->首选项->键盘”的设置对话框,按下图所示进行调整:

Emacs 23 需要两款字体的支持

昨天,又遇到在 Emacs 23 中无法启用 ibus 的情况。

Gentoo Portage 里给出了这样的提示:

You need to install some fonts for Emacs.
Installing media-fonts/font-adobe-{75,100}dpi on the X server's
machine would satisfy basic Emacs requirements under X11.
See also http://www.gentoo.org/proj/en/lisp/emacs/xft.xml
for how to enable anti-aliased fonts.

发现 Emacs 还真变态。现代一点的文本编辑器有哪个还需要跟字体勾结在一起呢?