GNU nanoの折り返しを全角対応にしてみる
GNU nanoを日本語で使う上で問題となるのが、全角の折り返しだったりする。
例えば80桁で折り返す設定にしている場合、80桁目に全角文字が来た時にはその文字はちゃんと折り返しされずに空白で表示されてしまう。日本語を扱う身としては非常に使い難い。
一般的なエディタではそのような場合、79桁目まで表示して全角文字を次の行に折り返すパターンが多いと思われるので、なんとかGNU nanoでもそのようにできないか、ソースを確認。
文字列の表示自体はupdate_lineで実施しているので、ソフトラップ時の処理を見てみると、COLSで単純に割っている。ここを1行に入る分だけ表示し、それ以降は次の行に折り返す処理に変更する。actual_xとstrnlenptを使って実装した。
カーソルの表示はreset_cursorで行なっている。こっちは折り返しが発生する際の桁数を見て補正していく形で実装。ひとまず動きはするレベルの実装になってしまっているので要修正。
もうちょっとスマートに実装したいところではある。