用 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.service
或 emacs-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 的時候就會出現了。
都不用其它指令,有點神奇,
這構造也太簡單了 @@