[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: mgl2 019 patch



鈴木(康)です。
<200010151143.LAA15671@atropos.fsn.7n1umj>の記事において
kensyu@y.email.ne.jpさんは書きました。

  | それと、get_key() が mgl_set_key_mode(MGL_SK_EXMOUSE_EVENT) している時に
  | 仕様に載っていない keycode (0x80FFFFFF) を -1 のかわりに返して来ることが
  | あるようです。
  | # これ、たいがい get_key() のあとある switch() 文をすりぬけて busy loop 
  | # をつくりだしますが、動作上は問題なく見えるとこが嫌らしいっす。

バグの場所がわかりました。

mgl2.c:get_key() で、ret &= ~MGL_SKM_MASK としていますが、
ここが原因です。

MGL_SK_EXTRANSLATED モードのときで、モデファイヤーだけ
変更になるパターンのとき、上のコードが帰ります。

その判断のところがバグっていました。


  |    >  | 1 行消去のはずなのに後ろ半分が消えない、みたいな動作をする。
  |    >  | こっちはこれから調べるところ。termcap の設定がミスってる
  |   > だけだといいな...
  |    >ncurses と相性が悪いのでしょうか?
  |    >ひょっとしたら、なんか定義が足りないのかも知れません。
  |    >なにかわかったら教えてください。

高木さんという方からバグを教えてもらいました。

mgterm.cap で

:ce=\E[K:
:cb=\E[1K:

となっていますが、mgterm では 両方とも動作が同じだったそうです。

vt.c で

        case 'K':       /* Clear all or part of line */
            if (varg[0] == 1)
                    TextClearBol(varg[0]);
            else
                    TextClearEol(varg[0]);
            break;

こんな風にすれば直るそうです。

これでどうでしょうか?

高木さんからは、color 化のパッチももらったので、それも commit しようと
思っています

--
					鈴木 康司 @NECソリューションズ
					suz@hpc.bs1.fc.nec.co.jp
					TEL 042-333-6465