Comments 79
интересно.
А вообще еще можно посмотреть в сторону grc, например, который из коробки умеет раскрашивать некоторое количество общеизвестных утилит.
Автор молодец, такое сделать.
А вообще еще можно посмотреть в сторону grc, например, который из коробки умеет раскрашивать некоторое количество общеизвестных утилит.
Автор молодец, такое сделать.
+1
Раскрашивать общеизвестные утилиты нынче только ленивый не умеет. Но все (все!) они используют олдскульные 16 цветов. И
Я говорю а) про свой лог и б) про настройку любых сторонних утилит раскраски пастельными цветами.
grc
(который, как и всякий комбайн, заведомо проигрывает vimdiff+tig
для гита, ну и так далее) — тоже пугает вырвиглазностью.Я говорю а) про свой лог и б) про настройку любых сторонних утилит раскраски пастельными цветами.
0
А пример не могли бы привести, к примеру, для какого-нить лога, если Вам не сложно.
А то я что-то сходу и не могу понять, как раскрашивать уже лежащий на винте чисто текстовый лог, например.
А то я что-то сходу и не могу понять, как раскрашивать уже лежащий на винте чисто текстовый лог, например.
-1
Ну и PS1, конечно, переписан с нуля.
Не мучайте себя, возьмите zsh. Здесь цвета сокращаются до
%F{blue}…%f
/%K{blue}…%k
(только первые 16, остальные имеют число вместо имени) (Foreground, bacKground), %B…%b
для жирного, %U…%u
— подчеркнутого и %S…%s
— инверсного (похоже zsh не предоставляет возможности сделать текст наклонным с помощью %{char}
. Не представляет проблемы, так как konsole и xterm всё равно это не поддерживают, только urxvt).+2
Спасибо за совет, я уже и не вспомню, сколько лет назад перешел на
И, честно признаться, я все равно не способен в голове высчитать число, которое нужно запихнуть в
zsh
. Чисто смеха ради, могу сказать, что цветной промпт, который я держу в гите вместе с другими настройками иногда выкатывается на чужие машины. Где, сюрприз, иногда бывают другие шеллы. Да и коллеги мои не всегда хотят на него переходить. Странно, правда, заставлять человека для чтения логов накатить другой шелл?И, честно признаться, я все равно не способен в голове высчитать число, которое нужно запихнуть в
%F
, чтобы получить бирюзовый на алом. А моему скрипту все равно, что генерировать.0
Накатить для логов — нет. Когда меня попросили добавить в formatvim вывод с помощью ANSI escape последовательностей, мне тоже пришлось с этим разбираться. А вот писать PS1 в таком виде я бы никогда не стал. Точно так же, как не стал бы использовать в PS1 что‐то, кроме первых 16 цветов — мне ещё случается работать во framebuffer.
0
Относительно PS1 в других оболочках — я в этом отношении предпочитаю оставить приглашение по‐умолчанию или, в любом случае, отличное от того, что у меня в zsh, чтобы оно всегда напоминало мне о том, что это другая оболочка, в которой недоступны привычные мне возможности zsh.
0
А чем вам
Кроме того я не предлагаю прямо эти кракозябры лепить. Можно же свой
if
не угодил-то? Framebuffer вам скажет «linux» на «echo $TERM». Кроме того я не предлагаю прямо эти кракозябры лепить. Можно же свой
%F
написать.+2
Здорово! спасибо!
0
По ссылке пишут про «TERM=xterm256color», а в статье про «TERM=xterm-256color». Вопрос: в чём правда, брат? =)
0
grep и tail цветных логов взрывает мне мозг.
+1
Ну так приличный софт проверяет, что за терминал используется, подсвечивая выхлоп цветом только если это действительно терминал, а не файл или труба.
0
leto имеет в виду
run_with_log | grep ERROR
.0
Дык, вы же выхлоп run_with_log отправляете в трубу. Следовательно, если этот самый run_with_log написан по-человечески, мусора в grep не будет.
+1
Научите, пожалуйста, изнутри run_with_log определить, что мой вывод перенаправили в пайп.
0
Пожалуйста.
Код
#include <stdio.h>
#include <unistd.h>
#define RED "\033[1;32;41m"
#define GREEN "\033[5;30;42m"
#define OLDCOLOR "\033[0;0;0m"
main(){
if(isatty(STDOUT_FILENO)) printf(RED "This is a TTY! " GREEN "Output may be colorized!" OLDCOLOR "\n");
else printf("This is pipe, no colors!\n");
}
Выхлоп
+10
Вот уж воистину: век живи — век учись. Спасибо!
+2
А вот так можно сделать цветной printf
#define RED "\033[1;31;40m"
#define GREEN "\033[1;32;40m"
#define OLDCOLOR "\033[0;0;0m"
int (*red)(const char *fmt, ...);
int (*green)(const char *fmt, ...);
int r_pr_(const char *fmt, ...){
va_list ar; int i;
printf(RED);
va_start(ar, fmt);
i = vprintf(fmt, ar);
va_end(ar);
printf(OLDCOLOR "\n");
return i;
}
int g_pr_(const char *fmt, ...){
va_list ar; int i;
printf(GREEN);
va_start(ar, fmt);
i = vprintf(fmt, ar);
va_end(ar);
printf(OLDCOLOR "\n");
return i;
}
int main(int argc, char *argv[]){
if(isatty(STDOUT_FILENO)){ // make color output in tty
red = r_pr_; green = g_pr_;
}else{ // no colors in case of pipe
red = printf; green = printf;
}
…
red("Красный текст\n");
…
green("Зеленый текст\n");
}
0
«Раньше были времена, а теперь мгновения. Раньше поднимался …, а теперь — давление.»
Кто ж нынче на си-то вывод раскрашивает? А на руби это две строчки ;-)
Кто ж нынче на си-то вывод раскрашивает? А на руби это две строчки ;-)
0
> Кто ж нынче на си-то вывод раскрашивает?
Я раскрашиваю. Язык простой, да и не знаю я больше ни одного ЯП, кроме С (мне и не надо — работа с программированием почти не связана). А хочется иной раз цветом важные моменты «выхлопа» программы подчеркнуть.
Я раскрашиваю. Язык простой, да и не знаю я больше ни одного ЯП, кроме С (мне и не надо — работа с программированием почти не связана). А хочется иной раз цветом важные моменты «выхлопа» программы подчеркнуть.
+3
Во-первых, вы знаете еще как минимум shell script. Во-вторых — это во мне ностальгия разговаривает вместо меня самого.
Я всегда считал, что если человек задумывается о «выхлопе» — это настоящий программист. А если знает 800 языков — еще не факт.
Я всегда считал, что если человек задумывается о «выхлопе» — это настоящий программист. А если знает 800 языков — еще не факт.
0
Python
import sys
RED = "\033[1;32;41m"
GREEN = "\033[5;30;42m"
OLDCOLOR = "\033[0;0;0m"
if sys.stdout.isatty():
print("".join([
RED,
"This is a TTY! ",
GREEN,
"Output may be colorized!",
OLDCOLOR
]))
else:
print("This is pipe, no colors!")
+1
Перед пайпом на grep или tail:
sed -e '/\e[.*m//g'
0
а в ubuntu 12.04 если через putty подключаться (а там сказать что TERM=xterm-256color и что PuTTY поддерживает 256 цветов рапортовать) — не показывает 256 цветов.
кто-нить с этим работал?
p.s. проверял code.google.com/p/eddys-bash-scripts/source/browse/colors этим
кто-нить с этим работал?
p.s. проверял code.google.com/p/eddys-bash-scripts/source/browse/colors этим
0
А есть пример того, как оно должно выглядеть?
0
Я не люблю доверять скриптам, в которых такая кодировка. Кроме того там явно видны циклы
Попробуйте на целевой убунте «
seq 30 37
, что тоже не особо радует.Попробуйте на целевой убунте «
sudo apt-get install ncurses-term
». 0
Тот скрипт — для 16 цветов.
Вот — он же для полного вырвиглазия:
Вот — он же для полного вырвиглазия:
Скрытый текст
#!/bin/bash
TERM="xterm-256color"
COLRS="$(seq 1 8 256)"
for A in 1 2 4 5 7 8 9
do
echo -e "\033[0m\n\n Свойство $A:\n"
for B in $COLRS
do
echo -e "\nЦвет $B\c"
for C in $COLRS
do
echo -e "\033[$A;38;05;$B;48;05;$C""m Фон $C\t\c"
done
echo -e "\033[0m\c"
done
done
echo -e "\033[0m\n\n"
+1
> последовательность «\e[01;04;38;05;196;48;05;232m» включит режим жирного подчеркнутого красного на черном фоне.
Не нужно ESC коды писать. Здесь вам не DOS.
Не нужно ESC коды писать. Здесь вам не DOS.
echo -e "`tput bold; tput smul; tput setaf 196; tput setab 232`bold-underline-red-on-black"
man terminfo
0
Замечу, что в Mac OS X (терминал iTerm2) так же работает, но пример с сайта из топика надо модифицировать:
Отличие — в кавычках при установке MY_CLR.
$ export MY_CLR=$'\e[01;38;05;108;48;05;17m'
$ echo "${MY_CLR}Hello"
Отличие — в кавычках при установке MY_CLR.
+1
Когда я выйду на пенсию, я допишу проверку браузера посетителя и генерацию правильного примера ;-)
Ну это же просто пример, смысл-то в последовательности. В смысле, если вам зачем-то нужна эта последовательность, то вы уж наверняка знаете, как в вашем шелле принято переменные объявлять.
Ну это же просто пример, смысл-то в последовательности. В смысле, если вам зачем-то нужна эта последовательность, то вы уж наверняка знаете, как в вашем шелле принято переменные объявлять.
+1
Ну это верно, я статью прочёл с удовольствием, но решил оставить «хинт» для маководов, ленящихся экспериментировать ;)
Кстати, раз уж Вы всё равно займётесь этим сервисом на пенсии, сделайте, пожалуйста, генерацию и для zsh тоже. Мне вот для проверки пришлось bash включать. Хотя, для скриптов обычно именно bash идёт, так что у меня всё ок в принципе =)
Кстати, раз уж Вы всё равно займётесь этим сервисом на пенсии, сделайте, пожалуйста, генерацию и для zsh тоже. Мне вот для проверки пришлось bash включать. Хотя, для скриптов обычно именно bash идёт, так что у меня всё ок в принципе =)
0
Уточните, пожалуйста, в чем именно проблема.
Я сам на
Я сам на
zsh
и все тестировалось там же. У вас, судя по всему, что-то с TERM
в zsh не алё.0
Собственно, выглядит так:
А TERM задаётся в настройках iTerm2 и по умолчанию «xterm-256color», так что тут менять ничего не надо =)
А TERM задаётся в настройках iTerm2 и по умолчанию «xterm-256color», так что тут менять ничего не надо =)
0
Ой.
А можно вас попросить попробовать вместо «\e» — «\033» и, особенно, настоящий Esc (вводится последовательным нажатием клавиш «Ctrl+V» и «Escape»)? Я повторить на zsh@ubuntu не могу.
А можно вас попросить попробовать вместо «\e» — «\033» и, особенно, настоящий Esc (вводится последовательным нажатием клавиш «Ctrl+V» и «Escape»)? Я повторить на zsh@ubuntu не могу.
+1
С 033 и escape — то же самое. Может быть дело в oh-my-zsh?
0
У меня тоже oh-my-zsh (у нас даже тема одна почти и та же, если вглядеться в мой пример на сайте). Дело, кажется, в разворачивании переменной. Ваш шелл почему-то всегда ${AAA} хочет выплюнуть на stdout.
Я попробую дотянуться до мака и починить, конечно же.
Я попробую дотянуться до мака и починить, конечно же.
0
export MY_CLR=$'ONE'
echo "${MY_CLR}"
— два раза «ONE» печатает?
0
попробуйте
и у меня не заработало с \e, но заработало с \033
echo -e "${MY_CLR}Hello"
и у меня не заработало с \e, но заработало с \033
0
Увы, результат аналогичный. =(
0
macbook-011:~$ zsh
macbook-011% echo $TERM
xterm-color
macbook-011% export A='\033[01;38;05;108;48;05;17m'
macbook-011% echo -e "${A}Hello"
Hello
macbook-011%
Hello ярко белый и моргает
+3
Кстати да, если без $ строку объявлять, а просто в одинарных кавычках, то всё работает.
Хм.
Спасибо! =)
Хм.
Спасибо! =)
0
Спасибо!
Только поясните, что значит «моргает»? И почему ярко-белый? Иными словами, если вы возьмете с сайта какой-нибудь вариант типа «\033[01;04;38;05;160;48;05;222m» (жирный красный на желтом с подчеркиванием) — он именно так отобразится? Или для мака (как обычно ;-)) все переписывать придется?
Только поясните, что значит «моргает»? И почему ярко-белый? Иными словами, если вы возьмете с сайта какой-нибудь вариант типа «\033[01;04;38;05;160;48;05;222m» (жирный красный на желтом с подчеркиванием) — он именно так отобразится? Или для мака (как обычно ;-)) все переписывать придется?
0
Похоже, вынужден Вас огорчить, ибо "\033[01;04;38;05;160;48;05;222m" у меня на маке (с xterm-color) отображается как подчеркнутый яркий белый, мигающий.
Но, в никсах, при том же xterm-color (не 256color, может в этом причина) отображается так же.
Но, опять-таки, может дело в моем терминале.
Но, в никсах, при том же xterm-color (не 256color, может в этом причина) отображается так же.
Но, опять-таки, может дело в моем терминале.
0
У меня вот так, а мигающего добиться не удалось =)
0
не 256color, может в этом причина
Конечно, причина в этом. Я даже в записи об этом обмолвился.
export TERM=xterm-256color
— должно помочь.
+1
$ bash
macbook-011:~$ echo $TERM
xterm-color
macbook-011:~$ export A="\033[01;38;05;108;48;05;17m"
macbook-011:~$ echo -e "${A}Hello"
Hello
macbook-011:~$ export A="\e[01;38;05;108;48;05;17m"
macbook-011:~$ echo -e "${A}Hello"
\e[01;38;05;108;48;05;17mHello
macbook-011:~$ export TERM=xterm-256color
macbook-011:~$ echo $TERM
xterm-256color
macbook-011:~$ export A="\033[01;38;05;108;48;05;17m"
macbook-011:~$ echo -e "${A}Hello"
Hello
macbook-011:~$ export A="\e[01;38;05;108;48;05;17m"
macbook-011:~$ echo -e "${A}Hello"
\e[01;38;05;108;48;05;17mHello
$ zsh
macbook-011% echo $TERM
xterm-color
macbook-011% export A="\033[01;38;05;108;48;05;17m"
macbook-011% echo -e "${A}Hello"
Hello
macbook-011% export A="\e[01;38;05;108;48;05;17m"
macbook-011% echo -e "${A}Hello"
Hello
macbook-011% export TERM=xterm-256color
zsh: can`t find terminal definition for xterm-256color
macbook-011% echo $TERM
xterm-256color
macbook-011% export A="\033[01;38;05;108;48;05;17m"
macbook-011% echo -e "${A}Hello"
Hello
macbook-011% export A="\e[01;38;05;108;48;05;17m"
macbook-011% echo -e "${A}Hello"
Hello
Во всех случаях текст выглядит одинаково: яркий, белый, мигающий.
0
Да, так и отображается, всё ок.
Ярко-белый у меня не моргает — уж не знаю почему =)
Ярко-белый у меня не моргает — уж не знаю почему =)
0
Я это… читаю комментарии к своей записи :-).
Там пока есть вопросы: habrahabr.ru/post/161999/#comment_5563239
У вас получается то, что нужно? Я просто почти вышел на пенсию и готов допилить правильный показ команды. Но мака под рукой по-прежнему нет.
Там пока есть вопросы: habrahabr.ru/post/161999/#comment_5563239
У вас получается то, что нужно? Я просто почти вышел на пенсию и готов допилить правильный показ команды. Но мака под рукой по-прежнему нет.
+1
Вкратце для макоси в zsh надо:
1. Делать экспорт надо в одинарных кавычках.
2. Вместо "\e" ставить "\033".
Для bash же надо оставить "\e" — 033 там не работает почему-то.
1. Делать экспорт надо в одинарных кавычках.
2. Вместо "\e" ставить "\033".
Для bash же надо оставить "\e" — 033 там не работает почему-то.
0
Ога. На страничке все поправил уже. Вот только баш, или zsh, — у человека, пришедшего ко мне на сайт, я определять не умею.
Посоветуйте, как правильно оставить «заглавную строку»? Я сейчас к «\033» склонился, плюс там же есть еще блок «варианты».
Посоветуйте, как правильно оставить «заглавную строку»? Я сейчас к «\033» склонился, плюс там же есть еще блок «варианты».
0
Мне кажется, лучше в блоке с вариантами сделать подсказку: это для bash, это для zsh.
0
Моя убунта понимает оба, доступный rhel — только ровно наоборот вашему рассказу.
В общем, я постараюсь охватить все многообразие, но держу в уме, что если уж кто-то пришел за esc-последовательностью, дальше он сам справится.
Это негодный паттерн, я понимаю. Но у меня следующая запись в эти блоги рискует быть гораздо интереснее.
В общем, я постараюсь охватить все многообразие, но держу в уме, что если уж кто-то пришел за esc-последовательностью, дальше он сам справится.
Это негодный паттерн, я понимаю. Но у меня следующая запись в эти блоги рискует быть гораздо интереснее.
+1
Хорошая ссылка по теме: frexx.de/xterm-256-notes/
Есть ссылки на perl-скрипты для отображения набора всех цветов в консоли: один скрипт показывает все цвета с их номерами (xterm-colortest), другой — просто красивый color cube (256colors2.pl).
Также в самом конце есть совет, как «включить» 256 цветов в screen'ах.
Есть ссылки на perl-скрипты для отображения набора всех цветов в консоли: один скрипт показывает все цвета с их номерами (xterm-colortest), другой — просто красивый color cube (256colors2.pl).
Также в самом конце есть совет, как «включить» 256 цветов в screen'ах.
0
Ага, спасибо, вынес в запись. Поделитесь секретом, о чем нужно спросить гугл, чтобы он это отдал?
;-)
;-)
0
Т.к. у меня на фре в screen'ах не отображались 256 цветов (и скрины и xterm собраны с поддержкой 256 цветов), я гуглил по «freebsd screen 256 color». Третья ссылка (http://www.in-nomine.org/2005/09/20/screen-256-colours-and-termcap-mixed-with-putty-and-freebsd/ — в статье, кстати, есть рецепт и для vim'а, но мне он не пригодился), последний комментарий и ведёт на frexx.de/xterm-256-notes/ =)
Кстати, у меня xterm и с TERM=xterm показывает 256 цветов. Т.е. изменение TERM на FreeBSD вообще не потребовалось. В том числе и для screen'ов.
Кстати, у меня xterm и с TERM=xterm показывает 256 цветов. Т.е. изменение TERM на FreeBSD вообще не потребовалось. В том числе и для screen'ов.
+1
Охтыж!
Вспомнил смешную историю.
Меня как-то коллега попросил помочь нагуглить решение какой-то проблемы. Я занят был, поэтому лаконично посоветовал: «добавляй ко мне запросам „slackware“». Еще два года вся команда на любой мой вопрос (типа «кофе идем пить?») хором отвечала: «а слакварь с нами?».
Ну теперь я знаю, что «freebsd» — тоже ключевое словцо.
Вспомнил смешную историю.
Меня как-то коллега попросил помочь нагуглить решение какой-то проблемы. Я занят был, поэтому лаконично посоветовал: «добавляй ко мне запросам „slackware“». Еще два года вся команда на любой мой вопрос (типа «кофе идем пить?») хором отвечала: «а слакварь с нами?».
Ну теперь я знаю, что «freebsd» — тоже ключевое словцо.
+2
Если интересно, у меня есть скрипт, который выдаёт список из #RRGGBB кодов всех цветов для текущего терминала. Для работы требуется Vim, wmctrl (желательно), perl, YAML::XS, imagemagick (консольные команды и perl bindings). Желательно, чтобы окно терминала не имело декораций. Код, определяющий месторасположение таблицы цветов, по идее, должен работать с почти всеми декорациями, но медленно. Для работы также требуется, чтобы чёрный фон отличался от белого. Никаких более требований нету.
Там же — списки цветов для используемых мною терминалов (откуда я взял default-8 уже не помню, у wineconsole цвета другие). Цвета у всех используемых мною эмуляторов (rxvt-unicode USE+=256-color, xterm, konsole) везде одинаковые, первые 16 цветов у konsole отличаются (и настраиваются). Насколько мне известно, как минимум xterm позволяет настраивать вообще все цвета.
Там же — списки цветов для используемых мною терминалов (откуда я взял default-8 уже не помню, у wineconsole цвета другие). Цвета у всех используемых мною эмуляторов (rxvt-unicode USE+=256-color, xterm, konsole) везде одинаковые, первые 16 цветов у konsole отличаются (и настраиваются). Насколько мне известно, как минимум xterm позволяет настраивать вообще все цвета.
0
Та не, «freebsd» в запросе было не просто для количества =) Судя по тэгам статьи, Вы экспериментировали под linux'ом. Я же работаю на фре. И по опыту знаю, что, если гуглить что-то по nix-тематике без конкретизации, то linux'овых решений будут столько, что найти нужное для freebsd будет проблематично. Тем более, что изредка даже linux'овые решения не подходят разным веткам linux'ов =)
Так что тут просто привычка сработала: конкретизировать запросы, чтобы не копаться в ненужном — раз у Вас под linux'ом всё работает, вероятно проблема имеет какую-то особенность именно на фре =)
ps: случайно ответил не в трид, а теперь не знаю, как удалить сообщение или переместить его в нужный трид =( сорри.
Так что тут просто привычка сработала: конкретизировать запросы, чтобы не копаться в ненужном — раз у Вас под linux'ом всё работает, вероятно проблема имеет какую-то особенность именно на фре =)
ps: случайно ответил не в трид, а теперь не знаю, как удалить сообщение или переместить его в нужный трид =( сорри.
0
Как минимум, в Konsole есть TrueColor:
There is a predefined 256 color space compatible with his
xterm sister, and, even beyond that, a 3-byte RGB color space.
The ESC codes are as follows
+1
Sign up to leave a comment.
256 цветов в терминале ⇒ уровень nightmare