147

カラー出力を必要とする単純なアプリケーションを作成しています。出力を emacs や bash のように色付けするにはどうすればよいですか?

私のアプリケーションは UNIX システム専用なので、Windows は気にしません。

4

7 に答える 7

335

最新のターミナル エミュレータはすべて、ANSI エスケープ コードを使用して色やその他のものを表示します。
ライブラリを気にしないでください。コードは非常に単純です。

詳細はこちら

C での例:

#include <stdio.h>

#define ANSI_COLOR_RED     "\x1b[31m"
#define ANSI_COLOR_GREEN   "\x1b[32m"
#define ANSI_COLOR_YELLOW  "\x1b[33m"
#define ANSI_COLOR_BLUE    "\x1b[34m"
#define ANSI_COLOR_MAGENTA "\x1b[35m"
#define ANSI_COLOR_CYAN    "\x1b[36m"
#define ANSI_COLOR_RESET   "\x1b[0m"

int main (int argc, char const *argv[]) {

  printf(ANSI_COLOR_RED     "This text is RED!"     ANSI_COLOR_RESET "\n");
  printf(ANSI_COLOR_GREEN   "This text is GREEN!"   ANSI_COLOR_RESET "\n");
  printf(ANSI_COLOR_YELLOW  "This text is YELLOW!"  ANSI_COLOR_RESET "\n");
  printf(ANSI_COLOR_BLUE    "This text is BLUE!"    ANSI_COLOR_RESET "\n");
  printf(ANSI_COLOR_MAGENTA "This text is MAGENTA!" ANSI_COLOR_RESET "\n");
  printf(ANSI_COLOR_CYAN    "This text is CYAN!"    ANSI_COLOR_RESET "\n");

  return 0;
}
于 2010-07-10T14:04:16.567 に答える
15

カラー シーケンスの処理は煩雑になり、異なるシステムでは異なるカラー シーケンス インジケーターが使用される場合があります。

ncursesを試してみることをお勧めします。色以外にも、ncurses はコンソール UI で多くの優れた機能を実行できます。

于 2010-07-10T13:50:02.463 に答える
10

特別な色制御コードを出力して、色付きの端末出力を取得できます。ここに、色を印刷する方法に関する優れたリソースがあります。

例えば:

printf("\033[22;34mHello, world!\033[0m");  // shows a blue hello world

編集:私のオリジナルはプロンプトカラーコードを使用していましたが、これは機能しません:(これは機能します(テストしました)。

于 2010-07-10T13:42:20.390 に答える
10

すべての機能に 1 つの色を割り当てて、より便利にすることができます。

#define Color_Red "\33[0:31m\\]" // Color Start
#define Color_end "\33[0m\\]" // To flush out prev settings
#define LOG_RED(X) printf("%s %s %s",Color_Red,X,Color_end)

foo()
{
LOG_RED("This is in Red Color");
}

同様に、さまざまなカラー コードを選択して、これをより一般的なものにすることができます。

于 2010-07-10T14:00:58.737 に答える
3

文字列の書式設定で文字を印刷できないためです。このようなものでフォーマットを追加することも考えられます

#define PRINTC(c,f,s) printf ("\033[%dm" f "\033[0m", 30 + c, s)

fのような形式ですprintf

PRINTC (4, "%s\n", "bar")

印刷しますblue bar

PRINTC (1, "%d", 'a')

印刷しますred 97

于 2016-06-04T03:09:37.367 に答える