[Mutt-j-users 288] Re: #24255: mutt-1.5.21での画面乱れ

Back to archive index

gwmaster ribbo****@ns*****
2011年 2月 10日 (木) 17:09:13 JST


On Tue, Feb 08, 2011 at 07:15:30AM +0900, gwmaster wrote:

更にその後です。

> > 2) ◆などの文字入力
> > CentOS上で、◆などの文字を入力すると、入力しただけなら
> > 正しく表示されます。但し、矢印キーで戻ると1バイト戻って
> > しまい、乱れます。
> > FreeBSD 8.1では、入力しただけでも乱れるので、Linuxの方が
> > まだましという感じです。

gdb でトレース取りながら調べてみました。

Subject: 

が出ている段階で ★ を入力すると、enter.c内の_mutt_enter_string()
内にあるループで入力を処理しています。

    if (w > width)
      break;
    my_addwch (state->wbuf[i]);
      }
      clrtoeol ();
      move (y, x + my_wcswidth (state->wbuf + state->begin, state->curpos - state->begin));
    }
    mutt_refresh ();

のあたり、moveで、カーソルが2バイト移動(my_wcswidthの戻りが2)するのですが、
そのあとmutt_refresh()を呼び出すと、画面に★が表示された後、カーソルが3バイト分
移動してしまいます。しかし、〒ですと、上記のmoveではやはり2バイト
移動するのですが(my_wcswidthの戻りが2)、画面も2バイト移動します。

mutt_refresh()の内容は、

void mutt_refresh (void)
{
  /* don't refresh when we are waiting for a child. */
  if (option (OPTKEEPQUIET))
    return;

  /* don't refresh in the middle of macros unless necessary */
  if (UngetCount && !option (OPTFORCEREFRESH))
    return;

  /* else */
  refresh ();
}

なので、何もしていないと同値ですね。
ncursesがうまく文字幅を認識していないのかなあ。




Mutt-j-users メーリングリストの案内
Back to archive index