Есть ли способ вывести текст в файл разными цветами в Linux? - PullRequest
1 голос
/ 01 ноября 2010

Я вывожу данные в текстовый файл на Linux, используя C ++.Есть ли способ вывести часть строки текста другим цветом?

Например, я хотел бы иметь возможность писать 0,000 Вт красным цветом.

Общая потребляемая мощность этой модели: 0,000 Вт

Ответы [ 7 ]

7 голосов
/ 01 ноября 2010

Обычные текстовые файлы (* .txt) никоим образом не поддерживают цвет.Вам придется использовать другой формат, например RTF или HTML.

3 голосов
/ 01 ноября 2010

Если вы хотите встроить управляющие коды терминала ANSI в ваш файл, тогда обязательно.

Вот пример использования Ruby для псевдокода.(Синтаксис # {expr} просто форматирует expr с помощью% s или% d и интерполирует его в строку.)

def colorize s, code
  "#{code}#{s}\e[0m" 
end

def color s, n
  colorize s, "\e[#{31 + n % 7}m"
end

Вы можете использовать curses или termcap, но это будет намного сложнее исегодня не нужно, так как каждое окно терминала Linux (и Mac) будет без проблем использовать коды ANSI.

Если вы затем просмотрите этот файл или прямой вывод с помощью less (1), то вам захочетсяиспользуйте less -R.


Обновления: C ++

#include <iostream>
using namespace std;

void color(const char *s, int n) {
  cout << "\e[" << (31 + n % 7) << "m" << s << "\e[0m";
}

int main() {
  color("How now", 0);
  color(" brown cow", 1);
  color(" Now is the", 2);
  color(" time.", 3);
  cout << endl;
  return 0;
}

И C99:

#include <stdio.h>

void colorize(const char *s, const char *code) {
  printf("%s%s\e[0m", code, s);
}

void color(const char *s, int n) {
  char t[32];

  sprintf(t, "\e[%dm", 31 + n % 7);
  colorize(s, t);
}

int main(void) {
  color("How now", 0);
  color(" brown cow", 1);
  color(" Now is the", 2);
  color(" time.\n", 3);
  return 0;
}
1 голос
/ 01 ноября 2010

Для получения дополнительной информации о кодах выхода ANSI (иногда также называемых кодами выхода VT100) см. http://en.wikipedia.org/wiki/ANSI_escape_code.

1 голос
/ 01 ноября 2010

Если вы просто хотите сделать простые, вы можете использовать код как в

http://deathray.us/code/color_output.html

const char COL_RESET[] = "\x1b[0m";
const char RED[]       = "\x1b[31m";
cout << RED << "Red looks good" << COL_RESET << endl;

подробнее о: http://en.wikipedia.org/wiki/ANSI_escape_code

1 голос
/ 01 ноября 2010

Лучший способ сделать это через библиотеку curses:

http://en.wikipedia.org/wiki/Curses_%28programming_library%29

0 голосов
/ 01 ноября 2010

Это зависит от того, что вы делаете со своим текстовым файлом. Если вы используете cat или more (или даже grep с предостережениями) или иным образом выводите данные непосредственно в окно терминала, вы можете получить цвет с помощью цветовых кодов ANSI, таких как @DigitalRoss и несколько других. Но если вы будете использовать что-либо еще для просмотра файла - less, Vim, EMACS, gedit, Firefox и т. Д. - цветов не будет, и вместо этого в вашем текстовом файле будет выглядеть мусор.

Итак, ответ на ваш вопрос «да, но» : Да, есть способ добавить цвет в ваши текстовые файлы, но он не работает, за исключением случаев, когда он отображается напрямую, без интерпретации. , к VT100-совместимому терминалу. Поэтому я не буду использовать контрольные коды для текстового файла, который я хотел бы передать другим людям, потому что я не знаю, как они будут его просматривать, и я серьезно сомневаюсь, что они будут использовать cat.

Если вы хотите, чтобы ваша программа писала напрямую в терминал, отправляйтесь в город с цветовыми кодами. Но было бы неплохо добавить какой-нибудь способ их отключения, потому что кто-то другой может захотеть перенаправить вывод вашей программы в файл без необходимости их отфильтровывать.

0 голосов
/ 01 ноября 2010

Если вы используете что-то вроде vim для просмотра вашего txt файла. Можно добавить файл синтаксиса, который соответствует определенным словам определенного цвета. Хорошая вещь в этом подходе состоит в том, что вам не нужно добавлять информацию о цвете в сам текстовый файл, используя теги html и т. Д. Однако цвет не будет переносимым, так как он все равно находится в ваших настройках vim.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...