2011-07-08 19 views
-1

私は端末のウィンドウに物を出力し、残りの部分ではなく、その一部だけをクリアしたい(前半や四半期など)。私はこれを行う方法がありますか?私はシステム( "クリア")を使用していたが、それはすべてをクリアする。私はncursesを使用したくないです。どんな助けもありがとうございます。C++ unixの端末画面の一部をクリアしますか?

+0

あなたの端末は何ですか? –

+0

ubuntuを使っているだけなので、そこに何が入っていても – Sterling

+0

何も動かない場合は、 "\ n"を100回印刷して変更する必要はありません。 –

答えて

3

一般的な解決方法が必要な場合は、端末に戻るか、特殊文字を使用して削除する部分を上書きして、空白で上書きして表示する必要があります。

端末では、thisポストに戻って調べることができます。キャリッジリターン(\ r)文字を使用する方法を示すいくつかの例が含まれています。

さらに、ansiエスケープシーケンスを使用して赤いテキストを取得する方法の例もあります。同じ方法で、ANSIエスケープシーケンスを使用して端末の特定の位置に書き込むことができます。hereを見てください。このリンクの「カーソル位置を強制」では、クリアしたいすべての位置に空白を書き込むことができます。

ただし、すべての端末がこれらの方法をサポートしているわけではなく、出力をファイルにストリーミングすると、それらの特殊文字が含まれることに注意してください。

3

あなたの端末の機能を理解していれば、単にそれらをstdoutにcoutで書き込むことができます。

どこから起動するのかわからない場合は、次のように試してみてください。プロンプトが表示されたら、man terminfoと入力すると、端末の機能の一覧が表示されます。 tputで試してみてください。

% tput el | od -t x1 
0000000 1b 5b 4b              
0000003 

は「clr_eol」私の端末の問題にこれらのバイトを送信する行の末尾にクリアされます(「エル」):次に、あなたは印刷する必要があるコードのようなものであるかを把握。ターミナルでカーソルをどのように動かすか、行をクリアする方法を理解したら、完了です。

gnome-terminalを使用しているのを見て、これを実行すると、カーソルを自宅に移動し、行末まで消去し、下に移動し、行末まで消去し、下に移動して消去します行末。あなたは印刷する必要があるかを把握するには

:(COUTで)stdoutに

% (tput home ; tput el ; tput cud1 ; tput el ; tput cud1 ; tput el ; tput cud1 ; tput el ; tput cud1 ; tput el) | od -t x1 
0000000 1b 5b 48 1b 5b 4b 0a 1b 5b 4b 0a 1b 5b 4b 0a 1b 
0000020 5b 4b 0a 1b 5b 4b           
0000026 

をそれらのバイト(1B 5B 48など)を送信するには、C++からのトリックを行います。

ncursesを使用すると移植性が向上します。使用したくない場合は、最終的に再実装することができます。

関連する問題