me gustaría añadir otra solución, ya que hace las cosas un poco diferente e incluye más códigos de color :
Primero algunos ejemplos ...
Utilizando el método de encadenamiento:
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]
Utilizando el método style
y la aplicación de múltiples atributos:
puts "How are you?".style(:red)
puts 'I am good!'.style(:blue, :underline)
puts 'Good to hear'.style([:bg_magenta, :blink])
Esto se puede utilizar para el estilo tienda de atributos de alguna manera a una solicitud más adelante:
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
He dado algunos ejemplos más en this gist I created y ex cambió el código para incluir refinamientos para que las modificaciones a String tengan un alcance.
Este es el código básico:
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
Estaba pensando en la línea de comandos de texto rubí cuando le pregunté a mi pregunta de nuevo en 2010. La pregunta tiene más de 11.000 puntos de vista y una pila de enlaces externos. No habría pensado en buscar 'salida de rubí coloreada' cuando formulé mi pregunta y, de hecho, no pude encontrar esa respuesta en el momento de la búsqueda. Las respuestas implícitas pueden ser similares, pero las preguntas se plantean de manera bastante diferente. Veo ambas preguntas distintas, feliz de tenerlas vinculadas. – Evolve