8

またはのような cli ツールを使用したことがありますvimhtop? これらはすべて端末内で最大化され、スクロールバックはありませんが、終了すると消えて、以前に入力した内容が表示されます。

例:

スクロールバック付きの端末ウィンドウ (スクロールバックのある端末ウィンドウ)

スクロールバックなしで最大化されたvim

(スクロールバックなしで最大化された vim)

スクロールバックとvimがなくなった状態でシェルに戻る

(スクロールバックとvimがなくなった状態でシェルに戻ります)

自分のアプリケーション、できればルビーでこれを行うにはどうすればよいですか?

4

1 に答える 1

14

これは、 XTerm 制御シーケンス仕様を通じてほとんどの端末でサポートされているモードです。

これらの仕様を使用してアクティブ化できる特定の画面切り替えモードは、代替画面バッファーと呼ばれます。

正しい XTerm コントロール シーケンスを端末に送信すると、端末は別の画面バッファーに切り替わります。プログラムが終了すると、通常はコマンドを送信して元の画面バッファに戻ります。このようにして、元の端末表示を復元するアプリケーションの効果を得ることができます。

代替バッファをアクティブにする手順は次のとおりですCSI ? 47 h。CSI は Control Sequence Initiator の略で、通常はESC + [. そのため、ターミナルに(スペースなしで)送信ESC [ ? 47 hすることにより、代替バッファに切り替わります。

これをテストするcatには、シェルでコマンドを実行し、ESC を押して [?47h と入力し、Enter を押します。画面がクリアになる (または別のバッファに切り替わる) はずです。

通常のスクリーン バッファに戻るシーケンスは次のとおりです。これは、コマンドをCSI ? 47 l実行してキーを入力し、 Enter キーを押すのと同じ方法でテストできます。catESC [ ? 47 l

ただし、複雑な端末画面ベースのアプリケーションをプログラミングする場合、ほとんどの人はcursesncursesなどのライブラリを使用する傾向があり、端末処理をすべて処理してくれます。たとえば、次を参照してください。

Ruby Curses の学習
http://www.ruby-doc.org/stdlib-2.0.0/libdoc/curses/rdoc/Curses.html

htop のようなプログラムはおそらく curses や ncurses も使用しているのではないかと思います。

于 2013-09-15T12:10:22.660 に答える