エディタ系コマンドで2日ハマった
制作中のSSHクライアントで、vi(VIM)とlessコマンドで下端と上端でのカーソル移動での新行表示が重なっちゃってハマってた。
下端と上端で原因は違うのだが、
下端の方はLFの際に最大行数を超える場合に行を挿入する処理で、行番号は0からで行数は1からなのに間違って比較してたのが原因だったぽい・・・
これで偉いハマった・・・
上端の方はCSIコマンドへの対応が必要なので、下端の方でハマっててこっちは後回しになってた。
下端と上端の件でハマって細かくログ出力したのだが、
vi(VIM)はスクロールが発生する際に"CSI[n;mr"で一時的に最下段をスクロール対象から外して、
上方向移動の際はスクロール範囲を戻してから1行目にそのまま文字を出力。
下方向移動の際は最下段が外れた状態でLFで行挿入をして文字入力。そして範囲を戻す。
ってな流れになってるぽい。
上方向移動は一旦範囲を縮小して、戻してそのまま文字が入力されてるぽいんで、
「範囲縮小 → 範囲拡大」となった場合は、上に行を挿入するぽい?
lessコマンドでは、スクロール範囲は設定されず、下方向への文字挿入は常に最下段に行われる。
なので、下方向への移動はただ文字が送られてくるだけ。
上方向に移動する際は「ESC+M」コマンドが送られてて、これは1行上にスクロールする制御コマンドぽい。
というわけで、多分理解できた。
モノの方はだいぶ出来てきた感じ。
マルチバイト文字とかはどうすっかな・・・
下端と上端で原因は違うのだが、
下端の方はLFの際に最大行数を超える場合に行を挿入する処理で、行番号は0からで行数は1からなのに間違って比較してたのが原因だったぽい・・・
これで偉いハマった・・・
上端の方はCSIコマンドへの対応が必要なので、下端の方でハマっててこっちは後回しになってた。
下端と上端の件でハマって細かくログ出力したのだが、
vi(VIM)はスクロールが発生する際に"CSI[n;mr"で一時的に最下段をスクロール対象から外して、
上方向移動の際はスクロール範囲を戻してから1行目にそのまま文字を出力。
下方向移動の際は最下段が外れた状態でLFで行挿入をして文字入力。そして範囲を戻す。
ってな流れになってるぽい。
上方向移動は一旦範囲を縮小して、戻してそのまま文字が入力されてるぽいんで、
「範囲縮小 → 範囲拡大」となった場合は、上に行を挿入するぽい?
lessコマンドでは、スクロール範囲は設定されず、下方向への文字挿入は常に最下段に行われる。
なので、下方向への移動はただ文字が送られてくるだけ。
上方向に移動する際は「ESC+M」コマンドが送られてて、これは1行上にスクロールする制御コマンドぽい。
というわけで、多分理解できた。
モノの方はだいぶ出来てきた感じ。
マルチバイト文字とかはどうすっかな・・・