剛看見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打開鼠標支持