Emacs 24.3支持cygwin上使用Win32 GUI
刚看见GNU Emacs 24.3发了第一个pretest版本(24.2.90),我从git仓库里打开NEWS看了一下,发现了这么一条:
** Cygwin builds can use the native MS Windows user interface. Pass --with-w32 to configure. The default remains the X11 interface.
哈,这正是我原来一直梦想着的特性:底层采用Cygwin的POSIX兼容层,界面采用Win32原生GUI——这在以前看到rxvt的win32原生GUI版本时就有了这个愿望。
这样有什么好处呢?
1 底层采用Cygwin的POSIX兼容层
- Emacs与shell和其它程序的交互就跟UNIX下面一样了,这样很多win32特有的兼容性问题就不存在了,比如调用一个shell命令时的引号问 题(比如悲摧的find-grep,比如M-x shell-toggle-cd里面的"cd /path/to/somewhere"和"cd /d x:\path\to\somewhere"问题);反过来,你在git/hg里面可以很方便地调用ediff和emerge来比较文件、解决合并冲突了
- cygwin有虚拟终端支持,这样你可以用M-x term来运行各类终端程序,比如bpython, midnight commander。反过来,如果用cygwin版本的Emacs,你也可以在screen里面跑emacs
2. GUI采用win32 gui
- 相对terminal版本,GUI的优势是有丰富的颜色、字体以及fringe修饰
- 相对原来的X11 GUI版本,优势是不必启动一个X11 server了
- 这个cygwin-w32版本有win32 native版本的几乎所有功能
- 可以从Windows程序(比如资源管理器)拖放文件到Emacs
- 可以使用Windows所管理的字体,也就是你不用自己再安装配置X11字体
- 可以使用<lwindow>, <rwindow>, <apps>等键,也就是说w32-lwindow-modifier等变量仍然可以设置
- 缺省打开浏览器的方法与win32 native版本和cygwin原来的设置都是一样的: browse-url-default-windows-browser
- 虽然缺省shell改成了bash (由Cygwin提供的环境变量SHELL决定),但你应该可以用(let ((shell-file-name
"cmd")) (shell))的方式来运行cmd(不过我不推荐你用(setq shell-file-name
"cmd")修改掉缺省的shell——调用很多外部程序时需要这个设置,而cmd实在是配合不好)
3. 为什么不用native win32 gui版本?
这主要是Cygwin的优势了:
从安装的方便性上来说,很多外部程序(比如find, grep, diff, git),你不用繁琐地到处去寻找win32 native port来安装了,你可以很方便地安装和使用cygwin的版本(在此推荐一下cyg-apt t, 你只要简单地cyg-apt install w3m就可以安装上w3m了。另外[url=]我也略做过改进,以支持多个repo),何况有些程序目前没有win32 native port,比如dict, sdcv
目前发现的一些小问题:
* 窗口没有图标(我发现nt/emacs.rc并没有被编译、包含进可执行文件,但手工加了一下之后,窗口还是没有图标——待有空仔细看看代码看问题在哪里)
附两张截图:
快写完的时候,邮箱收到了cygwin-announce邮件列表的通知,说是已经提供了23.2.90的测试版本,这次新增的w32 gui版本也提供了,所以你只要打开Cygwin setup.exe,选择安装emacs-w32就可以了。
如果你用cyg-apt的话,那么就是这么几步:
cyg-apt setup #第一次运行cyg-apt的话,需要用这个建立配置文件~/.cyg-apt cyg-apt update # update setup.ini cyg-apt install emacs-w32
P.S. 根据这个HAVE_MOUSE补丁,新的Emacs不需要跟X11库链接也可以在terminal下支持鼠标了(这个补丁也可以在老版本的Emacs源代码上使用)——但你还是需要在运行期执行M-x xterm-mouse-mode打开鼠标支持