header

2013年3月26日火曜日

emacsclientを使い始めました

最近emacsclientを使い出しました。
いい感じに動くようになったのでその時のメモ。

.bashrcや.zshrcに起動用の関数とaliasを登録

-q なしでも最初は動いていたのですが、ある日
"back to top level"というメッセージが表示されつづける不具合が出て
emacsclient難民になっていましたが、ここから 同じ問題になったときは
-q をつけるようにしてeval-bufferを使えというのをみました。
–evalオプションしても同じと思い、自分の設定ファイルを読みこむようにしました。
読み込むファイルはお好みで変えてください。

myemacsclient() {
local sexp='(load "~/.emacs.d/init")'
local emacsclient='emacsclient' #24.3.5: emacsclient.emacs-snapshot
local lang='LANG=ja_JP.UTF-8 '
local daemon='emacs --reverse --daemon -q' #24.3.5: emacs-snapshot
if ! pgrep -lf ${daemon} >/dev/null 2>&1; then
echo "start emacs daemon"
eval ${lang}${daemon} && ${emacsclient} -n -c --eval ${sexp}
else
if [ "$*" != "" ]; then
${emacsclient} -n -c $*
else
${emacsclient} -n -c
fi
fi
}

alias c="myemacsclient"

使用感

元々Emacsは起ち上げっぱなしがおおかったので、特に便利になったという感じではないのですが一度立ち上げておけば次回の起動はほぼ一瞬なので俺のEmacs超速いと錯覚できます。僕は"C-x C-c"をemacsclient用に少し変更しました。C-x C-cでEmacsを終了するけどdaemonは残す、C-u C-x C-cでEmacsとdaemonも終了するようにしました。

(when (daemonp)
(defalias 'exit 'save-buffers-kill-emacs)
(global-set-key (kbd "C-x c") 'suspend-frame)
(global-set-key (kbd "C-x C-c") '(lambda ()
(interactive)
(if current-prefix-arg
(save-buffers-kill-emacs)
(save-buffers-kill-terminal))))
;;emacsclient -cでアクセス時の設定
(add-hook 'server-visit-hook
(lambda ()
(set-terminal-coding-system 'utf-8)
(set-keyboard-coding-system 'utf-8))))

0 件のコメント:

コメントを投稿

Popular Posts

Blogger templates

Blogger news