5

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

これは Windows で必要ですが、これはクロス プラットフォームであることを意図しているため、最終的には Linux と Mac の実装を行う予定です。

4

7 に答える 7

19

Windows だけでなく Linux でも機能する 2 つの単純な可能性がありますが、1 行のみです。

  • printf("\b");は1文字返されるので、バックスペースしてこれをループで起動したい文字数を数えるか、n個の数字だけを書いて次のようにすることを知っているかもしれません
    printf("\b\b\b\b\b\b\b\b\b\b");
  • printf("text to be overwritten by next printf\r");これにより、カーソルが行の先頭に戻るため、次の printf によって上書きされます。必ず同じ長さ以上の文字列を書き込んで、完全に上書きしてください。

いくつかの行を書き直したい場合、ncursesほど移植可能なものはなく、実質的にすべてのオペレーティング システムにそのためのライブラリがあり、ANSI の違いを気にする必要はありません。

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

于 2009-01-03T12:16:27.710 に答える
3

ncurses をチェックしてください。ほとんどのスクリプト言語のバインディングがあります。

于 2009-01-03T12:15:45.120 に答える
3

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

于 2009-01-03T12:30:28.087 に答える
2

色の魔法、カーソルの位置の特定、ブリックなどは、ANSIエスケープコード内にあります。ANSIコードを処理できるテキストコンソールは、コンソールに出力するだけで使用できます(つまり、bashスクリプトのechoまたはCのprintf()関数を使用)。

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

多くの人が、GUIのようなテキストベースのアプリケーションのデファクトスタンダードであるNcursesライブラリについて言及しています。このライブラリが行うことは、すべての端末の違い(Windows / Unixフレーバー)を非表示にして、すべてのプラットフォームで可能な限り同一の情報を表すことですが、私自身の経験から、これは常に正しいとは限りません(つまり、一般的なテキストウィンドウフレーム)。特別な文字はすべての文字エンコードで使用できるわけではないため、変更してください)。ncursesを使用する場合の対応は、完全なAPIであり、フォントの色の変更、画面のクリーニング、カーソルをランダムに戻すなどの単純な目的でANSIエスケープシーケンスを単純に書き出すよりも、最初から始めるのがはるかに難しいことです。ポジション。

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

PS1="\[\033[34m\][\$(date +%H%M)][\u@\h:\w]$ "
于 2009-01-03T12:50:07.673 に答える
2

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

Cで作業している場合は、試しputchar(8);てみてくださいputchar(13);

于 2009-01-03T12:06:56.293 に答える
1

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

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

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

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

それが役に立てば幸い。

于 2009-01-03T12:45:50.647 に答える
1

Ncursesを使用できます-

ncursesパッケージは、端末に依存しない画面描画と入力イベント処理のためのサブルーチン ライブラリであり、高レベルの画面モデルをプログラマーに提示し、端末タイプ間の違いを隠し、出力の自動最適化を行って、1 画面いっぱいのテキストを別の画面に変更します。

于 2009-01-03T12:17:13.947 に答える