I know I believe in nothing but it is my sweet nothing.:2008年07月23日分

2008/07/23(Wed)

debugging wcurses (reprise) その1

install/39193でumlautが表示されない件が再発したようなので
すわlibcursesのせいかとオモタら転記元のport-sparc/39177読むと
単にlibhackをリンクしてないちゅことげ、ちゃんと全文転記しよーよ。

ちゅーわけでlib/39175の続き。

  plod: cnt=7, in_refresh=1
  plod: returns 6
  plod: cnt=0, in_refresh=1
- __cputwchar: 0x20
- plod: (1,8)WCOL(1), putwchar(20)
+ __cputchar: ^[
+ __cputchar: [
+ __cputchar: C
  plod: returns 0
  makech: 1: wx = 9, ly= 1, lx = 8, newy = 1, newx = 9
  makech: have attr 00020000, need attr 00020000

うーむスペースの場合、refreshの部分でも単純にmove rightするじゃ駄目らしい。

			if (curscr->lines[outline]->line[outcol].attr
				    == curscr->wattr) {

の条件にマッチせずにgoto nondesしてるちゅーことか。

        nondes: if (__tc_nd)
                                tputs(__tc_nd, 0, plodput);
                        else
                                plodput(' ');

よく判らんのでwcwidth == 1の場合はこれまで通りの動作をするような
これはひどいパッチを書いたので後でcommitするする。
ちゅうかwcwidth > 1の場合でもmove rightでは駄目なのかもしれんが
とりあえずXXXちゅーことでいいや。

putwc(3)のラッパでしかない__cputwchar()呼んだだけでカーソル位置の計算が腐るふしぎ。
たぶんどっかで1で決めうちなのだろう、そのうちちゃんとcr_puts.c読む。

そいとcurses_private.hで勝手にMB_LEN_MAXを再定義(=8)してるんだが大丈夫かこれ。