用 server client mode 執行 emacs

emacs 可以用 server client 方式執行,可以加快速度。 意思是有一個 emacs server,執行 client 時是連上該 server, 並在該 server 開啟該檔為一個 buffer。 和我之前想要的命令 在已開啟的 emacs 中編輯 有 87 成像。 以下簡介一下可能需要的 config。

具體作法是先開啟一個在背景執行的 emacs --daemon, 之後要連上去要用 emacsclient-c 選項會開啟一個新 frame,否則要指定檔名; -nw 選項是指定在 terminal 中,不然預設會開啟 gui。 至於 client 和 daemon 是怎麼發現彼此的, 對我還是個謎 @@

user 的 systemd

用 systemd 是想把 emacs daemon 掛到 systemd 下, 變成一個獨立的 service,可以自動啟動, 也不會因為 terminal 關閉就結束。

之前就折騰過 user 的 systemd,一直沒有成功。 之前都放到 ~/.config/systemd/user/ 裡而已, 忘了 enable,而且還要加 --user 參數。

所以就是創一個 js dotEmacs('emacs.service'), 我是從 EmacsWiki 上抄來的, 那時候還想要不要改成 emacs-daemon.serviceemacs-server.service, 但考量 emacs wiki 都這樣寫了,為了通用性就不要自己多做怪。 然後放到 ~/.config/systemd/user/ 裡, 再 systemctl --user enable emacs 即可。

GUI 可以用了

之前就想用 gui 下的 emacs,因為可以通 x-window 的剪貼簿很方便。 而且還可以用很多只有 gui 下能用的功能,像全色彩、任意字體大小等。

但之前一直遇到的問題是字體大小會變小, 我在 js dotEmacs('init.el#L173') 裡寫 (set-face-attribute 'default nil :height 200) 。 但 gui 的 emacs 會無視我設的字體大小,會自己再調一次大小。

現在用 daemon 啟動 emacs 後, 再用 emacsclient 連上就是設好的, 而且 daemon 好像沒在分 gui 或 cli 的, 都是同一個,只要在連上去時指定就好。

從 gui 或 cli 啟動

本來我是習慣在 cli 用 emacs, 現在改成 gui 就把 bashrc 裡的 alias 改了。

#alias emacs="emacs -nw"
alias ec="emacsclient -nw"

要在 cli 可以用 -nw-t , 但 nw 和 emacs 原本的選項一樣, 而 t 在 emacs 是不同的意思,為了統一就用 nw。

目前 EDITOR=vi 還是沒變,不確定要不要改成 emacsclient -nw, 畢竟 vi 已經很好用了,很多時候會用到 EDITOR 只是要稍微改一下而已。

另外還有一個變數是 VISUAL,好像是指定 gui 編輯器, 可以指定成 emacsclient。但目前是沒有設定。

桌面 icon

上面在 cli 下的指令都是直接啟動 cli 的 emacs, gui 的 emacs 當然是要從 gui 啟動啦。 於是就在應用程式 menu 裡加了一個 emacsclient 的 entry。

原本的 menu 只有 emacs gui 和 emacs cli 二種, 我也 google 不到把 emacsclient 加進 menu 的文章, 只好看著其它的 menu 自創。

創建 js dotEmacs('emacsclient.desktop'), 放到 /usr/share/applications 下, 按 meun 的時候就會出現了。

都不用其它指令,有點神奇, 這構造也太簡單了 @@