Blog

编译安装了 Emacs 23

Emacs 已经成为了我的计算机上的必备软件之一。平时如果写一些规模不算大的程序,我一般都是用 Emacs (Emacs 有 ecb 可以用来管理项目,不过我还没有入门),而日常上 USENET、上 IRC 更是离不开 Emacs。记不清我在用 Linux 的时候用的是什么版本的 Emacs 了,印象里我要对中文支持进行一些设定,所以我估计当时用的是 22 版本的。很早就听说过 Emacs 23 对中文支持有了新的高度,但限于条件,我好像一直没有使用过。

到了 Mac 平台后,我刚开始不知道有什么 Mac 上运行的 Emacs 程序包,以为 Mac 上只能使用原生的 Mac 程序(我可不想在 Mac 上用 X 来运行 UNIX 软件,实在是太丑了,也不习惯),所以当初还买了 TextMate。当时我急着完成作业,急切的需要一个好的编辑器。后来我找到了一些 Mac 上可以运行的 Emacs,立刻就把 TextMate “打入冷宫”了。TextMate 的问题,除了它不支持中文外,最大的问题还是按键上还不是完全模仿 Emacs 的,有些细节的地方还不方便。而 TextMate 被广为称道的 Bundles,我在看一些 Rails 演示视频的时候看那些人用的很熟练,但后来觉得自己实在是很少有机会用到这些功能,而且那些组合键也很难记忆,所以我反而一直没有用上。

我在寻找 Mac 上可以运行的 Emacs 时试用过不少版本,开始时用的版本配置的都不是很好。尤其是 Meta 键的配置,映射的是 option 键,而 command 键则被用来当作 Mac 自带的组合键来使用,比如用 command+c 来复制等。我还不是一个“资深”的 Mac 用户,所以在用 Emacs 的时候,我更喜欢用 Meta+w 来复制,而不是用 Mac 的组合键。当时我也不知道怎么把 meta 映射到 command 键上,所以这些版本的 Emacs 都被我忽略了。后来我找到了 CarbonEmacs,一个日本人做的版本,里面包含了各种配置,其中就有我需要的 meta 键映射。另外默认的还有很多 lisp 包,比方说各种模式,用起来很方便,于是我就一直用它了。

话说对于完美的追求还是永无止境的。前几天在查 CarbonEmacs 的版本的时候,发现居然还是停留在 22 版本上。随后我也意识到似乎 CarbonEmacs 也有半年多没有更新了,于是就到它的网页上去看了看。看到了有个 2010 Edition。新的一年有了新的版本,不错。不过看了一下版本还是停留在了 22 上,而我希望的版本是 23。除了 23 > 22 这个原因之外(:-)),还有对于 Unicode 的支持也是我希望升级的原因。我印象里在 2007 年用 Linux 的时候,就有人在用 Emacs 23 了。新版本的 Emacs 对 Unicode 的原生支持,使得它不需要额外配置就可以正常的显式中文。CarbonEmacs 的多语言设置虽然好(毕竟作者是日本人),但有些偏字,比如说前总理的名字,就无法正常显式,在 23 版本中,就非常正常了。另外的原因是我想在 Mac 平台上使用 Cocoa 而不是老旧的 Carbon。于是我就搜索了 “Cocoa Emacs”,看看有没有使用 Cocoa 的 Emacs 包。

我找到了几个有二进制包下载网页,比如说 AquaEmacs 等等。不过它们都有一个问题,就是 command 键映射的不是 Meta 键。这一点让我非常苦恼。我从 CarbonEmacs 的包里面找了半天的设定,也没有找到。后来在 Emacs Wiki 上找到了不同平台上 Emacs 的安装方法,上面有在 Mac 平台下通过编译来安装 Cocoa 版本的 Emacs 的方法。通过编译可以把 Emacs 编译成 Mac 下的 .app 包,这是我希望的,而且有之前使用过 Gentoo 的经验,对于编译也没有太大恐惧感,还有本地编译的一些好处,我就尝试了一下。由于所有的 Mac 平台的硬件和软件都是统一的,所以编译安装十分容易。下载了 CVS 的代码之后,输入两条编译命令,大概20分钟就编译完成了,不会出现问题。

用惯了 CarbonEmacs 的 all-in-one 的软件,一下子上到自己编译的 Emacs 下还有些不习惯,因为很多 lisp 包都没有,需要自己安装,这让我第一次面对错误提示时有些愣神。不过等反应过来后,要解决问题也不难,少那个包就下载下来放进 site-lisp 目录里就行了,最后再 byte compile 一下也就完美了。我的 .emacs 文件不算大,里面也没有用什么偏门的包,所以都很好解决。我曾经想过像 CarbonEmacs 那样把所有的第三方 lisp 包放进 .app 目录里面,这样要想移动 Emacs,只要复制一个 .app 目录就行。后来还是放弃了,因为这样会把目录弄的很乱,而且如果在本地机器上再更换 Emacs 的话还要再把包复制到新的目录下。倒不如放进 HOME 目录下一劳永逸。

不过最关键的问题是解决 Meta 键的映射问题,从网上搜索我也找到了解决方法,这也是推动我升级的动力之一。方法就是在 .emacs 文件里面加入这么一行:

(setq ns-command-modifier (quote meta))

这之后就可以把 command 键来当作 Meta 来用了。

有了这些之后,其它的问题其实也就迎刃而解了。不过还是有些兼容性的问题是无法解决的。首先就是全屏模式在 Cocoa 下还没有实现,因此目前为止还没有任何一种方法来完成全屏显式。之前在 CarbonEmacs 下很舒服的用 Meta+Enter 来切换全屏与窗口的方式也就不行了,这让我有点耿耿于怀。不过还在它也不算什么大问题,需要用全屏的话,按两次窗口上的最大化键也勉强可以用。

还有一个大问题是字符的颜色问题。我估计可能是 Cocoa 的原因,光标落在字符上,字符并不反色显式。这一点无论是我用默认的颜色设定还是我用 color-theme 里多数的 theme 时,都让光标下的字符很难以识别。我对照了目前版本和 CarbonEmacs 的颜色设定,都是一样的,因此也不知道怎么能设定好。把 CarbonEmacs 的 color-theme 的 lisp 设定复制到 Emacs 23 上也还是一样,这让我很苦恼。我还去 #emacs IRC 组上去询问,也没有好的方法。最后通过把光标设置成闪烁模式,算是勉强解决了问题。

汉字显式可能是没有完全设定好,目前在 Emacs 23 下的斜体汉字是无法显式的,所有的斜体汉字都被用方块来代替了。我觉得通过设定应该能解决这个问题:或者让汉字不用斜体显式;或者让 Emacs 能使用斜体的汉字。但由于我日常很少让 Emacs 显式斜体的中文,所以也就没有去深究这个问题。

几天用下来,除了上述的一些小细节之外,其它的都没有什么问题。Emacs 23 确实有了一些新功能,不过总体上来说我常用的操作都没有改变,这也算是经典软件的好处了。

3 comments

  1. TextMate 2.0 出来了 | 我的空想特摄 - pingback on 2011/12/19/ 14:33
    沙发
  2. Emacs 路径 | 我的空想特摄 - pingback on 2013/03/14/ 22:02
    板凳
  3. Cocoa Emacs 23 全屏 | 我的空想特摄 - pingback on 2013/03/15/ 09:02
    地板

Leave a Reply