Ho pensato di aggiungere un'altra soluzione, come fa le cose un po 'diverso e comprende più i codici colore :
Prima alcuni esempi ...
metodo usando concatenazioni:
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]
Utilizzando il metodo style
e l'applicazione di più attributi:
puts "How are you?".style(:red)
puts 'I am good!'.style(:blue, :underline)
puts 'Good to hear'.style([:bg_magenta, :blink])
questo può essere usato allo stile negozio di attributi in qualche modo di applicare in seguito:
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
Ho dato qualche altro esempio su this gist I created ed ex condizionato il codice per includere i perfezionamenti in modo che le modifiche a String vengano esaminate.
Questo è il codice di base:
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
Stavo pensando di riga di comando di testo rubino quando ho chiesto la mia domanda di nuovo nel 2010. La questione ha più di 11.000 punti di vista e una pila di link esterni. Non avrei pensato di cercare "output color rubino" quando stavo formando la mia domanda e infatti non riuscivo a trovare quella risposta al momento della ricerca. Le risposte implicite possono essere simili ma le domande sono poste in modo diverso. Vedo entrambe le domande distinte, felice di averle comunque collegate. – Evolve