Подтвердить что ты не робот

Как выводить мой текст в командной строке 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?

4b9b3361

Ответ 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

Ответ 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

Ответ 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