gnuservを自動で再起動させる方法
俺はEmacs23になってもいまだにgnuserv/gnuclientを使っている。しかし、なにかのひょうしでgnuservが落ちて「Gnuserv process exited; restart with `M-x gnuserv-start'」と出てきてしまい、落ちたままになっている。そうなると、gnuclientが動かなくなり、とても困ってしまう。
メッセージを表示している関数がgnuserv-sentinelだと判明し、読んでみたところ、「以前は落ちたら自動的に再起動していたが、下手すると無限ループする可能性がある」と書いてあった。
かといって、落ちたまま放置しているといろいろ困るので、せめて「gnuservが落ちているなら立ち上げる」関数を1分毎に動かすことにした。
(defun gnuserv-start-maybe () (interactive) (or gnuserv-process (gnuserv-start))) (run-with-timer 0 60 'gnuserv-start-maybe)
gnuserv/gnuclientとemacsserver/emacsclientの違い
俺は昔からgnuserv/gnuclientを使ってきたが、Emacs23になったら、multi-ttyもあることだし乗り換えようと思っていた。しかし…カレントバッファが常にサーバのバッファで実行されるため、「現在の」カレントバッファを取得してくれない。
Emacs23だとmulti-ttyがあるから仕方ないのかな。
$ emacsclient -e '(current-buffer)' -n #<buffer *server*> $ gnudoit '(current-buffer)' 2009-09-29.txt
さらに、出力の表記も微妙に異なる。
$ emacsclient -e '"a"' -n "a" $ gnudoit '"a"' a
なお、gnudoitは「gnuclient -batch -eval」の略だと考えてよい。実際はシェルスクリプトである。