web-dev-qa-db-ja.com

ターミナルで画面復元を構成するにはどうすればよいですか?

端末/環境に応じて、次のシーケンスにはさまざまな効果があります。

$ ls
1
2
$ man ls
enter q

現在のプロンプトの上に最後に表示されたマニュアルページ画面が表示されるか、ls出力と以前のシェル出力が復元されます。同じ効果が観察されます。 vimを使用し、それを一時停止してシェルで何かを実行する場合。

Fedora 19では、画面のデフォルトは復元なしのようですが、gnome-terminal/xtermはデフォルトでdo-restoreを使用します。

Solarisでは、使用されているterminal/terminfodbによって異なります。

異なるシステム/端末間で一貫して復元動作を構成したい。

10
maxschlepzig

この機能は「代替画面」または通常画面と代替画面の切り替えと呼ばれているようです。

Xtermを使用して探索できます。たとえば、xtermman 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を送信しません。

15
maxschlepzig