ラベル eli の投稿を表示しています。 すべての投稿を表示
ラベル eli の投稿を表示しています。 すべての投稿を表示

2009年9月10日木曜日

eli の使いこなし [起動済みのLispにEmacsを接続]


  • まず localhost 上。
  • Lisp にて

    (excl:start-emacs-lisp-interface t 1 7666 "~/.eli-startup")

    を評価。すると~/.eli-startup というファイルができる。
    このファイルの中身は、

    ^A7666 542496 :upper (8 (1) :FINAL 7) 1^A

    というシンプルなもの。Emacs に渡す接続情報である。
  • 次に、Emacs で、

    (fi:start-interface-via-file "localhost" "*common-lisp*" "~/.eli-startup")

    を評価。これでREPLが立ち上がる。メジャーモードは、TCP Common Lisp モード。このモードは、keymap は fi:lisp-listener-mode-map を使っている。

  • この方法で接続した場合も、fi:common-lisp-mode で開いたソースファイルとの連携ができる。
  • "localhost"をFQDNまたはIPアドレスに変更すれば、リモートの Lisp に接続できる。ただし起動情報ファイル(ここでは.eli-startup) をEmacsがあるホストで参照できるようにしておくこと。これは、ファイルを転送してもいいし、NFSやsambaで共有してもよい。
  • この方法で、複数 Lisp に単一 Emacs からREPL接続することができる。ただし、fi:common-lisp-mode で開いた Lisp ソースと連携するのは一番最後に開いた REPL だけ。
  • listenerを増やすことができるのも、一番最後に開いた REPL の Lisp だけ。

  • この方法で、2つ以上の Emacs をひとつの Lisp につなぐこともできる。そのときも、

    (excl:start-emacs-lisp-interface t 1 7666 "~/.eli-startup")

    これは一個でよい。

  • さて、

    (excl:start-emacs-lisp-interface t 1 7666 "~/.eli-startup-1")
    (excl:start-emacs-lisp-interface t 1 7667 "~/.eli-startup-2")

    として、それぞれに別の Emacs をつなぐこともできる。ただし、

    (excl:start-emacs-lisp-interface t 1 7666 "~/.eli-startup")

    これひとつに2つの Emacs をつなぐのと、機能上の違いはない。:processes 的には、Editor Server が2つできるので違いはある。

  • こうしてみると、かなり自由自在というか柔軟なんだな。

時間ができたときに、整理して 逆引きCommon Lisp に書こう。
こつこつ。

2009年9月7日月曜日

eli の使いこなし [fi:common-lisp によるリモートLispの起動]


  • これ、M-x fi:common-lisp の引数指定で ホストを指定してあげればよいだけなのですが、うまく起動できない。
  • ソースを調べてみると、どうやら ssh ではなく rsh 専用になっているようだ。
  • eli のためだけに、ssh とは別に rsh を運用するというのはちょっと避けたい。
  • リモート Lisp は fi:start-interface-via-file に一元化かな。

こつこつ。

eli の使いこなし [複数listener]


  • fi:common-lisp で REPL を起動済みなことが前提。
  • M-x fi:open-lisp-listener で対話的に新しい listener を起動できる。このときバッファ名は、*lisp-listener* になる。
  • M-x fi:open-lisp-listener を使ってさらに listener を起動するのはやめたほうがよい。この方法の場合、事前に作成した listener のバッファ名を *lisp-listener* 以外に変更しておいて、M-x fi:open-lisp-listener を実施することになるが、このバッファ名の変更が、Common Lisp に伝わらないからだ。

  • 2つ以上新規に listener を起動する場合は、対話的ではなく、

    (fi:open-lisp-listener -1 "*my-lisp-listener*")

    などを評価する方がよい。-1 は buffer-number という引数だが、Gnu Emacs 22 の Info では記述されていない。負数を設定すると自動的に空き番号を使うとのことなので、負数運用がいいのかもしれない。
  • fi:open-lisp-listener で起動した REPL はfi:inferior-common-lisp-mode ではなく、fi:lisp-listener-mode である。

  • さて、listener は プロセスとどういう関係があるのかというと、まず listener を増やしても、OS上の alisp のプロセスは増えない。Common Lisp 内のスレッドが増える。
  • listener を終了するときは、:kill で Common Lisp の内部スレッドを停止する。
  • どの listener においても、:exit すると、全ての listener というか Lisp 本体が停止してしまう。


時間があるときに、整理しながら逆引きCommon Lispに書こう。
こつこつ。