Как настроить цвет шрифта для xterm в приложении Linux в c

У меня есть встроенная целевая система на базе Intel, и Linux работает.

Я видел, что цвет шрифта команд ядра при выводе на экран (в telnet-консоли) настраивается автоматически. Например, если фон консоли xterm светлый, текст черный, а для консоли с черным фоном текст белый.

Я загрузил свое приложение в c и запустил в командной строке Linux. Цвет шрифта фиксированный черный, поэтому я не вижу никаких сообщений printf на черном фоне xterm.

Может ли кто-нибудь сказать мне, как динамически настроить в программе c?


person windflow    schedule 26.11.2014    source источник
comment
Вы этого не делаете, вместо этого вы меняете настройки своего терминала, чтобы либо изменить цвет фона, либо изменить цвет шрифта.   -  person Some programmer dude    schedule 26.11.2014
comment
Вероятно, наиболее надежным подходом является использование библиотеки ncurses для вывода. Быстрым и грязным является использование escape-коды ANSI.   -  person Paulo Scardine    schedule 26.11.2014
comment
Спасибо за информацию.   -  person windflow    schedule 27.11.2014


Ответы (1)


Проверьте коды цветов на этом сайте: http://misc.flogisoft.com/bash/tip_colors_and_formatting.

И вот пример того, как вы можете его использовать.

#include <stdio.h>

int foreground[] = {
  39, 30, 31, 32, 33, 34,
  35, 36, 37, 90, 91, 92,
  93, 94, 95, 96, 97
};

int background[] = {
  49, 40, 41, 42, 43, 44,
  45, 46, 47, 100, 101, 102,
  103, 104, 105, 106, 107
};

int main() {
  int flen = sizeof(foreground)/sizeof(int);
  int blen = sizeof(background)/sizeof(int);

  char fcolor[10];
  char bcolor[10];

  char dfbcolor[] = "\e[39m\e[49m"; // default foreground and background color

  for (int i = 0; i < flen; i++) {
    for (int j = 0; j < flen; j++) {
      sprintf(fcolor, "\e[%dm", foreground[i]);
      sprintf(bcolor, "\e[%dm", background[j]);
      printf("%s%shello, world%s\n", fcolor, bcolor, dfbcolor);
    }
  }

  return 0;
}

int массивы foreground и background - это цветовые коды для переднего плана и фона, которые я нашел в таблице на сайте, который я вам дал.

Повеселись :)

person Herman Zvonimir Došilović    schedule 26.11.2014
comment
Спасибо большое. Очень мило с вашей стороны, что вы дали мне код, который помог мне быстро понять. #define FONT_COLOR_DEFAULT \033[49m\033[39m\033[0m fprintf(stdout, FONT_COLOR_DEFAULT); работал на меня. - person windflow; 27.11.2014
comment
Обратите внимание, что "\e" является расширением GCC. - person Some programmer dude; 27.11.2014