Environment of Cocoa Apps

最近玩 SLIME + Clojure,顺便把 Emacs 折腾了个够,然后发现一个奇怪的问题,就是在 Terminal 和 X11 下完全正常的vc-mode,一跑到Cocoa版本的Emacs.app下就不工作了。折腾了好久也没有头绪,于是发了一个问题报告去官方讨论组,一边交流一边尝试,最后终于发现问题所在:Emacs.app找不到我安装在“非系统路径”的 gitsvn。这个问题有很多方案可以解决,但是怎么做最好呢?作为对近期我很感兴趣的SNS网站,Stack Overflow的一个测试,我又在上面发了一个问题,24小时之后只有两个答案,不过都是有质量的答案。官方讨论组的记录在这里,Stack Overflow的问题在这里

感受:从我发起 gnu.emacs.bug 的讨论到最后基本解决总共是3天半,主要方法是官方讨论组、Stack Overflow以及自己摸索,我认为前两个和自己摸索各占一半的重要性。

收获:

  1. 自行编译CVS版本Emacs成功。
  2. 知道了Emacs中排错的一般方法,例如 emacs -Q 启动,M-: (executable-find "svn") 来查找外部工具等。
  3. 记起来Shell环境设置对于OS的GUI部分来说是没用的 >_<
  4. 编写了一个Ruby Cocoa的小工具来检查Cocoa环境。
  5. 彻底搞清楚了Mac OS X 10.5引进的 /etc/paths.d工作机理并据此把我原来分散的PATH设定集中了起来。
  6. 找到了Mac OS X窗口系统启动环境设置文件的位置 ~/.MacOSX/environment.plist,并把我的PATH放了进去,从而解决了Emacs.app的vc-mode问题,但是以后还要考虑这个文件如何与Shell启动配置同步的问题——有了 /usr/libexec/path_helper 应该不难了。1
  7. 在Stack Overflow混到了40+声望和5个徽章,顺便知道了Stack Overflow是Joel Spolsky投资和指导,Jeff Atwood主创的(这家伙现在专职干这个了),而且用的主要技术是.NET和jQuery

嗯,主副产品都不少啊 XD

补充更新

  1. 10/21/2008:好心的Adrian Robert先生在邮件列表补充了一个信息,原来这个问题及其解决方案早就在Emacs.app的manual中了!不过这个manual隐藏的比较深,需要 M-x ns-extended-platform-support-mode 开启NextStep扩展模式,然后才会出现在Help菜单里(或者用 M-x ns-show-manual 访问),其中的 Tips and Tricks 一节的第一条 Grabbing environment variables 就是。稍后Glenn Morris指出,这个过程可以直接使用 C-h i m NS-Emacs 来完成。
    里面详细描述了这个问题及其两个解决方案,第一个是运行Emacs.app内的程序 Emacs.app/Contents/MacOS/bin/mac-fix-env 来自动生成和更新 ~/.MacOSX/environment.plist,第二个则是利用内置的命令 ns-grabenv 来更新Emacs.app的环境变量 囧rz

2 Comments

  1. Neo

    to pluskid:

    确实,(add-to-list ‘exec-path “foo”) 也是可以的,不过 ~/.MacOSX/environment.plist 的方案更通用一些。其实我的问题主要还是,怎么能够以尽可能集约的方式一致的管理系统PATH设置——有点偏执了,最后还是先手工抄过去解决实际问题 XD

Leave a Reply

Your email address will not be published. Required fields are marked *