プッシュダウンターミナル出力


15

端末出力の出力順序を逆にする標準的な方法、すなわち:

~/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端末プログラムの出力部分がどこで定義されていますか?


これは私を混乱させますが、私はあなたの努力を称賛します。linux / unix / open sourceの主要なレッスンの1つは、One Sizeがすべてに適合しないことです。
ブルースエディガー

シェルのソースコードを変更しない限り、これはまったく不可能だと思います(例:)bash
レナン

5
シェル以外のハッキングも必要です。電気機械式であったため、端末はこのようにスクロールしていました。少なくとも、ターミナルエミュレータ、おそらくシェルもハッキングする必要があると思います。
-Alexios

これは、実際には直観に反しています。ENTERキーの矢印に気づきましたか?上ではなく下の行を指します。
ドレスデンデ

端末から出力アイテムを取得する方法はありますか?私の考えは、これらの各出力アイテムを取得し、最新の常に表示されるようにツイートを投稿する方法と同様に各アイテムを処理するラッパーを作成することですWrapper UIの上部に入力プロンプトを貼り付けます。
-rudolph9

回答:


6

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

出力を保存し、length + 1に等しい多数の空白行を作成してから、出力を戻します。必要に応じて、偽のプロンプトまたは水平ルールを表示する行にタグを付けることができます。例えば

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

この機能全体に対するくだらないが自動的な代替として、以前の$ PROMPT_COMMANDの最後にコマンドを追加して、ややarbitrary意的な11行をクリアできます。

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

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


https://github.com/swirepe/alwaysontop$PROMPT_COMMANDから取得しました。


6

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

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

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

シェルとプログラムは、画面が上に向かって進むと仮定します-新しいデータは下にあり、下に永遠に続きます。

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

ただし、コマンド出力の行の順序が逆になるため、残りのコンテンツも後方に飛び出します。コマンド(例:ls、cat)を "down"で実行したいが、 "up"のライフを移動するよう求めるプロンプトが難しい場合。

これを実装するソフトウェアは知りません。(...へのリンクについては、これに対するJdeBDのコメントを参照してください。):)



5

これは出力を完全に逆にすることはありませんが、プロンプトを一番上に保ちます:

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

1
これは少しバグがあります(たとえば、タブのオートコンプリートと履歴を使用)が、このUIが適切に実装された場合にどのように感じるかについての非常に良いデモです。私はそれが価値があると思う-人々がそれを望んでいるかどうかを知るのを助けること!
scipilot
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.