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

[FDclone-users:00399] Re: FDclone 2.07 has been released



 しらいです。

 fj.sources への NNTP post がうまくいかなかったせいでこんな
時刻の release になってしまいました。Web と FTP はもう更新さ
れてると思います。
 で、お待たせしましたがようやく 2.07 の登場です。今回の目玉
は疑似端末による端末エミュレーションですね。

In Message-Id <20050526145628.4571F40C392@yuka.unixusers.net>
        Takashi SHIRAI <shirai@unixusers.net>writes:
>  しらいです。

>  以下は HISTORY より今回の変更点の抜粋です。

 HISTORY 見ただけでは目玉の変更点が判りにくいところがちと難
点。解説で補足を加えますのでご了承下さい。


> 	内部変数 PTYMODE, PTYTERM, PTYMENUKEY の追加。

 これが疑似端末を使って端末エミュレーションが出来ますよって
話です。

 詳しくは man page を参照して頂くとして、手っ取り早く機能を
試してみたいという方は「fd -PTYMODE=1」として起動してみて下
さい。ファイル閲覧など外部コマンド実行時の画面上下端にご注目。
 従来の外部コマンドは普通に起動されてただけですので端末画面
全域を使って実行されていました。疑似端末モードでは外部コマン
ドには端末画面の一部分のみ使用させています。
 具体的にはファイル一覧表示域だけが各外部コマンドの利用可能
な端末領域で、それ以外の領域には外部コマンドからアクセスする
ことは出来なくなっています。

 この結果、画面分割モードで外部コマンドを起動した場合には、
それぞれの分割ウィンドウ毎に独立した端末を持って起動されるこ
とになり、あるウィンドウで編集しながら別ウィンドウで実行なん
て技も使えます。
 これを実現するにはあるウィンドウで実行中の外部コマンドを一
旦中止して別ウィンドウへ制御を移す必要がありますが、これを可
能にするのが PTYMENUKEY です。

 例えば「PTYMENUKEY='\t'」としておくと Tab キーが仮想端末メ
ニューの起動キーとなり、外部コマンド実行中に Tab を押すこと
でメニュー画面が現れます。
 このメニューの中ではそのまま Tab キーとして外部コマンドに
キー入力を渡すことも出来ますが、画面分割モードでは「ウィンド
ウ移動」という選択項目により別ウィンドウに移れます。
 こうしてウィンドウを移り渡りながらそれぞれのウィンドウで外
部コマンドを起動すると、screen(1) のマルチウィンドウみたいに
単一端末で複数のセッションを扱えるという次第です。

 因みにこの疑似端末では元々の端末とそっくり同じ機能が使える
とは限りませんので、環境変数 TERM を元の値から変更して外部コ
マンドに渡すように設計されています。
 この変更後の値を指定するのが「PTYTERM」で、既定値は端末の
de-facto standard である「vt100」となっています。でもこの名
前だとたまにうまく動かないことがあります。
 例えば Cygwin の端末。こいつは DOS プロンプトなりコマンド
プロンプトを無理から UNIX 端末に見せかけて端末制御を行なって
いるので、vt100 互換の動作は難しいんですね。
 で、こういう場合には PTYTERM に「vt100」以外の値を設定しま
す。Cygwin の場合は「ansi」辺りを設定すると結構お似合いかも
知れません。

# 但し、Cygwin 端末には妙な挙動を示す仕様が幾つもあるので、
#疑似端末モードは向かないかも知れませんね。
# 例えば fork(2) すると親子共々端末設定が stty isig されて
#しまうとか、ESC code を端末入力から受取ると select(2) が効
#かなくなってしまうとか。
# 一応 Cygwin 対策コードは幾つか実装してありますが、Cygwin
#は飽くまでも「偽 UNIX」なんである程度は諦めて下さい。


 ま、そんなこんなで実用的かどうかは疑問の残るところですが、
一度くらいは皆さん試してみて下さい。


> 	内部変数 DEFKCODE の追加。

 これは UTF-8 端末用に設けた設定項目で、この値を utf8 辺り
に設定しておくと端末入出力は完全に UTF-8 ととして扱われるこ
とになります。
 多分かなり使い勝手が悪くなると思いますが、UTF-8 端末を使っ
ている人は試してみて下さい。


> 	分割ウィンドウの最大数を 5 に拡張。

 折角疑似端末モードが出来たのに同時に仕様出来るウィンドウ数
が従来の二つだけではちょっと悲しいかなと思って 5 つまで拡張
してみました。
 同時に起動時の引数で指定出来るカレントディレクトリ (とファ
イル) 数も 5 つに拡張されています。


> 	WIDEN_WINDOW, NARROW_WINDOW, KILL_WINDOW コマンドの追加。

 5 つも画面分割してしまうとそれぞれのウィンドウサイズが大き
過ぎたり小さ過ぎたりして、微妙な加減が欲しくなってくることと
思います。
 なので現在のウィンドウサイズを大きく (WIDEN_WINDOW) したり
小さく (NARROW_WINDOW) したり出来るようにしました。それぞれ
初期設定では「W」と「N」に機能が割当てられています。

 また、ウィンドウ数拡張に伴い SPLIT_WINDOW (「/」に割当て)
の機能が変更になっています。
 従来は一回実行すると分割されてもう一回実行すると分割をやめ
るという仕様でしたが、これが「現在のウィンドウを二分割する」
という仕様に改定されています。
 となると、ウィンドウを増やすばかりで減らす機能が存在しなく
なって困るので、KILL_WINDOW (「K」に割当て) という機能が追加
されました。これでカレントウィンドウを閉じます。


> 	環境変数 COLUMNS, LINES の値を動的に変更する仕様に。

 2.06d の変更点で「HP-UX の more(1) には対応出来ていない」
と書いた部分の対処です。

 HP-UX の more(1) は端末自身が「80x25 だよー」と幾ら主張し
たところで、環境変数 LINES 及び COLUMNS の値を設定してあると、
端末の主張を無視してそっちを有効な値と見なしてしまいます。
 一部の shell (例えば bash) は勝手に LINES と COLUMNS の値
を設定してしまうので、bash から起動された FDclone はこの値を
そのまま more(1) に渡してしまっていました。
 この結果、FDclone 起動中に端末サイズが変更されると、FDclone
から起動された more(1) に対し端末がそのサイズが伝えても、最
初に設定されていた LINES と COLUMNS の値の方を信用してしまう
という現象が生じてしまっていました。

 そこで、FDclone でも bash 等と同様に、LINE と COLUMNS の値
を動的に変更し、これらの値が常に端末サイズと同一になるように
仕様を改めました。


 んーと、非常に長くなってしまいましたが FDclone 2.07 での変
更点はこんなところです。何か質問があったらどうぞ。

                                               しらい たかし