Mercurial > hg > RemoteEditor > vim7
view src/REPNOTE.txt @ 30:bf9fabc0ae84 almost-works
*** empty log message ***
author | kono |
---|---|
date | Tue, 28 Oct 2008 01:42:44 +0900 |
parents | ef6d2a18d7c2 |
children | 8d4ffb7c9f4e |
line wrap: on
line source
Tue Oct 28 01:28:47 JST 2008 まぁ、一応、それっぽくはなって来たかな。 readが0を返す場合と、-1を返す場合がある。0の場合は、 selectの関係があるので、close()しない方が良いと思う。 SessionManagerが死ぬと、read() で無限ループに入ってしまう。 Tue Oct 28 00:40:44 JST 2008 mode change の最初のml_replace で、delete command が出てない。 prevline==-1 のcheckのせいだった delete command のasserttion がfailすることがある。 assert del_cmd==0 は正しくない ml_append 複数行(n) appendすると、prev_line_flushが xtr=1 で複数回呼ばれ rep_register では、xtr=n となる。 ml_delete 複数行(n) deleteすると、prev_line_flushが xtr=-1 で複数回呼ばれ rep_register では、xtr=-n となる。 Mon Oct 27 15:53:19 JST 2008 直せば直すほど、動かなくなってくる。joinのsessionが変らしい。 Sun Oct 26 21:45:49 JST 2008 なんか、でたらめな感じ... そもそも、コマンドがちゃんと 読めてない? command を読み込む時に、 三回も malloc して、しかも、 一回は、free してない。 Sun Sep 7 20:18:14 JST 2008 ml_replace 文字のinsert の時には毎回呼ばれる 文字のdeleteの時には、最初の一回しか呼ばれない ml_append 行のopen の時に一回だけ呼ばれる 複数行appendしても、一回ずつ呼ばれる ml_delete 複数行deleteしても、一回ずつ呼ばれる changed_common これらが呼ばれて変更があった時に呼ばれる 複数行の変更は一回にまとめられて、変更行数がxtraに入る というわけなので、以下のようなアルゴリズムになると思われる ml_* で、prev_line_flushを呼ぶ。 prev_line とcurrent lineを比較して異なっていたら、 insert されているdelete commandがあったらキャンセルする 溜っているのは、changed_commonのreplaceのケースのみ prev_line をcurrent lineに設定して、 delete の場合は、DELETE_CMDとして現在の行をセーブして終了 ml_deleteは1行毎に呼ばれる 送ってしまっても構わない append の場合は何もしない 最後にまとめてchanged_common でINSERT_CMDを発行すれば良い` あとはreplaceの場合となる 既にprev_lineがsaveしてあったら何もしないで終了 文字のinsertの場合 そうでなかったら、current lineを DELETE_CMD としてセーブする 最初のreplaceの場合 changed_common で、 xtra < 0 の場合は何もしないで溜ったコマンドを送信 ml_delete の分だけDELETE_CMDが送信される (送ってなければ) xtra > 0 の場合は、INSERT_CMD を行数の分だけ送信 xtra == 0 の場合は、INSERT_CMD を送信して、 現在行をDELETE_CMDとしてセーブ (ml_replace は文字の削除では呼ばれないので、ここでセーブする必要がある)