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

[FDclone-users:00468] Re: FD+mlterm(+lv?) の挙動について



 しらいです。

In Message-Id <OF083EFFD0.971D8629-ON49257134.00161A56@tky.lightwell.co.jp>
        SHIOTA Shoichi <Shoichi.Shiota@lightwell.co.jp>さんwrites:
> 潮田と申します。

> この問題は、少し前に 2ch で出ていた話です。
> <URL:http://pc8.2ch.net/test/read.cgi/linux/1061873172/584-594>

 陰でこそこそするのは性分に合わなくて 2ch には近寄らないよ
うにしてますもので。


> 現象が起こってから時間がたち、FD 自体の ver および、 mlterm の
> ソースも変わっているので、今現在では違った風に変な動きになるのは
> 見たのですが、ここではそもそもの現象を書きます。

 mlterm は使ったことがなかったので、VMware を使って OS ごと
環境を構築してみました。Vine 辺りが一番手っ取り早かったので、
FreeBSD の方は試していません。


> 1. PAGER がファイル内容を見せない。
>    FD 上で、テキストファイルを見ようと PAGER を起動させると、
>    動いてはいるようですが、ファイルの内容は見えない。

 これは内容が見えないのではなくて、less や lv の表示領域の
外に書いているせいですね。


> 2. FD 終了後 Enter キーの機能が変わっている。
>    これは、上の現象を起こした後というわけではなく、 FD の起動
>    即終了でもおこりました。
>    いい言葉を知らないので、そのまま書きますと
>    「今の行で入力された文字を、全て消し去り、カーソルを
>      先頭へ移動させる。」
>    と言う動きをしているように見えます。

 これは入力行が一行しか存在しない状態でコマンドライン編集を
しているせいです。一行しかないのでスクロールしないんですね。


 どちらも原因は端末スクロール領域が極端に狭くなってしまって
いるせいです。
 多分、起動時のカーソル位置が最終行にある場合に起こっている
症状だと思いますが、この時スクロール範囲が最終行だけになって
しまいます。
 なので、less や lv では書いた片っ端から最終行のステータス
表示に上書きされて何も見えなくなり、終了後のコマンドラインで
はスクロールが発生しないように見えてしまいます。

 これはスクロール範囲を設定する escape sequence の癖に依存
しています。
 xterm を始めとする多くの端末では、スクロール範囲の指定時に
「0 行目から 0 行目まで」と指定することで「画面全部」を指定
したのと同じことになります。
 ところが mlterm の場合、同じ指定が「画面最下行一行だけ」の
意味になっているようです。ひょっとすると負数が画面最下行から
の行数を意味するのかも知れません。
 こういう実装は初めて見るので、これまで対応出来ていませんで
した。


> 1. 他の term で試す
>    他といっても xterm しか入っていないので、これで試しましたが、
>    問題ありませんでした。

 mlterm 以外では普通「画面全体」の意味になるので支障は生じ
ないと思います。
 逆に mlterm ではどうやって「画面全体」を表すのか判りません
ね。「0 行目から 1000 行目まで」と指定しても良いのですが、も
し 1000 行以上ある端末が存在したらアウトです。
 端末アプリには画面サイズが 999x999 に収まっていることを前
提にしたものがたまにあるんですが、高解像度環境で unreadable
font を使えばこのサイズを越えることはあり得るんです。
 10000 とか 100000 とか大きくしても、そのうちいつかそれを越
える端末サイズが現れるかも知れません。


> 2. (根拠はないのですが) TERM の値でも変えてみる
>    mlterm 自体は TERM に mlterm を推奨しているようですが、私は
>    xterm で使用していました。
>    これを試しに dtterm へ変えたところ、問題がおきなくなりました。

 これは xterm には ti があるけど stterm には ti がないから
ですね。
 ti(enter_ca_mode) がある場合、FDclone は ca_mode 即ちカー
ソル移動に適したモードに切替えて端末を使います。この場合、ス
クロール範囲を壊されるのは ca_mode なので、ca_mode を使う他
のアプリ、例えば less や lv に影響が出ます。
 逆に ti がない場合、FDclone は通常モードのみで端末を使うの
で、ca_mode を使う他のアプリには影響は出ません。


> OS : FreeBSD 7-CURRNET
> FD : ports で入れた FD 2.07
> mlterm : その時の CVS で落としたものに、数行の変更

 私の試した Vine 環境では下記 patch が有効でしたが、FreeBSD
ではどうでしょうか。

---- Cut Here ----
diff -u ../old/FD-2.08a/term.c ./term.c
--- ../old/FD-2.08a/term.c	Tue Feb  7 00:00:00 2006
+++ ./term.c	Sat Mar 18 07:27:31 2006
@@ -3122,7 +3122,8 @@
 
 	if (dumbterm) /*EMPTY*/;
 	else if (usegetcursor || x < 0 || y < 0) {
-		VOID_C setscroll(-1, -1);
+		if (usegetcursor) VOID_C setscroll(-1, -1);
+		else VOID_C setscroll(0, 99999);
 		if (maxlocate(&ty, &tx) >= 0 && (tx > x || ty > y)) {
 			if (tx > x) x = tx;
 			if (ty > y) y = ty;
@@ -3141,7 +3142,7 @@
 	if (n_line <= 0 || (ymax > 0 && n_line < ymax))
 		return("Line size too small");
 
-	if (xmax > 0 && ymax > 0) VOID_C setscroll(-1, -1);
+	if (xmax > 0 && ymax > 0) VOID_C setscroll(0, n_line - 1);
 
 	return(NULL);
 }
---- Cut Here ----

                                               しらい たかし