web-dev-qa-db-ja.com

OS Xターミナルの行がスクロールバックしない

Mac OS Xのターミナル(TERM = xterm)を使用しているときに発生する問題があります。時々、上からスクロールする行がスクロールバックバッファーに追加されない状態になります。 screenなどを使用していません。これは、ターミナルタブ内のプレーンbashシェルです。

これは、新しいタブを開いた直後には行われません。私は問題タブで実行した何かの副作用だと思います。私の推測では、それはxtermエミュレーション、おそらくスクロール領域と関係があります。

うまくいかなかったもの:

  • シェルメニューによるソフトリセットとハードリセット
  • タブでresetを実行する

ターミナルやxtermの状態をリセットする信頼できる方法はありますか?

タブを閉じて新しいタブを開くことが唯一の修正である場合でも、誰かが何が起こっているのかについての説明を提供できますか?

12
Steve Madsen

これは、端末が代替画面バッファーを使用していることを意味します。スクロールバックログにスクロールするメイン画面と、スクロールバックしない代替画面があります。 top、less、emacs、vim、screenなどの「全画面」または「画面指向」プログラムは、デフォルトで端末を代替画面に切り替えます。

各画面には独自のコンテンツと状態があります。代替画面を使用すると、プログラムがディスプレイ全体を引き継ぎ、メイン画面に戻って、終了時に以前のコンテンツを復元できます。

Mac OS X Lion 10.7以降、ターミナルには手動で画面を切り替えるために使用できるメニュー項目があります。

表示>代替画面の表示/非表示

これは主に、「全画面」プログラムの終了後に代替画面からテキストを表示またはコピーできるようにするために提供されています。 Xtermにも同様のコマンドがあります。

また、特定の画面を使用するようにプログラムを手動で強制したり、出力がスクロールバックログに送られるかどうかを制御したりすることもできます。ただし、明示的に代替画面に切り替えるプログラムを現在使用している場合、プログラムの実行中に強制的にメイン画面に切り替えると、混乱したり予期しない結果が発生したりする可能性があるため、注意して使用してください。

プログラムによっては、代わりにメイン画面を使用するように構成するためのコマンドライン引数またはその他の手段がある場合があります。例:less -X

一部のterminfoエントリは、代替画面の使用を抑制するように特別に設計されています(例:xterm1)。 TERM=xterm1 emacsはメイン画面でEmacsを実行します。 xterm1を永続的に使用することはお勧めしません。Lionのデフォルトのxterm-256colorと比較して、他の多くの便利な機能が無効になるためです。

tputコマンドを使用して画面を切り替え、シェルまたはスクリプト内からエスケープシーケンスを発行することもできます。 tput smcupは代替画面に切り替え、tput rmcupはメイン画面に戻ります。

現在実行中のプログラムを確認するには、ターミナルウィンドウまたはタブタイトルに表示されるプログラム名を確認するか、インスペクターウィンドウ(シェル>インスペクターを表示)を確認します。インスペクタのリストの最後のプロセスは、(通常)画面を使用している現在のプログラムです。代わりにメイン画面を使用するように設定する必要があります。

19
Chris Page