2008-09-16 15 views
8

いくつかのプログラムは端末に表示されているものを編集します(ランダムな例を選択するには、プログラム 'sl')?私はここのLinuxターミナルについて考えていますが、他のOSでも起こるかもしれませんが、わかりません。私はいつもテキストが表示されたら、そこにとどまったと思っていました。画面全体を再描画せずにどのように変更しますか?端末の画面を再描画する

答えて

3

多くのアプリケーションはcursesライブラリの使用、またはそれに結合するいくつかの言語を作ります。

進捗情報の更新など、1行で書き直す場合、エスケープシーケンス "\ r"で指定されることが多い特殊文字 "carriage return"は現在の行の先頭にカーソルを戻すことができます。以前そこに書かれたものを上書きする。

2

端末に送信してカーソルを戻す文字があります。その後、テキストを上書きすることができます。

リストhereがあります。 「カーソルを何かに移動」の行に注意してください。

+0

は、今私は理解して...それは常に文字セットを変更するだろうと私はハハ、再起動する必要がありました。 – krs013

3

改行( '\ n')の代わりにキャリッジリターン( '\ r')を使用して端末に送信された行を終了すると、カーソルは現在の行の先頭に移動し、プログラム前に印刷したものの上にさらにテキストを印刷する。私はこれを時折長いタスクの進捗メッセージに使用します。

あなたは、それ以上の端末編集を行うncursesを使用するか、またはその変異する必要がある場合。 @Corporal厄介なの答えに構築するには

4

として、あなたのためにこの機能の一部を処理する使用可能なライブラリ

#!/bin/bash 
i=1 
while [ true ] 
    do 
      echo -e -n "\r $i" 
      i=$((i+1)) 
    done 

このシェルスクリプトを試してみてくださいは、-nオプションがあります改行を防ぐことができます。 ..と\ rは、あなたが同じラインに何度も何度も書き...キャリッジリターンを行います - なしscrolingまたは何ので、今まで

1

伍長厄介は、これは最低レベルでどのように行われるかを答えています。簡単な開発のために、curses libraryは単に文字を端末に送るよりも高いレベルの制御を提供します。

1

のncursesを使用すると、スマート端末上のユーザーインターフェイスを描画することができますクロスプラットフォームのライブラリです。

5

あなたがコントロールseuqencesを送って、端末によっては。一般的なシーケンスは、たとえば、特定の位置にカーソルを送るesc [; H(Ansi、Xterm、Linux、VT100など)です。しかし、これはユーザーのタイプや端末によって異なります... curses(terminfoファイルと一緒に)は、あなたのためにその情報をラップします。 cat`や私のターミナルを壊す `` less`でバイナリファイルを表示する理由

関連する問題