プッシュダウン端子出力

プッシュダウン端子出力

端末出力の出力順序を逆にする標準的な方法はありますか?

~/Developer $ command0 
-bash: comman0: command not found 
~/Developer $ command2 
-bash: command2: command not found 
~/Developer $ command3 
-bash: command3: command not found 
~/Developer $ 

次のように表示されます。

~/Developer $ 
-bash: command3: command not found 
~/Developer $ command3 
-bash: command2: command not found 
~/Developer $ command2 
-bash: comman0: command not found 
~/Developer $ comman0

プロンプトを常に一番下に配置するのは直感に反する気がします。出力を表示するより効果的な方法は、出力順序を逆にすることです。これを実装するにはどうすればよいでしょうか? 具体的には、OSX ターミナル プログラムの出力部分がどこで定義されるのでしょうか?

答え1

bash では、現在のプロンプト/コマンドが上部に表示され、その出力が下に表示されますが、スクロールや以前のコマンドは表示されません。

PROMPT_COMMAND='tput cup 0 0; tput el; tput el1'

この関数は以前のコマンドを下に配置しますが、各コマンドを個別にパイプする必要があります。残念ながら、exec > >(f)個々のコマンドではなく bash 全体をリダイレクトするため、これについてはサポートできません。関数は次のとおりです。

f () { tee ~/.STDIN | wc -l | xargs expr 1 + | xargs tput il && cat ~/.STDIN; }

次に、次のようにすべてのコマンドを実行します。

command args |f

出力を保存し、長さ+1に等しい数の空白行を作成し、出力を戻します。必要に応じて、最後に偽のプロンプトまたは水平線を表示する行をタグ付けできます。例:

printf '%*s' $COLUMNS | tr ' ' _;

この関数全体の代わりとなる、面倒ではあるが自動的な方法として、先ほどの $PROMPT_COMMAND の末尾に、ある程度任意の 11 行をクリアするコマンドを追加することができます。

PROMPT_COMMAND='tput cup 0 0; tput el; tput el1; tput il 11'

tput -S複数のバイナリ呼び出しを回避するためにも使用できます。


$PROMPT_COMMANDはから得たhttps://github.com/swirepe/alwaysontop

答え2

残念ながら、これはかなり難しいでしょう。アプリケーションとOS-Xターミナル間のプロトコルは、VT100 / ANSI端末制御プロトコル、具体的にはXTermプロトコル。

これには、画面の位置などに関する一連の仮定が含まれており、表示が反転された世界に再マッピングするのは困難です。

さらに悪いことに、ターミナル エミュレーターが受け取るのは、「この文字をこの位置に置く」タイプのコマンドの文字列だけです。コマンド プロンプトと、それによって実行されるコマンドの出力は区別されないため、少なくとも、下にあるシェルの協力がなければ、両方の部分で 1 つの操作を行うことはできません。

シェルとプログラムは、画面が上方向に進み、新しいデータが下部に表示され、永遠に下方向に進み続けることを想定しています。

少なくとも理論的には、端末エミュレーターを変更して、行を逆の順序で表示するようにすることができます。つまり、「一番下の」行を最初に表示し、画面の一番下の「一番上の」行まで表示するようにします。

ただし、これによりコマンド出力の行の順序が逆になるため、残りのコンテンツも逆方向にポップアウトされます。コマンド (例: ls、cat) を「下」に実行し、プロンプトを「上」に移動したい場合は、作業が難しくなります。

これを実装するソフトウェアは知りません。(...ただし、JdeBD のコメントにリンクがあります。) :)

答え3

これは出力を完全に反転するわけではありませんが、プロンプトを一番上に表示します。

https://github.com/swirepe/alwaysontop

使用するには以下を実行します:

git clone https://github.com/swirepe/alwaysontop.git
cd alwaysontop/
source alwaysontop.sh

気に入った場合は、次のように .bash_profile にソースとして入力します。

echo "source ~/alwaysontop/alwaysontop.sh" >> ~/.bash_profile

関連情報