[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[debian-users:15335] Re: less の終了時の動作について
松田健一と申します。
>> lessを終了するときなんですが、
>> qを押して、終了した途端に
>> 1.lessで見ていた画面が消えて、lessを開始したときのプロンプトに戻る。
>> 2.lessで見ていた画面はそのままで残り、画面最下行にプロンプトが現われる。
>>
>> の2つのパターンがあるのですが、この違いはどこから起きるのでしょうか。
less で使用している端末情報データベース terminfo の設定の違いから
きています。
less (実は less が内部で使用している curses ライブラリですが) は、
使用している端末の名前が入った環境変数 TERM を元に、端末を制御する
エスケープシーケンスの情報を入手し、それを使用して画面を制御しています。
コマンド infocmp を実行すると、そのセッションの現在の terminfo の情報
を見ることができます。(以下、私のセッションの例です)
% infocmp
# Reconstructed via infocmp from file: /home/kmatsuda/.terminfo/k/kterm
kterm|kterm kanji terminal emulator (X window system),
am, eslok, hs, km, msgr, xenl, xon,
cols#80, it#8, lines#54,
bel=^G, bold=\E[1m, civis=\E[?25l, clear=\E[H\E[2J,
...(一部省略)
rev=\E[7m, ri=\EM, rmcup=\E[2J\E[?47l\E8, rmir=,
...
sgr0=\E[m\017, smcup=\E7\E[?47h, smir=, smkx=\E[?1h\E=,
...
端末の属性情報とか、画面を細かく制御する機能がどういうエスケープシー
ケンスで実行できるかという情報が表示されます。
ここで注目して欲しいのが、smcup と rmcup の 2つの機能です。
% man 5 terminfo
を見て欲しいのですが、smcup は、プログラムスタート時に、rmcup はプログ
ラム終了時にそれぞれエスケープシーケンスが自動的に端末に流されます。
VT100 系の端末 (xterm とか kterm とかはその系列です) では、以下のエス
ケープシーケンスが利用できます。
"\E[?47h" その時点での画面イメージを保存する
"\E[?47l" 保存していた画面イメージをリストアする
これを使用して less は画面を元に戻しています。
> man less には、optionの所に
> -X Disables sending the termcap initialization and
> deinitialization strings to the terminal. This is
> sometimes desirable if the deinitialization string
> does something unnecessary, like clearing the
> screen.
> って書いてありますがこれのことかな?
そうですね、-X を設定すると、smcup と rmcup の 2つの機能を使用しないよ
うにするのだと思います。
それから、確かシステムで提供されている terminfo にも複数のバージョン
が存在するということを聞いたことがありますし、kterm と xterm とかの端
末エミュレータの種類によって、smcup と rmcup の定義が異なっているのか
もしれません。
> manualは読むといろいろ分かりますよ、
> man command
> commandのmanualが読めます。
本当にそのとおりだと思います。で、どのマニュアルをみると回答があるのか、
あるいは、どうやって回答のあるマニュアルを探していくかが、結構経験を必要
としますね。
昔、はまって terminfo のエントリを自分の好みに改造していたことがあるの
で思わず反応してしまいました。
失礼します。
----
Keni
=========================================================================
KENICHI MATSUDA E-MAIL: kmatsuda@xxxxxxxxxxxxx (Japan)
kmatsuda@xxxxxxxxxxxxx (U.S.)
PHONE: 603-897-3260
FAX: 603-897-3317
ORACLE NEW ENGLAND DEVELOPMENT CENTER
ONE ORACLE DRIVE
NASHUA, NH 03062
=========================================================================