歡迎您光臨本站 註冊首頁

讓 Emacs 飛起來

←手機掃碼閱讀     火星人 @ 2014-03-12 , reply:0
  

許多憎恨 emacs 的人往往不是因為它的功能太強大了,而是因為它啟動太慢。我曾經玩過一個字元界面的遊戲——Word War vi, 內容就是諷刺 Emacs 是內存怪獸的。估計 emacs 忍氣吞聲已經很久了。終於有一天,emacs 23 實現了一個有些笨拙的伺服器模式——使用 M-x server-start 啟動伺服器,然後使用 emacs-client 進行連接——讓它的 fans 們和機器可以輕鬆那麼一下了。然而,真正讓 emacs fans 們揚眉吐氣的是去年 9 月(也許是 8 月,也許是 10 月,反正我不是考古學家)實現的 daemon 進程,它讓 emacs 飛起來了。如果你也與我一樣對此後知后覺,那麼不妨來看這篇文章。

 

試飛

首先編譯最新的 emacs 23 版本,不會編譯就問 google。如果是 gentoo 用戶,emerge 安裝 emacs-cvs-23.0.93 即可(如果你高興也可以用 9999 版本)。

有了 emacs 23 之後,在終端里執行:

$ emacs --daemon

這樣就啟動了 emacs 的守護進程。

然後,使用:

$ emacsclient -c [your-file-name]

可以在 emacs 的圖形界面中打開你的文件。

使用:

$ emacsclient -t [your-file-name]

可以在 emacs 的終端界面中打開你的文件。

要關掉 emacs 的守護進程,可以 pk 它: 

$ pkill -n emacs

也許會飛不起來

emacs 23 自從支持 xft 字體后,大家都不再為配置字體而煩惱了。很多人可能會在 .emacs 文件中填寫了類似下面的字體設置語句:

(set-default-font "Courier Std-11")
(set-fontset-font (frame-parameter nil 'font)
                    'han '("AR PL UMing CN"."unicode-bmp"))

很不幸,只要 .emacs 文件里有這樣的語句,會導致 emacsclient 程序無法正確運行。具體原因請閱讀 http://www.linuxsir.org/bbs/thread350246.html。 大概原因就是 .emacs 文件中有關界面和字體的配置沒有在 emacsclient 運行的時候被載入。解決方案是利用 emacs 的一個 hook 函數 after-make-frame-functions。我這裡把這個函數的殼子貼出來,飛不起來的同學可以嘗試將有關界面和字體的配置代碼填寫進去。

(add-hook 'after-make-frame-functions
          (lambda (new-frame)
            (select-frame new-frame)
            ;; ->在此填界面和字體的配置
))

我的做法是將字體配置語句封裝在一個函數里,然後再填寫到 after-make-frame-functions 函數中,另外將有關工具條和滾動條(界面配置)禁止配置也寫到該函數中。例如:

;; 設置字體的函數
(defun my-default-font ()
  (interactive)
  (set-default-font "Courier Std-11")
  (set-fontset-font (frame-parameter nil 'font)
                    'han '("AR PL UMing CN"."unicode-bmp"))
)

;; 有關界面和字體的配置
(add-hook 'after-make-frame-functions
          (lambda (new-frame)
            (select-frame new-frame)
            (tool-bar-mode 0)
            (scroll-bar-mode 0)
            (my-default-font)
))

這樣做了之後,應當不會再出問題了。如果確實還有問題,就自我診斷一下是不是還有其它的界面和字體的配置代碼沒有移到那個函數里。

飛得更高一些…… 

老是輸入 emacsclient 命令,有些累手。為它取個別名吧。在 .bashrc 或 bash 的全局配置文件(對於 gentoo 用戶而言 /etc/profile 可以用)里寫入以下內容:

alias et='emacsclient -t "$@" -a "gvim"'
alias ex='emacsclient -nc "$@" -a "gvim"'

這樣就可以在 emacs 守護進程開啟的情況下,用 et 命令可以打開終端界面的 emacsclient,使用 ex 命令則可以打開圖形界面的 emacsclient。

如果在使用 et 或 ec 命令時,emacs 守護進程沒有開啟,則自動使用 gvim 作為替代編輯器。當然,你也可以將 gvim 換成你自己喜歡的編輯器,比如 gedit 之類。

如果按照以下方式進行別名定義,可以實現:使用 ex 或 et 命令,碰到 emacs 守護進程未有運行的時候,emacsclient 會將其啟動后再進行連接。

alias et='emacsclient -t "$@" -a ""'
alias ex='emacsclient -nc "$@" -a ""'
(責任編輯:A6)


[火星人 ] 讓 Emacs 飛起來已經有522次圍觀

http://coctec.com/docs/linux/show-post-66336.html