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

[FDclone-users:00422] Re: fd終了後の挙動について



こんにちは、田村です。
お手数おかけします。
珍しく平日に休みをもらえたので実験してみました。

On Mon, 13 Jun 2005 23:42:38 +0900, Takashi SHIRAI wrote:

>  TERM=sun で起動してみるとどうなりますか?/etc/termcap を見
> て他に「sun-cmd」とか「sun-e」とかそれっぽい名前があればそっ
> ちでも構いません。
う〜ん、/etc/termcap が存在していないようです。
どこかに代わりのものが無いか探してみたのですが見つかりませんでした。

ターミナルの環境設定のところにターミナルタイプを設定する部分があるのです
が
複数の中から選ぶようになっていて、ansi、dtterm、rxvt、vt52、vt100、vt102
、
xterm、xterm-colorの中から一つ選ぶようになっています。
sun という選択肢はありませんでした。

>  まずは実際に pty を起動しなくても症状が再現するかどうかを
> 検証してみましょう。
>  -PTYMODE=1 状態では「h」キーで現れる入力プロンプトの位置が
> 画面最下行ではなくファイル表示領域の最下行になっていると思い
> ます。ここで一行分以上の文字列を入力していくとファイル表示領
> 域の中だけがスクロールします。
>  入力の最後に Enter を押すと実際に pty が起動してしまうので、
> 部分スクロールが確認出来た時点で Esc を押して入力をキャンセ
> ルします。
>  このまま終了すると症状が再現するでしょうか?もし再現したら、
> 原因は pty ではなくて単純にスクロール範囲を制御するシーケン
> スにあることが確認出来ます。

まず、入力プロンプトの位置がファイル表示領域の最下行ではなく
その一段上になっています。従って1行分以上ではなく、2行分以上
入力しないと、スクロールしません。
スクロール確認後、Escを押して終了させると。症状は再現します。

>  次は実際にシーケンスを発行している箇所の記述を操作してみま
> しょう。
>  termemu.c に二箇所 Xsetscroll() という関数が記述されていま
> す。一個目が範囲を制限して二個目が解除しています。この一連の
> 処理は 6 行しかありませんので、まとめて comment out して下さ
> い。面倒なら削除しても構いません。
>  この変更により、上で TERM=sun として実験したのと同じ挙動が
> 得られる筈です。この状態で上の入力プロンプトでの部分スクロー
> ルを検証してみて下さい。
>  ついでに普通に子プロセスを起動した時にどうなるかも見て下さ
> い。多分どちらも同じ挙動だと思います。

/*
        if (Xsetscroll(min, max) >= 0) {
                doscroll(n, c, x, y);
                Xsetscroll(-1, -1);
                Xlocate(x, y);
                return;
        }
*/
これでいいんでしたっけ?
この状態で make realclean してから make し直しました。

>  まずは実際に pty を起動しなくても症状が再現するかどうかを
> 検証してみましょう。

これは、OK でした。症状は出ません。この状態で h キーで ls -l コマンドを
実行させてみました。終了後やはり症状は出ません。

>  最後に根本的な対処を目指して、patch としての適用に耐えるコ
> ードを実装してみましょう。
>  上で削除した Xsetscroll() の箇所を元に戻したら、二個目の引
> 数を変更します。元は (-1, -1) になっている筈ですが、これを変
> 更して (0, n_line - 1) にします。
>  もし Mac OS X 端末での支障がスクロール範囲を制御するシーケ
> ンスにあるのだとしたら、多分これで直るんじゃないでしょうか。

はい、これでなおりました。症状は出ないようです。

>  でも、これで直るとしたら Mac OS X の端末は正しくシーケンス
> の実装が出来ていないということになりますよ。TERM の値は何に
> なっていますか?

初期値では、vt100 になっていました(そのはずです)。TERM=xterm
にしてみたときも、挙動が少し違うものの、スクロール範囲がおかしくなる現象
は
同じでした。

>  もし TERM=vt100 でその挙動だとすると、VT100 emulation が不
> 完全だということになりますね。

/etc/termcap がないので、自分では確認できませんでしたが、
そういうことなのでしょう。代わりのものがどこかにあるのでしょうが
探し出せませんでした。
しらいさんが以前どこかで FreeBSDについても同じようなことを
おっしゃっていたように記憶しているのですが、こういった事例は
結構あるのでしょうか?。

上記の作業が、有用であれば、幸いです。

--
yuji tamura