Usando Ruby, ¿cómo puedo realizar la coloración de texto de fondo y primer plano para la salida en el terminal?
Recuerdo que cuando programamos Pascal, todos escribíamos nuestros propios textcolor(…)
procedimientos para que nuestros pequeños programas educativos se vieran más bonitos y presentadores.
¿Cómo haría para codificar un equivalente de eso en Ruby?
ruby
colors
console-application
gmile
fuente
fuente
Respuestas:
¡Colorear es mi joya favorita! :-)
Echale un vistazo:
https://github.com/fazibear/colorize
Instalación:
Uso:
fuente
win32console
gema yrequire 'win32console'
despuéscolorize
.win32console
gema. github.com/luislavena/win32console/issues/…Combinando las respuestas anteriores, puede implementar algo que funcione como el color de la gema sin necesidad de otra dependencia.
fuente
Como métodos de clase String (solo Unix):
y uso:
en mi consola:
adicional:
elimina caracteres de formato
Nota
fuente
def bold; "\e[1m#{self}\e[22m" end
cmd.exe
,puts "\e[0"
no funciona para borrar el formato;puts "\e[0m"
debe ser usadoEscribí un pequeño método para probar los modos básicos de color, basado en las respuestas de Erik Skoglund y otros.
salida de ejemplo:
fuente
Puede usar secuencias de escape ANSI para hacer esto en la consola. Sé que esto funciona en Linux y OSX, no estoy seguro de si la consola de Windows (cmd) es compatible con ANSI.
Lo hice en Java, pero las ideas son las mismas.
fuente
Mientras que las otras respuestas harán el trabajo bien para la mayoría de las personas, debe mencionarse la forma "correcta" de Unix de hacerlo. Dado que todos los tipos de terminales de texto no son compatibles con estas secuencias, puede consultar la base de datos terminfo , una abstracción sobre las capacidades de varios terminales de texto. Esto puede parecer todo de interés histórico - terminales de software en uso hoy en día por lo general apoyar las secuencias ANSI - pero tiene (al menos) un efecto práctico: a veces es útil para poder establecer la variable de entorno
TERM
paradumb
evitar todo tal estilo, por ejemplo al guardar la salida en un archivo de texto. Además, se siente bien hacer las cosas bien . :-)Puedes usar la gema ruby-terminfo . Necesita un poco de compilación de C para instalar; Pude instalarlo en mi sistema Ubuntu 14.10 con:
Luego puede consultar la base de datos de esta manera (consulte la página del manual de terminfo para obtener una lista de los códigos disponibles):
Aquí hay una pequeña clase de envoltura que armé para hacer las cosas un poco más simples de usar.
Uso:
(editar) Finalmente, si prefiere no necesitar una gema, puede confiar en el
tput
programa, como se describe aquí - Ejemplo de Ruby:fuente
tput
. Ni siquiera puedo articular cuánta pérdida de cabellotput
me ha salvado.Hice este método que podría ayudar. No es gran cosa pero funciona:
Aquí se explica cómo usarlo:
Las posibles mejoras podrían ser:
colors
ybgColors
se definen cada vez que se llama al método y no cambian.bold
,underline
,dim
, etc.Este método no funciona
p
, como lop
hace uninspect
a su argumento. Por ejemplo:mostrará "\ e [0; 38mHola Mundo \ e [0m"
Lo probé con
puts
,print
y la gema Logger, y funciona bien.Mejoré esto e hice una clase así
colors
ybgColors
son constantes de clase ycolorize
es un método de clase:EDITAR: Mejor estilo de código, constantes definidas en lugar de variables de clase, usando símbolos en lugar de cadenas, se agregaron más opciones como negrita, cursiva, etc.
Puedes usarlo haciendo:
fuente
Esto es lo que hice para que funcione sin necesidad de gemas:
Luego, solo el texto en las comillas está coloreado, y volverá a su programa programado regularmente.
fuente
e[32mSOMETEXT
"\e(...)"
lugar de"e\(...)"
Encontré algunos:
http://github.com/ssoroka/ansi/tree/master
Ejemplos:
http://flori.github.com/term-ansicolor/
Ejemplos:
http://github.com/sickill/rainbow
Ejemplo:
Si está en Windows, es posible que deba hacer una "instalación de gemas win32console" para habilitar la compatibilidad con los colores.
Además, el artículo Colorizing console Ruby-script output es útil si necesita crear su propia gema. Explica cómo agregar colores ANSI a las cadenas. Puede usar este conocimiento para envolverlo en alguna clase que extienda una cadena o algo así.
fuente
Esto puede ayudarlo: salida rubí coloreada
fuente
class String; def red; colorize(self, "\033[31m"); end; end
Encontré que las respuestas anteriores eran útiles, sin embargo, no se ajustaban a la factura si quería colorear algo como la salida del registro sin usar bibliotecas de terceros. Lo siguiente resolvió el problema para mí:
¡Espero que ayude!
fuente