Как выводить мой текст в командной строке ruby разными цветами
Как я могу сделать команды puts, которые я выводил из цвета рубиновой программы на основе командной строки?
Я бы оценил любые ссылки на то, как я называю каждый другой цвет.
Предположим, что мы начнем с этого.
puts "The following word is blue.. Im Blue!"
puts "The following word is green.. Im Green!"
puts "The following word is red.. Im Red!"
И я получаю другой текст, который я хочу в разных цветах, я хочу, вы получаете идею.
Я использую Ubuntu, мне нужно будет изменить свой подход, чтобы программа правильно выходила в diff os?
Ответы
Ответ 1
Я нашел эту статью, описывая очень простой способ писать цветные тексты на консоль. В статье описывается этот небольшой пример, который, кажется, делает трюк (я взял на себя смелость немного улучшить его):
def colorize(text, color_code)
"\e[#{color_code}m#{text}\e[0m"
end
def red(text); colorize(text, 31); end
def green(text); colorize(text, 32); end
# Actual example
puts 'Importing categories [ ' + green('DONE') + ' ]'
puts 'Importing tags [' + red('FAILED') + ']'
Лучше всего определить некоторые цвета. Вы можете представить пример, когда вам нужны и другие цвета фона (см. Нижнюю часть статьи).
При использовании Window XP автор упоминает требование драгоценного камня, называемого win32console.
Ответ 2
Я нахожу Colored gem самым простым и чистым в использовании.
puts "this is red".red
puts "this is red with a blue background (read: ugly)".red_on_blue
puts "this is red with an underline".red.underline
puts "this is really bold and really blue".bold.blue
logger.debug "hey this is broken!".red_on_yellow
Ответ 3
Я создал что-то вроде этого:
begin
require 'Win32/Console/ANSI' if PLATFORM =~ /win32/
rescue LoadError
raise 'You must gem install win32console to use color on Windows'
end
class Colors
COLOR1 = "\e[1;36;40m"
COLOR2 = "\e[1;35;40m"
NOCOLOR = "\e[0m"
RED = "\e[1;31;40m"
GREEN = "\e[1;32;40m"
DARKGREEN = "\e[0;32;40m"
YELLOW = "\e[1;33;40m"
DARKCYAN = "\e[0;36;40m"
end
class String
def color(color)
return color + self + Colors::NOCOLOR
end
end
Теперь вы можете просто использовать другой метод String:
"Hello World".color(Colors::DARKGREEN)
Чтобы знать, что все цвета просто выполняют это:
begin
require 'Win32/Console/ANSI' if PLATFORM =~ /win32/
rescue LoadError
raise 'You must gem install win32console to use color on Windows'
end
[0, 1, 4, 5, 7].each do |attr|
puts '----------------------------------------------------------------'
puts "ESC[#{attr};Foreground;Background"
30.upto(37) do |fg|
40.upto(47) do |bg|
print "\033[#{attr};#{fg};#{bg}m #{fg};#{bg} "
end
puts "\033[0m"
end
end
Ответ 4
используйте escape-последовательность \033
вместо \e
, поскольку она совместима с 100% posix и будет работать и с системами bsd-ish (например, osx). последний является расширением gnu.
Ответ 5
Думаю, я добавлю другое решение, так как оно немного по-другому и включает в себя больше цветовых кодов:
Сначала несколько примеров...
Использование цепочки методов:
String.include(AnsiTextStyles)
puts "How are you?".blue.bold + " " + 'I am good!'.red.bold
puts '%s %s' % ["How are you?".blue.bold, 'I am good!'.red.bold]
Используя метод style
и применяя несколько атрибутов:
puts "How are you?".style(:red)
puts 'I am good!'.style(:blue, :underline)
puts 'Good to hear'.style([:bg_magenta, :blink])
Это можно использовать для хранения атрибутов стиля в некотором роде для применения позже:
text_styles = {
red_bold: [:red, :bold],
blue_underline: [:blue, :underline],
pretty: [:bg_magenta, :blink],
}
text_styles.each do |name, style|
styled_text = "Text styled multiple ways".style(style)
puts "%s: %s" % [name, styled_text]
end
Я привел еще несколько примеров этого основателя, который я создал, и расширил код, чтобы включить уточнения, чтобы изменения в String были охвачены.
Это базовый код:
module AnsiTextStyles
TEXT_ATTRIBUTES = {
# text properties
none: 0, # turn off all attributes
bold: 1, bright: 1, # these do the same thing really
italic: 3, underline: 4, blink: 5,
reverse: 7, # swap foreground and background colours
hide: 8, # foreground color same as background
# foreground colours
black: 30, grey: 90, lt_grey: 37, :white => 97,
red: 31, lt_red: 91,
green: 32, lt_green: 92,
dk_yellow: 33, brown: 33, yellow: 93,
blue: 34, lt_blue: 94,
magenta: 35, pink: 95, lt_magenta: 95,
cyan: 36, lt_cyan: 96,
default: 39,
# background colours
bg_black: 40, bg_grey: 100, bg_lt_grey: 47, bg_white: 107,
bg_red: 41, bg_lt_red: 101,
bg_green: 42, bg_lt_green: 102,
bg_dk_yellow: 43, bg_brown: 43, bg_yellow: 103,
bg_blue: 44, bg_lt_blue: 104,
bg_magenta: 45, bg_pink: 105, bg_lt_magenta: 105,
bg_cyan: 46, bg_lt_cyan: 106,
}
def self.text_attributes
TEXT_ATTRIBUTES.keys
end
# applies the text attributes to the current string
def style(*text_attributes)
codes = TEXT_ATTRIBUTES.values_at(*text_attributes.flatten).compact
"\e[%sm%s\e[m" % [codes.join(';'), self.to_s]
end
end
Ответ 6
Проверьте следующие библиотеки:
http://www.gnu.org/software/ncurses/ncurses.html
https://github.com/JEG2/highline
http://coderay.rubychan.de/
Ответ 7
Для быстрого и грязного решения вы можете просто вставлять цветовые коды ASCII в свои строки (\ e [XXm устанавливает цвет, который будет использоваться с этого момента, на XX и \e [0m reset цвет в нормальный режим):
puts "The following word is blue.. \e[34mIm Blue!\e[0m"
puts "The following word is green.. \e[32mIm Green!\e[0m"
puts "The following word is red.. \e[31mIm Red!\e[0m"
Коды ASCII также поддерживают такие вещи, как подчеркивание, мигание и выделение текста.
Также существует вспомогательная библиотека
доступный, который касается фактических кодов ASCII для вас.
Изменить: относительно разных платформ: вам не должно быть никаких проблем с использованием кодов ASCII на машинах Unix, но окна AFAIK не поддерживают их из коробки. К счастью, win32console gem, который, кажется, исправить это.
Вы можете использовать следующий фрагмент (найденный на странице Veger, связанный с) для загрузки библиотеки win32console только в окнах:
begin
require 'Win32/Console/ANSI' if PLATFORM =~ /win32/
rescue LoadError
raise 'You must gem install win32console to use color on Windows'
end
Ответ 8
Проверьте драгоценный камень cli-colorize: http://github.com/stjohncj/cli-colorize/blob/master/README.rdoc
Ответ 9
Мое предложение: paint gem. Он не поддерживает строковые расширения и поддерживает 256 цветов (с режимом понижения для не 256-цветных терминалов).
Использование:
puts Paint["I'm blue!", :blue]
puts Paint["I'm dark blue if your terminal supports it!", "#000044"]
Ответ 10
Используйте Colorize gem! Проверьте это:
https://github.com/fazibear/colorize
Установка:
sudo gem install colorize
использование:
require 'colorize'
puts "I am now red.".red
puts "I am now blue.".green
puts "I am a super coder".yellow