新井です。

あれから岩本さん情報の bce 対応したり、エスケープシーケンス足りないのを追加したり
してました。そんな感じで TERM=xterm でも一応それなりの表示になった感じです

2012年1月1日3:31 Nobuyuki Koganemaru <n-kog...@syd.odn.ne.jp>:
>
> 小金丸です。
>
>>From: Toshihiko ARAI <arai.toshih...@gmail.com>
>>Date: Sat, 31 Dec 2011 23:12:54 +0900
>>
>>新井です。
>>
>>罫線ですが、前回 kon の修正無理みたいなこと言いましたが、先程ハックしてて原因が分った
>>かもしれません。一応前回の kon2test.tar.bz2 を更新しました。オリジナルの kon にも適用
>>できるかもです
>
> ソースを取得しましたが、どの部分を修正されたのでしょうか? 教えてください。

場当たり対処ということを理解して頂き、
vt.c:EscStart() の最後の方、
+               } else {
+                   /* ANK モード */
+                   if (con.ins)
+                       TextInsertChar(1);
+                   if (con.trans == CS_RIGHT)
+                       ch |= 0x80;
+                   else if (con.trans == CS_GRAPH)
+                       ch = (1 + ch) & 0x1f;
+                   TextSput(ch);
+                   con.x ++;
+                   continue;
+               }

cons.trans に G1 設定してる
!       case CHAR_SO:
!           con.trans = con.g[1] | G1_SET;
!           continue;
となってる `| G1_SET' が余計で
!           case CHAR_SO:       /* 0x0e */
!               con.trans = con.g[1];
                continue;

vt.c:EscSetSCodeG0() での '\e[(0' のケースが抜けてる
*** 441,456 ****

      VTDEB(warnx("SG0: %x,%c", prefix, ch));

!     switch (ch) {
!     case 'U':
        con.g[0] = CS_GRAPH;
!       break;
!     default:
        for (i = 0; fSRegs[i].sign0 != 0; i++) {
- #if 0
-           if (fSRegs[i].stat != FR_ATTACH)
-               continue;
- #endif
            if (SIGN_CMP(fSRegs[i].sign0, ch, prefix)) {
                con.sb = (u_char)i;
                con.g[0] = CS_LEFT;
--- 509,518 ----

      VTDEB(warnx("SG0: %x,%c", prefix, ch));

!     if (ch == 'U' || ch == '0')
        con.g[0] = CS_GRAPH;
!     else {

他にも関係するところがあったかもしれませんが、年越ししながら結構書き換えちゃったので。

>>> 色の問題は、
>>>
>>>>From: IWAMOTO Kouichi <s...@iwmt.org>
>>>>Date: Tue, 27 Dec 2011 17:46:51 +0900
>>>
>>> 岩本さんの情報により、

bce については vc_sub.c:vc_text_clear_all(), vc_text_clear_band() や
vc.c:TextClearEos() など。

>>> しかし、問題をあらたに発見しました。
>>> 表形式の一覧が表示されるとき、Page Up, Page Down キーが使用できないことです。
>>> Page Up, Page Down キーを使用すると、プログラムが中断してしまいます。
>>> オリジナルも TERM が cons25 である場合、同様です、しかし xterm の場合は、
>>> だいじょうぶで、オリジナルの起動ファイル rc.local で xterm を設定する
>>> ようになっています。本来の FreeBSD のコンソールは、cons25 ですが、
>>> 原因がわからないので、こうなっているのではないかと思われます。
>>> vt100, vt100-color は、Page Up, Page Down に対応する TERMCAP のエントリが
>>> なく、動かないのではないかと思いますが、cons25 は、エントリがあるにも
>>> かかわらず、動きません。キーボードの選択の画面は、一時的に TERM を xterm に
>>> していますので、使用できます。
>>> 引続き、調査するつもりですが、使用する人は、注意してください。
>>
>>kon の cons25tovt100() が効いてないんでしょうか。
>
> TERM が vt100xxx の場合は、cons25tovt100 を使用するようにしています。
>
> 新井さんの kon で、kbdmap を動かし、kon の上で vt100-color (そのまま) でも、
> cons25 (set term=cons25 を実行) でも Page Up, Page Down キーは、中断して
> しまいます。set term=xterm を行うとオリジナルと同様に画面も正常で、
> Page Up, Page Down キーも使用できます。
> cons25 の場合は、cons25tovt100 を実行しているので、動かないのは、当然と思
> いますが、どのへんが、元の kon と違えてあるのかわかりません。

これですが今度は、'\e=' に応答返すようにしたので不要になったはずです。
vt.c:vt_ChangeMode() あたり。cons25tovt100() はコメントアウトしてますが
TERM=xterm でカーソルキーも PageUP/Down, Home/End なども動作してます。
# 本当は PAO の頃から分かってはいたんですけどね。動いてるからいいやのものぐさなもので

> --------------------------------------------------------------------
> ここで、いろいろ調べていたのですが、Page Up, Page Down キーの解決策が分か
> りました。やはり、termcap に Page Up, Page Down 用のエントリを追加するとプ
> ログラムが中断しなくなりました。

今度はインストールテストしなくちゃですかね
--
arai toshihiko

メールによる返信