Назад | Перейти на главную страницу

Глобальная раскраска терминала с помощью Regex

Я знаю, что многие программы используют цвет (vim, ack, color-ls, чтобы назвать несколько), но все еще есть много случаев, когда вы застреваете с черным и белым.

Существуют сценарии, которые будут выводить цвет на основе регулярных выражений (например, «сделать все, что соответствует 'dog' красному»), но они должны быть вызваны с помощью каналов - например: «> cat myfile | color dog red», и это бесполезно интерактивный.

Я ищу что-то, что подключает эмулятор терминала (или терминал, который на самом деле это делает) и окрашивает все, что соответствует заданному регулярному выражению, независимо от оболочки или программы, которую я использую в настоящее время. Если это работает и с ncurses, это было бы здорово. У меня слишком много монохромных программ, и было бы здорово, если бы я мог указать список ключевых слов для выделения / цвета при их появлении или вводе.

Я использую консоль Guake, которая, вероятно, использует терминал GNOME, я не знаю, есть ли эта функция в GNOME.

Краткая версия: почему, да, вы можете выводить вывод из оболочки, как и любую другую программу.

Оттуда вы можете использовать все, что захотите, например, сказать

$ bash | sed "$(echo -e "s@dog@\e[31mdog\e[0m@g; s@more here@more here@g;")"

Думал добавить свою «радугу». Наслаждаться:

for((b=0;$b<8;b++)); do echo -ne "\e[4${b}m4$b : "; \
  for((f=0;$f<8;f++)); do echo -ne "\e[3${f}m3${f}"; done; echo -e "\e[0m"; done

Я все еще ищу эмулятор терминала linux с этой функцией, но для тех, кто читает это на macOS X:

  • Получить iTerm2 (вам это все равно понадобится, если вы много работаете с командной строкой в ​​OS X), перейдите в «Настройки> Профили> Дополнительно», а затем нажмите «Изменить» в разделе «Триггеры». Там вы можете добавить триггер с регулярным выражением вроде ^.*\[ERROR\].*$ и установите действие «Выделить текст», а параметр - что-то вроде «Красный передний план».

Я почти уверен, что KDE Konsole (по крайней мере, версия KDE3) может это сделать, однако я не вижу поддержки в KDE4.

Вы жестяная банка сделайте что-нибудь с grep следующим образом:

grep -C 99999 --color <whatever>

Это должно выделять совпадения, но иметь такой обширный контекст, как весь файл.

У меня нет решения, но я подумал, как должна работать такая программа. То, что вы спрашиваете, непросто.

Например, предположим, что ваше регулярное выражение - просто «цветок». 1. Если выход терминала «f» «ниже», мы должны выполнить раскраску. Или с помощью редактора мы сначала набираем «ниже», а затем переходим к началу слова и набираем «f». 2. Если на выходе терминала "цветок", мы должны отменить уже выполненную раскраску. 3. Если вывод идет медленно, скажем, пятисекундная задержка между всеми символами в «цветке», мы не должны досадно останавливать вывод и должны иметь возможность немедленно выполнить раскраску.

Либо функциональность должна быть очень тесно связана с программой терминала (как вы предлагаете), проверяя, соответствует ли какое-либо из указанных регулярных выражений текущей строке, а затем выполнять раскраску. Или, чтобы сделать его более полезным, мы могли бы использовать программу (немного похожую на / usr / bin / script), которая действует как терминальное устройство и отслеживает вывод на экран, для чего ему необходимо очень хорошо знать поведение терминала; в этом случае мы также должны иметь возможность повторно отображать символы с другим цветом (выполнить окраску и отменить уже выполненную окраску).

Вы предлагаете красивую идею программирования ...

Вероятно, есть лучшие решения, чем это, но вы можете работать с чем-то простым с ожиданием: http://expect.nist.gov/. Существуют ожидаемые библиотеки для многих других языков программирования / сценариев, если вы предпочитаете избегать TCL.

Как правило, TCL используется для автоматизации интерактивных программ, но также можно сделать их интерактивными.

Я бы дал вам для начала немного кода, но сам я его довольно давно не использовал.

urxvt с подключаемым модулем сопоставления имеет эту функцию, например, если вы хотите изменить передний план строк, которые выглядят как IP-адреса фильмов (4x3 цифры с точками между ними), вы можете иметь следующее в своих .Xdefaults:

URxvt.perl-ext-common: default,matcher
URxvt.matcher.pattern.1: ([0-9]{1,3}[.]){3}([0-9]{1,3})
URxvt.matcher.rend.1: fg7

и это сделает это. Вам нужно будет добавить к нему больше вещей, но он работает.