2016-08-04 4 views
0

私は以下のように2行のプロンプトを表示しています。 clearのようなコマンドで画面をクリアしますが、の両方とものプロンプト行が表示されるようにしますか?2行のプロンプトで端末の画面をクリアし、両方の行を表示し続ける

~/current/directory git-branch* 
$ echo 'hello... 
+0

クリアプロンプト、複数行を保持します... – 123

+1

ああ、あなたは正しいです。私はC-lを使用していましたが、同じ動作をしません。私は彼らが同じだと思った。 – Joe

答えて

0

short:いいえ、そのようなコマンドはありません。

long:スクリプトを作成します。ここでは、トピックについて簡単に紹介します。

clearプログラムは画面全体を消去します。シェルは新しいプロンプトを描画します(新しくクリアされた画面の一番上に表示されます)。しかし、の画面の一部をクリアしてからコマンドが完了した後、シェルに戻るとします。

あなたは terminfo capability edである、画面の最後に、現在のカーソル位置からクリアANSIエスケープシーケンスをサポートして使用することになり

ほとんどの端末:

ed=\E[Jとして infocmpで示さ
clr_eos     ed  cd clear to end of 
             screen (P*) 

あなたはtputを使用して、例えば、スクリプトでそれを使用することができます。

tput ed 

これは、「ANSI.SYSは」ANSI標準と異なり地域の一つである(実際にはECMA-488.3.29 ERASE IN PAGE参照) 。 ansi.sysは、それが

printf '\033]J' 

を受信したときにスクリプトに何人かの人々をハードコードこの画面全体をクリアし、「ANSI.SYSは」標準と一致していることを前提としています。 ncurses FAQのHow do I get color with VT100?を参照してください。

これをテストする方法についてのコメントは表示されていません。プロンプトの下の画面に何も表示されない可能性があります。したがって、tput edと入力すると何も表示されないことがあります。上記のように、カーソルは以下のをクリアします。あなたは(2ライン)の上にプロンプ​​トクリアしたい場合、それはもう少し複雑だ:カーソル位置

  • 移動保存

    • カーソルまでの二行
    • 明らかカーソル
    • カーソル位置を復元します。

    あなたのプロンプトが画面の最初の行にあることを起こる場合は、このカーソル位置のレポートを使用して検出することができました。しかしそれは、表現されたような質問よりも複雑です。スペースは上記があることを想定します。消去のそのタイプのために定義された定義済みのterminfo(またはtermcapの)機能がありませんのでtputが、ここで使用されている

    tput sc 
    tput cuu 2 
    tput cub 999 
    printf '\033[1J' 
    tput rc 
    

    定期printfのではなく。

    あなたは、端末の一番上の行にプロンプ​​トが起動ケースを処理したい場合は、現在の行にを見つけ、上記の(またはしない)クリアを行うかどうかを判断する必要があると思います。

    さらに読書:

  • +0

    'tput ed'や' printf '\ 033] J''は 'konsole'で作業しています。 –

    +0

    'TPUTのed'も' printfの「\ 033] J''どちらも、ST(sucklessターミナル)で働いていました。どちらのコマンドも単純に復帰します。 xtermでは 'printf '\ 033] Jがハングします。 – Joe

    +0

    私はそれが** 'CSI J' **ではなく** OSC J' **ですので、動作するとは思わないでしょう。 xtermは期待通りにそれを処理します。その点から、konsoleとtputに関するコメントは、いくつかの明確化が必要です(konsoleは期待通りに動作します...)。 –

    関連する問題