Pregunta

Tengo un programa de línea de comando, que muestra el registro en la pantalla.

Quiero que las líneas de error aparezcan en rojo.¿Hay algunos códigos de caracteres especiales que pueda generar para cambiar el color del texto a rojo y luego volver a cambiarlo a blanco?

Estoy usando Ruby pero imagino que sería lo mismo en cualquier otro idioma.

Algo como:

red = "\0123" # character code
white = "\0223"

print "#{red} ERROR: IT BROKE #{white}"
print "other stuff"
¿Fue útil?

Solución

Debe acceder a la [API de la consola Win32](http://msdn.microsoft.com/en-us/library/ms682073(VS.85%29.aspx).Desafortunadamente, no sé cómo harías eso con Ruby.En Perl, usaría el Win32::Consola módulo.La consola de Windows no responde a los códigos de escape ANSI.

De acuerdo con la artículo sobre cómo colorear la salida de Ruby que artur02 mencionó, necesitas instalar y cargar la gema win32console.

Otros consejos

En Windows, puedes hacerlo fácilmente de tres maneras:

require 'win32console'
puts "\e[31mHello, World!\e[0m"

Ahora puedes extender String con un pequeño método llamado red

 require 'win32console'
 class String
   def red
     "\e[31m#{self}\e[0m"
   end
 end

 puts "Hello, World!".red

También puedes extender String así para obtener más colores:

require 'win32console'

class String
  { :reset          =>  0,
    :bold           =>  1,
    :dark           =>  2,
    :underline      =>  4,
    :blink          =>  5,
    :negative       =>  7,
    :black          => 30,
    :red            => 31,
    :green          => 32,
    :yellow         => 33,
    :blue           => 34,
    :magenta        => 35,
    :cyan           => 36,
    :white          => 37,
  }.each do |key, value|
    define_method key do
      "\e[#{value}m" + self + "\e[0m"
    end
  end
end

puts "Hello, World!".red

O, si puedes instalar gemas:

gem install term-ansicolor

Y en tu programa:

require 'win32console'
require 'term/ansicolor'

class String
  include Term::ANSIColor
end

puts "Hello, World!".red
puts "Hello, World!".blue
puts "Annoy me!".blink.yellow.bold

Consulte los documentos de term/ansicolor para obtener más información y su posible uso.

Puedes leer aquí un buen e ilustrado artículo:http://kpumuk.info/ruby-on-rails/colorizing-console-ruby-script-output/

Creo que configurar el color del texto de la consola es bastante específico del idioma.Aquí hay un ejemplo en C# de MSDN:

for (int x = 0; x < colorNames.Length; x++)
{
  Console.Write("{0,2}: ", x);
  Console.BackgroundColor = ConsoleColor.Black;
  Console.ForegroundColor = (ConsoleColor)Enum.Parse(typeof(ConsoleColor), colorNames[x]);
  Console.Write("This is foreground color {0}.", colorNames[x]);
  Console.ResetColor();
  Console.WriteLine();
}

Consola.ForegroundColor es la propiedad para configurar el color del texto.

Podría usar una secuencia de escape ANSI, pero eso no hará lo que desea en las versiones modernas de Windows.Wikipedia tiene un artículo muy informativo:

http://en.wikipedia.org/wiki/ANSI_escape_code

Entonces, la respuesta a su pregunta original es casi con certeza "no". Sin embargo, puede cambiar el color de primer plano sin escribir una secuencia de escape, por ejemplo, invocando una función API Win32.No sé cómo hacer este tipo de cosas en Ruby que se me ocurren, pero alguien más parece haberlo logrado:

http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/241925

Me imagino que querrás usar 4 para rojo oscuro o 12 para rojo brillante y 7 para restaurar el color predeterminado.

¡Espero que esto ayude!

en códigos de escape ANSI:

Las aplicaciones de Windows en modo de caracteres de 32 bits (subsistema: consola) no escriben secuencias de escape ANSI en la consola

Deben interpretar las acciones del código de escape y llamar a la API de la consola nativa.

Gracias microsoft :-(

color [background][foreground]

Donde los colores se definen de la siguiente manera:

0 = Black    8 = Gray
1 = Blue     9 = Light Blue
2 = Green    A = Light Green
3 = Aqua     B = Light Aqua
4 = Red      C = Light Red
5 = Purple   D = Light Purple
6 = Yellow   E = Light Yellow
7 = White    F = Bright White

Por ejemplo, para cambiar el fondo a azul y el primer plano a gris, escribiría:

color 18

He escrito una pequeña joya multiplataforma que maneja esto ejecutándose sin problemas en sistemas Windows o POSIX, tanto en MRI como en JRuby.

No tiene dependencias y utiliza códigos ANSI en sistemas POSIX y FFI (JRuby) o Fiddler (MRI) para Windows.

Para usarlo, simplemente:

gem install color-console

ColorConsole proporciona métodos para generar líneas de texto en diferentes colores, utilizando las funciones Console.write y Console.puts.

require 'color-console'

Console.puts "Some text"                    # Outputs text using the current  console colours
Console.puts "Some other text", :red        # Outputs red text with the current background
Console.puts "Yet more text", nil, :blue    # Outputs text using the current foreground and a blue background

# The following lines output BlueRedGreen on a single line, each word in the appropriate color
Console.write "Blue ", :blue
Console.write "Red ", :red
Console.write "Green", :green

Visite la página de inicio del proyecto en https://github.com/agardiner/color-console para más detalles.

Hasta donde yo sé, no es posible con una línea de comando, es solo un color...

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Console_Test
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.ForegroundColor = ConsoleColor.DarkRed;
            Console.WriteLine("Hello World");
            Console.ReadKey();
        }
    }
}

Puede cambiar el color utilizando un sencillo programa C#, http://powerof2games.com/node/31 describe cómo se puede ajustar la salida de la consola para lograr el efecto.

La especificación estándar C/C++ para enviar a la línea de comando no especifica ninguna capacidad para cambiar el color de la ventana de la consola.Dicho esto, hay muchas funciones en Win32 para hacer tal cosa.

La forma más sencilla de cambiar el color de la consola Win32 es mediante el comando del sistema en iostream.h.Esta función invoca un comando de DOS.Para cambiar colores, lo usaremos para invocar el comando de color.Por ejemplo, system("Color F1"); Hará que la consola sea azul oscuro sobre blanco.

Colores DOS

Los colores disponibles para usar con el comando son los dieciséis colores de DOS, cada uno representado con un dígito hexadecimal.El primero es el fondo y el segundo el primer plano.

0 = Black    8 = Gray
1 = Blue     9 = Light Blue
2 = Green    A = Light Green
3 = Aqua     B = Light Aqua
4 = Red      C = Light Red
5 = Purple   D = Light Purple
6 = Yellow   E = Light Yellow
7 = White    F = Bright White

Sólo este pequeño toque de color hace que los programas de consola sean más agradables a la vista.Sin embargo, el comando Color cambiará el color de toda la consola.Para controlar celdas individuales, necesitamos usar funciones de windows.h.

Para hacer eso necesitas usar el SetConsoleAttribute función

http://msdn.microsoft.com/en-us/library/ms686047.aspx

Muchos de los viejos ANSI Códigos de color trabajar.El código para un primer plano rojo es algo así como Escape-[31m.El escape es el carácter 27, por lo que es "\033[31m" o "\x1B[31m", dependiendo de su esquema de escape.

[39m es el código para volver al color predeterminado.

También es posible especificar varios códigos a la vez para establecer el color de primer plano y de fondo simultáneamente.

Es posible que tenga que cargar ANSI.sys, consulte esta página.

Al final hay que llamar Establecer atributo de texto de consola.Puede obtener un identificador del búfer de pantalla de la consola desde ObtenerStdHandle.

He estado usando un programa gratuito de cola de Windows llamado baretail (google it) durante años que te permite hacer una versión de Windows del comando tail de Unix.Le permite colorear líneas dependiendo de las palabras clave que defina.Lo bueno de esto como solución es que no está vinculado a un idioma o configuración específicos, etc., simplemente defines tu combinación de colores y funciona como Donkey Kong.¡En mi top 10 personal de ayudas de software gratuito!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top