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


12

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

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

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

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

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

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


実行しているMac OS Xのバージョンは何ですか?「無制限」よりも小さいものにバッファーがあり、不足している行はバッファーのバックエンドから落ちた最も古い行です。
スピッフ

Mac OS X 10.6.2、およびバッファーは10,000行ですが、失われた行は画面外にスクロールする行です。1ページ上にページを移動しても、これらの行は存在せず、実際、行が上部からスクロールするとき、スクロールバックの最新のページは変更されません。
スティーブマドセン

回答:


19

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

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

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

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

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

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

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

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

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

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


1
これは非常に有望な答えのように聞こえます。プログラムが異常終了し、代替画面がアクティブのままになる可能性があるという合理的な説明はありますか?
スティーブマドセン

「フルスクリーン」プログラムを実行した後にシェルに戻った場合、可能性はありますが、私がリストしたプログラムのようなほとんどの人気のあるプログラムは、その後のクリーンアップについて信頼できます。「フルスクリーン」プログラムがクラッシュすると、端末は代替画面のままになる可能性があります。ただし、メイン画面への切り替えを含むShell> Send Hard Resetを試してみました。それが再び発生した場合、あなたが戻って切り替えるには、このコマンドを使用して試みることができる:tput rmcup
クリス・ページ

別の可能性は、プログラムが「スクロール領域」を端末に残したことです。スクロールするときに、サブ範囲の行のみをスクロールするように端末に指示するコードがあります。プログラムはこれを使用して、たとえば画面からスクロールしないステータス行を表示します。スクロール領域に一番上の行が含まれていない場合、テキストはスクロールバックログにスクロールしません。ただし、繰り返しますが、ハードリセットを試みたということで、これもクリアするはずです。
クリスページ

2
私の場合、起こっているように見えるのは、私sshがいる間にリモートマシンへのセッションが失敗した(タイムアウトしましたか?)ことです(vi明らかviにクリーンアップの機会が与えられなかったため)その後、[表示]> [代替画面を非表示 ]メニュー項目をssh選択して問題を解決するまで、同じ端末の新しいセッションはOPで説明された問題を示します。
ヘファイストス

ありがとう、[表示]> [代替画面の表示/非表示]が役に立ちました。それは私が無意識のうちに打たなければならず、何が起こったのか、元に戻す方法がわからなかったはずのキーの組み合わせを持っています
-aexl
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.