質問

コンソールアプリが色を印刷し、ffmpegなどのアプリが新しい行ではなくそれ自体にテキストを印刷するのを見ました。既存の行に印刷するにはどうすればよいですか?コンソールアプリの最上部または最下部のいずれかにfpsを表示し、通常のprintfをそこに移動して通常どおりにスクロールさせたい

-編集- 私はWindows用にこれが必要ですが、これはクロスプラットフォームであることを意図しているので、最終的にLinuxとMacの実装があります

役に立ちましたか?

解決

LinuxとWindowsで動作する2つの簡単な可能性がありますが、1行だけです:

  • printf(" \ b"); は1文字を返します。そのため、バックスペースしたい文字数をカウントしてループで起動するか、または書くだけであることがわかります。 n個の数字を指定して
    printf(" \ b \ b \ b \ b \ b \ b \ b \ b \ b \ b");
  • printf("次のprintf \ r"によって上書きされるテキスト); これはカーソルを行の先頭に戻すので、次のprintfはそれを上書きします。必ず同じ長さ以上の文字列を作成して、完全に上書きしてください。

複数の行を書き換えたい場合、 ncurses ほど移植性の高いものはありません。事実上すべてのオペレーティングシステムで使用するためのライブラリであり、ANSIの違いに注意する必要はありません。

編集:ncursesウィキペディアページへのリンクを追加し、優れた概要と紹介、リンクリスト、お好みの言語への翻訳を提供します

他のヒント

ncursesをチェックアウトします。ほとんどのスクリプト言語用のバインディングがあります。

'\ n' の代わりに '\ r' を使用できます。

ASCII文字番号8(A.K.A. Ctrl-H、BSまたはBackspace)を使用すると、1文字をバックアップできます。 ASCII文字番号13(A.K.A Ctrl-M、CRまたはキャリッジリターン)は、行の最初にカーソルを返します。

Cで作業している場合は、 putchar(8); および putchar(13);

を試してください。

色のマジック、カーソルの位置特定、blikingなどは ANSIエスケープコード。 ANSIコードを処理できる任意のテキストコンソールは、それらをコンソールに出力するだけで使用できます(つまり、bashスクリプトのエコーまたはCのprintf()関数によって)。

Unix端末はANSIエスケープシーケンスをサポートし、Windowsの世界では以前のMS-DOS時代にそれらをサポートしていましたが、マルチバイトコンソールのサポートによりこれに終止符が打たれました。詳細については、こちらをご覧ください。ただし、 Windowsで利用可能。さらに、WindowsにCygwinがインストールされている場合、ANSIコードは他のUnix端末と同じように機能します。

多くの人が、GUIに似たテキストベースのアプリケーションの事実上の標準であるNcursesライブラリに言及しています。このライブラリが行うことは、すべてのプラットフォームで可能な限り同一の同じ情報を表すために、すべての端末の違い(Windows / Unixフレーバー)を非表示にすることですが、私自身の経験から、これは必ずしも真実ではないことを伝えます(つまり、典型的なテキストウィンドウフレーム特殊な文字はすべての文字エンコーディングで利用できるわけではないため、変更してください)。 ncursesを使用することの対応物は、完全なAPIであり、フォントの色の変更、画面のクリーニング、カーソルのランダムな移動などの単純なことを行うためにANSIエスケープシーケンスを単に書き出すよりも、開始がはるかに難しいということです位置。

完全を期すために、プロンプトを青に変更して日付を表示するLinuxでのANSIシーケンスの使用例を貼り付けます。

PS1="\[\033[34m\][\$(date +%H%M)][\u@\h:\w]$ "

Ncurses -

を使用できます。
  

ncurses パッケージは、端末に依存しない画面描画および入力イベント処理用のサブルーチンライブラリで、プログラマに高レベルの画面モデルを提示し、端末タイプの違いを隠し、出力の自動最適化を行いますテキストのスクリーンフルを別のスクリーンフルに変更するには

開発中のプラットフォームによっては、古いASCII制御コードではなく、おそらくより強力なAPIを使用できます。

e.g。 Win32で作業している場合は、実際にコンソール画面バッファーを直接操作できます。

開始するのに適した場所はこちらです http://msdn.microsoft.com/en-us /library/ms683171(VS.85).aspx

他のプラットフォーム用のテキストストリーム以外のものとしてコンソールにアクセスできるようにする類似の機能/ APIを探していました。まだ何も見つかりませんでしたが、もう一度、私はそんなに一生懸命探していませんでした。

お役に立てば幸いです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top