XTermを起動して下部にメッセージを表示するには?

XTermを起動して下部にメッセージを表示するには?

XTerm を起動すると、端末の最初の行でプロンプトが開始されます。コマンドを実行すると、プロンプトは下部に到達するまで下に移動し、それ以降はそのまま残ります(そうでない場合、またはShiftマウスPage Downがそれを変更する可能性があります)。最終ライフサイクルの始まりを「特別」にする代わりにプロンプトは常に端末の下部にある必要があります。私が持っている点を参考にしてください複数行のプロンプト

もちろん、以前と同じように機能する必要があります(サイズ調整可能、スクロール可能、出力から不要な改行なし、出力が奇妙に消えない)。したがって、同様のPROMPT_COMMAND='echo;echo;...'ものはオプションではありません。理想的には、ソリューションはシェルに固有のものではありません。

編集する:これ現在のソリューション単純なケースを処理するときにいくつかの問題があります。

  • それバッシュ固有。理想的なソリューションは、他のシェルに移植可能でなければなりません。
  • それ他のプロセスによって修正されると失敗します。PS1。たとえば、virtualenvがあります(virtualenv)スタートPS1そして常にスクロールせずに見える部分の上から消えます。
  • Ctrll-今削除歴史の最後のページ。

XTermを分岐する以外に、これらの問題を回避する方法はありますか?

ベストアンサー1

使用している場合は、bash次のトリックを実行する必要があります。

TOLASTLINE=$(tput cup "$LINES")
PS1="\[$TOLASTLINE\]$PS1"

tputまたは(各プロンプトの前にコマンドを実行しますが、ターミナルウィンドウのサイズを変更した後はそれほど効率的ではありません):

PS1='\[$(tput cup "$LINES")\]'$PS1

終了コードが変更されないようにするには、tput明示的に保存してリセットするだけです。

PS1='\[$(retval=$?;tput cup "$LINES";exit $retval)\]'$PS1

この変数はローカル変数なので、シェルで定義した変数にはretval影響しません。retval

ほとんどの端末cup機能は同じなので、\e[y;xHハードコードすることもできます。

PS1='\[\e[$LINES;1H\]'$PS1

後でPS1をリセットしないようにするには、このPROMPT_COMMAND変数を使用することもできます。設定するとコマンドで実行されます。今後出力プロンプト。だからこんな効果も得られます

PROMPT_COMMAND='(retval=$?;tput cup "$LINES";exit $retval)'

もちろん、リセットはPS1ここには影響しませんが、他のソフトウェアも変更される可能性がありますPROMPT_COMMAND

おすすめ記事