emacs23 の daemon mode
emacs23 から emacs を daemon 化できるようになりました.
emacs22 でも起動時に (server-start) などとしておくとemacsclient を使用して既に起動している emacs に接続することができましたが"emacs --daemon" などとすると background で起動することができます.
そんな訳でイロイロ仕込んでみました.
既に emacs server が起動している場合には server-start しない
.emacs あたりに
(require 'server) (unless (server-running-p) (server-start) )
と書いておくと良いでしょう.
X 起動時に emacs を daemon として起動する.
例えば .xsession なんかに
emacs --daemon &
などとしておくと, X 起動時に emacs が daemon として起動します.
Gnome や XFce4, KDE などの場合は ~/.config/autostart/emacs.desktop を作成して
[Desktop Entry] Encoding=UTF-8 Version=23 Type=Application Name=emacs(daemon) Comment=emacs -- daemon mode Exec=emacs --daemon StartupNotify=false Terminal=false Hidden=false
とか書いておくと良いかもしれません.daemon として起動した際の出力が .xsession-errors に残るので,個人的には .xsession から呼び出す方が好きです*1.
また個人的に skk の sticky-shift を使いたいので, 以下の様な emacs-daemon という shell script で daemon を起動します.つまるところ uim-skk を無視しています.
#!/bin/sh XMODIFIERS="@im=none" GTK_IM_MODULE=none export XMODIFIERS GTK_IM_MODULE exec /usr/bin/emacs --daemon
emacsclient の設定, terminal 編
emacsclient に --tty を指定すると, そのターミナルでクライアントを起動できます.例えば, 以下の様な shell script で emacsclient を起動します.
#!/bin/sh XMODIFIERS="@im=none" GTK_IM_MODULE=none TERM=screen-256color-bce export XMODIFIERS GTK_IM_MODULE TERM exec /usr/bin/emacsclient --tty "$@"
TERM の設定は 256 色表示するためのモノです.
emacsclient の設定, X-Window 編
emacsclient に -c を指定すると X(正確には frame) で起動します.しかしながら, このままでは前回行なったフォントの設定が有効になりませんでした.
これは .emacs 内でフォント設定のファイルを
(if (eq window-system 'x) (if (>= emacs-major-version 23) (load "~/.emacs.d/init/init-antialias.el") (load "~/.emacs.d/init/init-frame.el")) )
として読み込んでいるためでした.つまり daemon として起動した際には (eq window-system 'x) が t ではないから,フォント設定のファイルを読みに行っていないわけです.emacsclient には lisp を評価する -e|--eval というオプションがあるので,emacsclient --eval '(load "~/.emacs.d/init/init-antialias.el")' などとしてフォントと色の設定を読みに行かせることにしました.
そんな訳で, 以下の様なシェルスクリプトで emacsclient を起動します.XMODIFIERS と GTK_IM_MODULE は ry)
#!/bin/sh XMODIFIERS="@im=none" GTK_IM_MODULE=none export XMODIFIERS GTK_IM_MODULE exec /usr/bin/emacsclient -c "$@" -e \ '(load "~/.emacs.d/init/init-antialias.el")'
その他イロイロ
client の停止は, これまでは C-x # でしたが C-x 5 0 になります*2.
daemon の停止は例えば以下の様な shell script でやります.
#!/bin/sh exec /usr/bin/emacsclient -n -e \ '(progn (dolist (f (cdr-safe (reverse (frame-list)))) (delete-frame f t)) (kill-emacs))'
他には, (eq window-system 'x) が t の場合の色設定を幾つかやっているので,frame を上げて起動した時に偶に色が変になりました(skk のカーソルの色とか).これは気がついた時に弄ることにします.