2008-09-16 17 views
12

Tengo un programa de línea de comando, que da salida al registro en la pantalla.¿Cómo puedo cambiar el color del texto en el indicador de comando de Windows?

Quiero que las líneas de error aparezcan en rojo. ¿Hay algún código especial de caracteres que pueda mostrar para cambiar el color del texto a rojo y luego volver a ponerlo en blanco?

Estoy usando ruby ​​pero me imagino que esto sería igual en cualquier otro idioma.

Algo así como:

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

print "#{red} ERROR: IT BROKE #{white}" 
print "other stuff" 

Respuesta

0

Por lo que yo sé que no es posible con una línea de comandos, es apenas un color ...

0
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(); 
     } 
    } 
} 

Usted puede cambiar el color utilizando una El sencillo programa C#, http://powerof2games.com/node/31 describe cómo puede envolver la salida de la consola para lograr el efecto.

0
+2

Los códigos de escape ANSI no están disponibles en el símbolo del sistema de Windows, de forma nativa. –

0

Mucho del viejo ANSI Color Codes trabajo. El código para un primer plano rojo es algo así como Escape- [31m. 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 fondo y de fondo simultáneamente.

Es posible que deba cargar ANSI.sys, consulte this page.

3

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

Creo que establecer el color del texto de la consola es bastante específico del idioma. Este es un ejemplo en C# desde 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(); 
} 

Console.ForegroundColor es la propiedad para establecer el color del texto.

0

La especificación C/C++ estándar para la salida 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 manera más fácil 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 los colores, lo usaremos para invocar el comando de color. Por ejemplo, system("Color F1"); hará que la consola sea azul oscuro en blanco.

Colores DOS

Los colores disponibles para su uso con el comando son los dieciséis colores DOS cada uno representado por un dígito hexadecimal. El primero es el fondo y el segundo es 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 

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

hacen eso es necesario utilizar la función SetConsoleAttribute

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

2

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

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

Así que la respuesta a su pregunta original es casi seguro que "no". Sin embargo, puede cambiar el color de primer plano sin escribir una secuencia de escape, por ejemplo, invocando una función API de Win32. No sé cómo hacer este tipo de cosas en Ruby de la parte superior de mi cabeza, pero alguien parece haber conseguido:

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

me imagino que te gustaría utilizar para el 4 de color rojo oscuro o 12 para rojo brillante, y 7 para restaurar el color predeterminado.

Espero que esto ayude!

2

en ANSI códigos de escape:

32-bit de carácter en modo (subsistema: consola) aplicaciones de Windows no escriben las secuencias de escape ANSI para la consola

Ellos deben interpretar las acciones de código de escape y llamar a la API nativa de la consola en lugar

Gracias :-(microsoft

2

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

+0

para uso en cygwin: alias color = 'cmd/c color' – zzapper

0

he estado utilizando un programa freeware windows tail llamado baretail (google it) para las edades que le permite hacer una versión de Windows-Appified del comando tail de Unix. Le permite colorear líneas dependiendo de las palabras clave que defina. Lo bueno de esta solución es que no está ligada a un idioma o configuración específica, etc., simplemente defines tu combinación de colores y está en modo de burro como kong. ¡En mis 10 mejores freeware helpers!

24

En las ventanas, puede hacerlo fácilmente en tres formas:

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

Ahora se podría extender cadena 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 se puede extender cadena como esta 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 se puede instalar gemas:

gem install term-ansicolor 

Y en su 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 

Por favor, ver la documentación de su término/ansicolor para obtener más información y posibles usos.

+1

O bien, puede usar la gema 'colorize'. * NOTA * en Windows necesita 'requerir 'win32console' manualmente cuando lo use, ya que' colorize 'solo verifica' si RUBY_PLATFORM = ~/win32/'y en algunos casos' RUBY_PLATFORM' devuelve 'i386-mingw32'. –

+0

Creo que te estás perdiendo un "fin" –

2

He creado una pequeña gema multiplataforma que maneja este funcionamiento sin problemas en sistemas Windows o POSIX, tanto en MRI como en JRuby.

No tiene dependencias, y usa 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 la salida de las 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 

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

Cuestiones relacionadas