Mercurial > hg > RemoteEditor > emacs
changeset 59:04eb9d562e60
*** empty log message ***
author | gongo |
---|---|
date | Wed, 27 Aug 2008 17:50:17 +0900 |
parents | 4d087b06929a |
children | f0a30adf13de |
files | ChangeLog |
diffstat | 1 files changed, 44 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/ChangeLog Wed Aug 27 17:29:27 2008 +0900 +++ b/ChangeLog Wed Aug 27 17:50:17 2008 +0900 @@ -1,5 +1,49 @@ 2008-08-27 Wataru MIYAGUNI <gongo@cr.ie.u-ryukyu.ac.jp> + * thinking: + テスト用SMGUIを使って、二つのSessionを立ち上げてみた。 + + / B (test.c) + A + \ C (hoge.c) + + B と C がそれぞれ Session を立ち上げ、A が両方に join した。 + A が test.c バッファを開いている時に C が入力しても、 + ちゃんと A の hoge.c バッファ に書き込まれているのは確認した。 + と思ったけど、やっぱり少し問題があった。 + + process-filter 内で、remove-hook している。 + これは、before/after-change-functions を呼ばれないように、 + つまりは受け取ったパケットの処理でバッファが編集されても + その編集に対しては REPcommand を生成しないようにするためです。 + + それはいいんだけど、問題が少しあります。 + + 1. A が B のバッファを開いている + 2. C が送信した + 3. A が受け取って remove-hook をかける (しかし、B のバッファのみ) + 4. REPcommand 解析により、C のバッファに書き込む + 5. C のバッファには remove-hook が掛かっていないため、 + その編集が REPcommand 生成され、C に送られる + 6. C はポカーン + + ってことだ。add-hook,remove-hook の 4つめの引数に nil 以外を設定すると + 「この hook はカレントバッファにのみ適用されるYO」って意味なわけだ。 + だから上の問題が起きたわけ。 + じゃあどうすればいいかって、nil を設定(省略)すればいいわけ。 + しかしそうなると全てのバッファに対して hook がかかる。 + まあこれでいいんじゃないかってのもあるけどね。 + + SessionManager に接続しているバッファ(上でいうhoge.cとかtest.c)の確認は + redit-sinfo-get-buf2sinfo で nil 以外が返ってくればいい。 + nil が来るってことは、そのバッファ(名)は登録されていないわけで。 + なので、before/after-change-function の時は、 + 現在の buffer が登録されているかを確認して、そうでなければ + 何もしないってコードをいれるだけでおk。だと思う。 + 全てのバッファに対してこの確認が入るので、そこらへんのコストが + どれだけの物かわからないけど、あるバッファへの hook の管理をするよりは + 楽だし、案外軽いかもしれない。わからんけどね。 + * redit-client-sm.el (redit-client-after-change-function): 下の変更により、ここでは SessionInfo から prev を取得している