[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[FDclone-users:00468] Re: FD+mlterm(+lv?) の挙動について
- Subject: [FDclone-users:00468] Re: FD+mlterm(+lv?) の挙動について
- From: Takashi SHIRAI <shirai@unixusers.net>
- Date: Sat, 18 Mar 2006 07:38:00 +0900
しらいです。
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 ----
しらい たかし