gwmaster
ribbo****@ns*****
2011年 3月 2日 (水) 15:03:23 JST
On Sun, Feb 13, 2011 at 11:20:19PM +0900, gwmaster wrote: > > muttからrefresh()を呼び出す前に、ncursesにaddstr()で > 文字列を渡しています。この文字列は、★でも〒でも、 > UTF-8の文字列(3バイト)です。で、これを表示しようとすると > ★と〒で動作が異なります。 > > となると、ncursesの中で、システムのテーブルか何かを見て、 > 幅を判断しているのかなあ。 ncursesからは__wcwidth()を呼び出していました。ソースコード中 ではwcwidth()でしたが、実際にはヘッダファイルでDEFINEされて __wcwidth()でした。 ずっと辿っていくと、/usr/share/locale/UTF-8/LC_CTYPE で文字幅を定義していて、これがやはり★に関しては1バイトと なってました。 今、これを書き換えてテストしてみたところ、問題なくなりました。 どのように直すかについてはこれからまとめます。 oota