bash スクリプトで「代替画面」を使用する 質問する

bash スクリプトで「代替画面」を使用する 質問する

代替画面vim、htop、screen、alsamixer、less などの多くの「ユーザー対話型」ターミナル アプリケーションで使用されます。これは、ターミナル コンテンツの別のバッファーのようなもので、アプリケーションが終了すると消えてしまうため、ターミナル全体が復元され、アプリケーションが何も出力していないように見えます。

まったく同じことを自分のシェル (bash) スクリプトで実現したいのですが、それほど移植性がある必要はありません。Linux のみと xterm ベースのターミナル エミュレーターを使用しますが、tput可能であれば、ソリューションでは次のようなものを使用する必要があります。ただし、外部のスクリプト言語 (または C のようなもの) は使用したくありません。

C は使いたくありませんが (できるだけ依存関係の少ない bash スクリプトにする必要があるため)、less のソース コードを調べました。データベースとして terminfo を使用し、初期化時に "ti" 端末機能を検索するようです。行を削除すると代替画面が使用されなくなるため、原因となるコード行を見つけたと想定しました。

しかし、 にはそのような機能が見つかりませんman terminfo。しかし、おそらく私はこの問題の解決策を見つけるために間違った道を歩んでいるのでしょう。おそらく terminfo / tput は私の味方ではないのでしょう。

それで、(どのように) bash スクリプトで代替画面を使用できますか? ソース コードにヒントが記載されている簡単なアプリケーションを知っている人はいませんか? (C アプリケーション、bash スクリプトなど)

ベストアンサー1

次のコマンドを使用して、代替画面に切り替えることができます。

$ tput smcup

そして次のように返します:

$ tput rmcup

これらのコマンドは、端末に適切なエスケープ シーケンスを出力するだけです。XTERM の場合は、次のものと同等になります (より有名ですが、洗練性や移植性は劣ります)。

$ echo -e "\e[?1049h"

そして:

$ echo -e "\e[?1049l"

その他の端末制御コマンドについては、 を参照してくださいman 5 terminfo

おすすめ記事