このページは過去に掲載していたものをそのまま使用しています。
1byte分しかカーソル移動が移動できないと 2byte文字のときに、カーソルキーを二回押さなければいけないので その動作を改善する。
テキストオブジェクトに注目した。このための変更は lib/text.cで行ない、影響を受ける関数は次に挙げる。
アルゴリズムというほどの難しい点はどこにもない。 ひらがなや漢字といった2byte文字の場合には、2回分(2byte分)前後に カーソル位置をずらしている。
問題となるのはこの「2byteの場合」を検出することなのだけれど、 rubyのregex.cに含まれているようなテーブルを使った検出が 望ましいのだと思うが、ここでは単純に該当文字コードが負なら2byte文字を 表わすとして処理している。
たとえば前方に2byte文字がある場合 (右側に漢字があって、そちらに向う場合) は次のような処理をしている。
if(text->line[row][text->cursor_pos+1] > 0) { memmove(text->line[row] + text->cursor_pos, text->line[row] + text->cursor_pos + 1, text->strlen[row] - text->cursor_pos); text->strlen[row]--; } else { memmove(text->line[row] + text->cursor_pos, text->line[row] + text->cursor_pos + 2, text->strlen[row] - text->cursor_pos); text->strlen[row]-=2; }
以前作成したページに載っているものですが
この問題点を解決した差分ファイルです。
[ dia-0.83-5-6pr1.patch ]