web-dev-qa-db-ja.com

UNIXのターミナルアプリケーションのカラーテキスト

Viなど、UNIX用の最初のテキストエディタのような、ターミナルテキストエディタを書き始めました。私の唯一の目標は楽しい時間を過ごすことですが、テキストをカラーで表示できるようにしたいので、ソースコードを編集するために構文を強調表示できます。

どうすればこれを達成できますか?これには特別なPOSIX APIがありますか、それともncursesを使用する必要がありますか? (私はむしろないと思います)

何かアドバイス? UNIX APIの教科書もありますか?

100
Nisanio

これは、カラーコードの使用方法を示す小さなCプログラムです。

#include <stdio.h>

#define KNRM  "\x1B[0m"
#define KRED  "\x1B[31m"
#define KGRN  "\x1B[32m"
#define KYEL  "\x1B[33m"
#define KBLU  "\x1B[34m"
#define KMAG  "\x1B[35m"
#define KCYN  "\x1B[36m"
#define KWHT  "\x1B[37m"

int main()
{
    printf("%sred\n", KRED);
    printf("%sgreen\n", KGRN);
    printf("%syellow\n", KYEL);
    printf("%sblue\n", KBLU);
    printf("%smagenta\n", KMAG);
    printf("%scyan\n", KCYN);
    printf("%swhite\n", KWHT);
    printf("%snormal\n", KNRM);

    return 0;
}
167
karlphillip

これを行う別の方法があります。コードが少しすっきりしているのでこれを好む人もいます(色付けを終了する%sRESETの色はありません)。

#include <stdio.h>

#define RED   "\x1B[31m"
#define GRN   "\x1B[32m"
#define YEL   "\x1B[33m"
#define BLU   "\x1B[34m"
#define MAG   "\x1B[35m"
#define CYN   "\x1B[36m"
#define WHT   "\x1B[37m"
#define RESET "\x1B[0m"

int main()
{
  printf(RED "red\n" RESET);
  printf(GRN "green\n" RESET);
  printf(YEL "yellow\n" RESET);
  printf(BLU "blue\n" RESET);
  printf(MAG "Magenta\n" RESET);
  printf(CYN "cyan\n" RESET);
  printf(WHT "white\n" RESET);

  return 0;
}

これにより、次のようなことが簡単にできます。

printf("This is " RED "red" RESET " and this is " BLU "blue" RESET "\n");
91
David Guyon

おそらく ANSIカラーコード が必要です。ほとんどの* nix端末はそれらをサポートしています。

18
nmichaels

ANSIエスケープシーケンスを使用します。 この記事 について詳しく説明します。 printfでも使用できます。

15
Vivin Paliath