Используя Ruby, как я могу выполнить цвет фона и текста переднего плана для вывода в терминал?
Я помню, когда мы программировали на Pascal, мы все писали свои собственные textcolor(…)
процедуры, чтобы наши маленькие образовательные программы выглядели более симпатично и представительно.
Как мне написать код, эквивалентный этому в Ruby?
Ответы:
Colorize - мой любимый драгоценный камень! :-)
Проверьте это:
https://github.com/fazibear/colorize
Монтаж:
Использование:
источник
win32console
гем иrequire 'win32console'
послеcolorize
.win32console
драгоценный камень. github.com/luislavena/win32console/issues/…Комбинируя ответы выше, вы можете реализовать что-то, что работает как раскраска драгоценного камня, не нуждаясь в другой зависимости.
источник
Как методы класса String (только для Unix):
и использование:
на моей консоли:
дополнительно:
удаляет символы форматирования
Заметка
источник
def bold; "\e[1m#{self}\e[22m" end
cmd.exe
,puts "\e[0"
не работает в четкой форме;puts "\e[0m"
должен быть использованЯ написал небольшой метод для проверки основных цветовых режимов, основанный на ответах Эрика Скоглунда и других.
пример вывода:
источник
Вы можете использовать управляющие последовательности ANSI, чтобы сделать это на консоли. Я знаю, что это работает на Linux и OSX, я не уверен, поддерживает ли консоль Windows (cmd) ANSI.
Я сделал это на Java, но идеи те же.
источник
В то время как другие ответы отлично подойдут для большинства людей, следует упомянуть «правильный» способ Unix сделать это. Поскольку все типы текстовых терминалов не поддерживают эти последовательности, вы можете запросить базу данных terminfo , абстракцию над возможностями различных текстовых терминалов. Это может показаться в основном исторический интерес - программного обеспечения терминалов, используемых сегодня в целом поддерживают ANSI последовательности - но у него есть (по крайней мере) один практический эффект: иногда полезно , чтобы иметь возможность установить переменную окружения ,
TERM
чтобыdumb
избежать всех таких стиль, например, при сохранении вывода в текстовый файл. Кроме того, приятно делать все правильно . :-)Вы можете использовать гем ruby-terminfo . Для установки требуется компиляция Си; Я смог установить его под свою систему Ubuntu 14.10 с помощью:
Затем вы можете запросить базу данных следующим образом (см. Справочную страницу terminfo для получения списка доступных кодов):
Вот небольшой класс-обертка, который я собрал, чтобы сделать его немного более простым в использовании.
Использование:
(edit) Наконец, если вы не хотите использовать гем, вы можете положиться на
tput
программу, как описано здесь - пример Ruby:источник
tput
. Даже не могу сказать, сколько выпадение волосtput
спасло меня.Я сделал этот метод, который мог бы помочь. Это не имеет большого значения, но это работает:
Вот как это использовать:
Возможные улучшения могут быть:
colors
иbgColors
определяются каждый раз, когда вызывается метод, и они не меняются.bold
,underline
,dim
и т.д.Этот метод не работает
p
, какp
иinspect
его аргумент. Например:покажет "\ e [0; 38mHello World \ e [0m"
Я тестировал его
puts
,print
и камень Logger, и он работает отлично.Я улучшил это и сделал класс так,
colors
и онbgColors
является константой класса иcolorize
является методом класса:РЕДАКТИРОВАТЬ: улучшенный стиль кода, определенные константы вместо переменных класса, использование символов вместо строк, добавлены дополнительные параметры, такие как полужирный шрифт, курсив и т. Д.
Вы можете использовать его, выполнив:
источник
Вот что я сделал, чтобы он работал без каких-либо драгоценных камней:
Тогда только текст в кавычках там раскрашен, и вы возвращаетесь в свою регулярно запланированную программу.
источник
e[32mSOMETEXT
"\e(...)"
вместо"e\(...)"
Я нашел несколько:
http://github.com/ssoroka/ansi/tree/master
Примеры:
http://flori.github.com/term-ansicolor/
Примеры:
http://github.com/sickill/rainbow
Пример:
Если вы работаете в Windows, вам может потребоваться установить gem install win32console, чтобы включить поддержку цветов.
Также статья Colorizing console Вывод Ruby-скрипта полезен, если вам нужно создать свой собственный гем. В нем объясняется, как добавить ANSI-раскраску в строки. Вы можете использовать это знание, чтобы обернуть его в некоторый класс, который расширяет строку или что-то еще.
источник
Это может вам помочь: цветной вывод рубина
источник
class String; def red; colorize(self, "\033[31m"); end; end
Я нашел ответы выше, чтобы быть полезным, но не отвечал всем требованиям, если я хотел раскрасить что-то вроде вывода журнала без использования сторонних библиотек. Следующее решило проблему для меня:
Я надеюсь, что это помогает!
источник