31
|
1 Tue Oct 28 09:57:29 JST 2008
|
|
2
|
|
3 utf-8 encoding でないと動作しないので、それをチェックした方が良い。
|
|
4
|
|
5 session は不要。session 毎に channelを開ける(現状では)必要があるので、
|
|
6 rep_T を切替える方が良いらしい。
|
|
7
|
29
|
8 Tue Oct 28 01:28:47 JST 2008
|
|
9
|
|
10 まぁ、一応、それっぽくはなって来たかな。
|
|
11
|
|
12 readが0を返す場合と、-1を返す場合がある。0の場合は、
|
|
13 selectの関係があるので、close()しない方が良いと思う。
|
|
14
|
30
|
15 SessionManagerが死ぬと、read() で無限ループに入ってしまう。
|
|
16
|
28
|
17 Tue Oct 28 00:40:44 JST 2008
|
|
18
|
|
19 mode change の最初のml_replace で、delete command が出てない。
|
29
|
20 prevline==-1 のcheckのせいだった
|
28
|
21 delete command のasserttion がfailすることがある。
|
29
|
22 assert del_cmd==0 は正しくない
|
|
23
|
|
24 ml_append
|
|
25 複数行(n) appendすると、prev_line_flushが xtr=1 で複数回呼ばれ
|
|
26 rep_register では、xtr=n となる。
|
|
27 ml_delete
|
|
28 複数行(n) deleteすると、prev_line_flushが xtr=-1 で複数回呼ばれ
|
|
29 rep_register では、xtr=-n となる。
|
|
30
|
28
|
31
|
27
|
32 Mon Oct 27 15:53:19 JST 2008
|
|
33
|
|
34 直せば直すほど、動かなくなってくる。joinのsessionが変らしい。
|
31
|
35 Done: read がでたらめだった...
|
27
|
36
|
26
|
37 Sun Oct 26 21:45:49 JST 2008
|
|
38
|
|
39 なんか、でたらめな感じ... そもそも、コマンドがちゃんと
|
|
40 読めてない?
|
|
41
|
27
|
42 command を読み込む時に、 三回も malloc して、しかも、
|
|
43 一回は、free してない。
|
|
44
|
18
|
45 Sun Sep 7 20:18:14 JST 2008
|
|
46
|
|
47 ml_replace
|
|
48 文字のinsert の時には毎回呼ばれる
|
|
49 文字のdeleteの時には、最初の一回しか呼ばれない
|
|
50 ml_append
|
|
51 行のopen の時に一回だけ呼ばれる
|
|
52 複数行appendしても、一回ずつ呼ばれる
|
|
53 ml_delete
|
|
54 複数行deleteしても、一回ずつ呼ばれる
|
|
55
|
|
56 changed_common
|
|
57 これらが呼ばれて変更があった時に呼ばれる
|
|
58 複数行の変更は一回にまとめられて、変更行数がxtraに入る
|
|
59
|
|
60 というわけなので、以下のようなアルゴリズムになると思われる
|
|
61
|
|
62 ml_* で、prev_line_flushを呼ぶ。
|
|
63
|
|
64 prev_line とcurrent lineを比較して異なっていたら、
|
|
65 insert されているdelete commandがあったらキャンセルする
|
|
66 溜っているのは、changed_commonのreplaceのケースのみ
|
|
67
|
|
68 prev_line をcurrent lineに設定して、
|
|
69
|
|
70 delete の場合は、DELETE_CMDとして現在の行をセーブして終了
|
|
71 ml_deleteは1行毎に呼ばれる
|
|
72 送ってしまっても構わない
|
|
73
|
|
74 append の場合は何もしない
|
|
75 最後にまとめてchanged_common でINSERT_CMDを発行すれば良い`
|
|
76
|
|
77 あとはreplaceの場合となる
|
|
78
|
|
79 既にprev_lineがsaveしてあったら何もしないで終了
|
|
80 文字のinsertの場合
|
|
81
|
|
82 そうでなかったら、current lineを DELETE_CMD としてセーブする
|
|
83 最初のreplaceの場合
|
|
84
|
|
85 changed_common で、
|
|
86
|
|
87 xtra < 0 の場合は何もしないで溜ったコマンドを送信
|
|
88 ml_delete の分だけDELETE_CMDが送信される (送ってなければ)
|
|
89 xtra > 0 の場合は、INSERT_CMD を行数の分だけ送信
|
|
90 xtra == 0 の場合は、INSERT_CMD を送信して、
|
|
91 現在行をDELETE_CMDとしてセーブ
|
|
92 (ml_replace は文字の削除では呼ばれないので、ここでセーブする必要がある)
|
|
93
|