端末/環境に応じて、次のシーケンスにはさまざまな効果があります。
$ ls
1
2
$ man ls
enter q
現在のプロンプトの上に最後に表示されたマニュアルページ画面が表示されるか、ls出力と以前のシェル出力が復元されます。同じ効果が観察されます。 vim
を使用し、それを一時停止してシェルで何かを実行する場合。
Fedora 19では、画面のデフォルトは復元なしのようですが、gnome-terminal/xtermはデフォルトでdo-restoreを使用します。
Solarisでは、使用されているterminal/terminfodbによって異なります。
異なるシステム/端末間で一貫して復元動作を構成したい。
この機能は「代替画面」または通常画面と代替画面の切り替えと呼ばれているようです。
Xtermを使用して探索できます。たとえば、xterm
にman man
と入力して、manを終了します。これで、を介して別の画面に切り替えることができます Ctrl+ Mouse2(中クリック)-> '代替画面を表示'。または、 xterm制御シーケンス を直接入力することもできます。例:
$ echo -e '\033[?47h' # alternate screen
$ echo -e '\033[?47l' # normal screen
最後の2つのコマンドは、gnome-terminalでも機能します(おそらく他のコマンドでも機能します)。
man
/vi
/less
などの起動時に何が起こるかは、基本的に、抽象的なクリアスクリーンコマンドを送信することです。終了(または一時停止)時に、抽象復元画面コマンドを送信します。コマンドが具体的な端末制御シーケンスにどのように変換されるかは、 terminfo データベースで定義されています。
すべての端末で機能するのは、ローカルのterminfoエントリを調整することです。つまり、抽象的なクリア/復元画面コマンドのマッピングを削除します。
これは次のように行うことができます-現在の$TERM
エントリ(たとえば、Fedora 19のgnome-terminalの場合):
$ echo $TERM
xterm-256color
$ infocmp -1 > xterm-256color
$ sed 's/^\(xterm-256color\)|/\1-na|/ ; /smcup\|rmcup/d ' \
xterm-256color > xterm-256color-na
$ diff -u xterm-256color*
--- xterm-256color 2013-08-04 16:33:52.041393461 +0200
+++ xterm-256color-na 2013-08-04 16:36:56.829930520 +0200
@@ -1,5 +1,5 @@
# Reconstructed via infocmp from file: /usr/share/terminfo/x/xterm-256color
-xterm-256color|xterm with 256 colors,
+xterm-256color-na|xterm with 256 colors,
am,
bce,
ccc,
@@ -155,7 +155,6 @@
rin=\E[%p1%dT,
rmacs=\E(B,
rmam=\E[?7l,
- rmcup=\E[?1049l,
rmir=\E[4l,
rmkx=\E[?1l\E>,
rmm=\E[?1034l,
@@ -170,7 +169,6 @@
sgr0=\E(B\E[m,
smacs=\E(0,
smam=\E[?7h,
- smcup=\E[?1049h,
smir=\E[4h,
smkx=\E[?1h\E=,
smm=\E[?1034h,
$ tic xterm-256color-na # loads the file to $HOME/.terminfo
$ find ~/.terminfo -type f
$ HOME/.terminfo/x/xterm-256color-na
これで、次の方法でテストできます。
$ TERM=xterm-256color-na man man # and then hit q
複数の端末を使用する場合は、他の端末に対して上記の手順を繰り返すことができます。すべてが期待どおりに機能する場合は、シェルrcファイルを介してTERM
を設定できます。
infocmp
のパラメータとして端末名を直接指定することもできます。例:
$ infocmp -1 screen > screen
一部の端末は代替画面切り替え機能をサポートしています(例: 画面 )が、 デフォルトで無効にする 。
screen
の場合、~/.screenrc
を介して有効にできます。
$ cat ~/.screenrc
altscreen
Ssh経由でリモートログインしてSolarisシステムにログインした場合、おそらくリモートで構成されたシステム全体のterminfoデータベースは、歴史的で壊れているか、「ブリーディングエッジ」端末と一致しない異常な/ Solaris固有のデフォルトが含まれています。でsshを実行します。
したがって、ローカルのterminfoデータベースを/ usr/share/info(クライアント上)からHost:~/.terminfo
(サーバー上)にコピーするだけのオプションです。
コンパイルされたterminfo形式に互換性がない場合は、前の段落のようにエントリをエクスポート/インポートすることもできます。
Cygwin インストールからterminfo-dbを試してみましたが、Solaris10システムに直接コピーできました。
ユーザー間で代替のterminfodbを共有したい場合は、TERMINFO
環境変数を介してそのパスを指定します。
一部の端末は、代替画面切り替えの制御シーケンスの無効化をサポートしています。たとえば、xtermにはオプションがありますが、gnome-terminalにはありません。
Xtermの場合は X-ressource です。例:.
XTerm*titeInhibit: true
一部のプログラムには、送信する制御シーケンス/ terminfoコマンドを構成するための構成ファイルがあります。例えば
$ LESS=X less foo
画面をクリア/復元しないようにless
を構成します。
vim
の場合、次のようなものを含めることができます
set t_ti= t_te=
あなたの中に~/.vimrc
。
Topの動作を構成する方法をオプションで見つけられませんでした。デフォルトでは、restore-screenを送信しません。