Emacs Lisp 模式下 If 缩进出问题

File / Dir Local variable 就是用来协同作业的吧,记得以前代码常常会加上两行:

/* -*- mode: c++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ 
/* vim: set ts=2 et sw=2 tw=80: */ 

.dir-locals.el 可以写更多,把缩进规则一条一条加进去,但冒号关键字缩进似乎无法简单通过配置来解决。

前面用的那个缩进函数偶尔还是会出错:

(foo :a
  1
  :b
  2
  :c
  3)

而且这个函数看起来挺复杂,我干脆自己写了一个 lisp-keyword-indent 包,用来应对:&关键字的缩进,也实现了#13楼的锯齿效果。代码总量比单个函数略有增加,但是可配置,自己看得懂,容易扩展。


UPDATE

我错了,目前我的代码其实比那单个函数较少,逐步完善之后应该会超过。