gnuclient(emacsclient)が便利って話とESSのこと

先日の読書会でRのfix(),edit()などを使うときのエディタが指定できるということを知った(というか外部のエディタが立ち上がるのだということを初めて知った)のだけれど,手元のESSだと"gnuclient.exe"というものがデフォルトになっていて,しかもそのままだと使えなかったのでちょっと調べていた.結局,ESSを使う限りはあまり役立たない(fix()やedit()を使う必要性がそもそもほとんどない)ということが分かった.ただgnuclientは便利だって分かったし,他にもいくつか学んだので一応メモ.

gnuclient, emacsclient

Meadow(Emacs)は普通に使ってれば起動がすごく重いエディタだと思う.だから一旦立ち上げたMeadowはそのままにして,新しいファイルは全部その立ち上がってるMeadowで開いてしまいたい..txtをダブルクリックで開くような場合にも既存のMeadowの中で開いてほしい…
というような願いを叶えてくれるのがgnuclientやemacsclient.2つの違いはよくわからない.
手元のMeadow 3.00はNetinstallでインストールしたヤツだけど,emacsclientは既に入っていた.
gnuclientについてはNetinstallerからパッケージのgnuservをインストールすると入る.おそらく/Meadow/binにgnuclient.exeとかgnuclientw.exeとかが入ってる.このgnuclientw.exeをテキストファイル等に関連付けしておくとかしておいて,gnuclientw.exeからファイルを開くと既に開いているMeadowの新しいフレームとしてファイルが開かれる.
ついでに環境変数を設定しておくとさらに便利になる.GNUCLIENTに-Fを指定しておくとgnuclient(w)で開いたときMeadowがフォアグラウンドになり,RUNEMACSにRunMW32.exe(パスが通ってない場合はフルパス)を指定しておくとMeadowが起動していなかった場合にMeadowを起動してくれるようになる.詳しいことはhttp://shimooku.hp.infoseek.co.jp/gnuserv.htmlなどを参照のこと.
あと,.emacsに次の様に書いておくと既存のフレーム内でファイルを開くようになるのでお好みでどうぞ.

;; 新しいフレームを開かない
(setq gnuserv-frame(selected-frame))

elscreenとの連携

elscreen.elを使っているなら,elscreen-server.elを使うことでファイルを新しいタブで開かせることができる.両者ともにNetinstallerからelscreenをインストールすると入る.使用する場合は.emacs

;; 新しいタブで開く
(require 'elscreen-server)

と書いておく.これは大変快適.

ESSでアレする時

ESSからRを起動させると勝手に

> options(chmhelp = FALSE)
> options(STERM='iESS', editor='gnuclient.exe')

と実行される(環境によってはeditor='emacsclient'となるのかもしれない).
つまり,iESSモードでは既定のエディタがgnuclientになっていて,edit(),fix()を実行するとMeadow上でオブジェクトを快適に編集できる…
…ハズなんだろうけど,どうも上手く動かない.画面が一旦固まってC-gしないといけなくなったり,まともに動いている様に見えるのにエラーが表示されたり.あとelscreen-serverを使ってるとMeadowが落ちたりする.とにかく実用に耐えない.
ただ,そもそもESSを使うのであればfix()やedit()など使う必要がないだろうという意見がある.

言われてみれば確かにfix()やedit()を使ったことはない.使い道も思い付かない.関数やら何やらは.Rファイルの中に書かれているだろうし,修正したければそっちを修正すればいい.
もしオブジェクトの中身をコンソール以外の別窓に展開して眺めるのが目的なら,page()という関数もある.
というわけでESSでgnuclientを動かすのはあきらめた.
あと,ESSからRを起動させたときに実行されるoptionsのeditor='hogehoge'の'hogehoge'の部分は,R-editorという変数で制御できる.例えばedit()などを実行したときにメモ帳を起動させたいのであれば,.emacsに次のように記述しておく.

(setq R-editor "notepad")

どうしてもedit()やfix()を使うというのであれば,メモ帳とかxyzzyとか起動の早い別のテキストエディタを指定しておくと良いかもしれない.