2009-04-29 10 views
3

J'ai installé Ramaze (sur Windows XP) et j'ai suggéré d'installer également win32console pour obtenir une sortie de journal colorée quand elle est en cours d'exécution.Pourquoi Win32Console de Ruby ne fonctionne pas pour moi avec Ramaze?

Cependant, après avoir fait si je reçois des codes d'échappement plutôt que des couleurs comme indiqué ci-dessous:

W [2009-04-29 09:02:55 $5064] WARN | : ←[33mNo explicit root folder found, assuming it is C:/Projects/Ruby/Ramaze/Conferences←[0m 
D [2009-04-29 09:02:55 $5064] DEBUG | : ←[34mUsing webrick←[0m 
I [2009-04-29 09:02:55 $5064] INFO | : ←[37mWEBrick 1.3.1←[0m 
I [2009-04-29 09:02:55 $5064] INFO | : ←[37mruby 1.8.6 (2008-08-11) [i386-mswin32]←[0m 
D [2009-04-29 09:02:55 $5064] DEBUG | : ←[34mTCPServer.new(0.0.0.0, 7000)←[0m 
D [2009-04-29 09:02:55 $5064] DEBUG | : ←[34mRack::Handler::WEBrick is mounted on /.←[0m 
I [2009-04-29 09:02:55 $5064] INFO | : ←[37mWEBrick::HTTPServer#start: pid=5064 port=7000←[0m 

Cela se produit même sur une installation propre de Ruby/Ramaze/win32console

Ma configuration est la suivante:

  • Windows XP avec SP # 3
  • rubis 1.8.6 (2008-08-11 patchlevel 287) [i386-mswin32]
  • rubygems Version 1.3.1
  • version gem win32console 1.2.0

Par ailleurs, le programme de test suivant semble fonctionner donc je me demande si elle est une question Ramaze/win32console sur ma machine.

#!/usr/bin/ruby 
require 'rubygems' 
require 'win32console' 

[0, 1, 4, 5, 7].each do |attr| 
    puts '----------------------------------------------------------------' 
    puts "ESC[#{attr};Foreground;Background" 
    30.upto(37) do |fg| 
    40.upto(47) do |bg| 
     print "\033[#{attr};#{fg};#{bg}m #{fg};#{bg} " 
    end 
    puts "\033[0m" 
    end 
end 
+0

Ramaze semble utiliser Analogger pour se connecter dans certains cas. Je ne suis pas sûr si c'est ce qui est utilisé pour se connecter à la console. Il semble que Ramaze lui donne un trait de colorisation pour lui indiquer s'il doit ou non colorer la sortie du journal. Je n'avais pas installé ceci (je fais maintenant) donc ceci peut être un hareng rouge (!). –

Répondre

1

Peut-être que ce n'est pas une réponse que vous cherchez, mais j'utiliser MSYS/MinGW sous Windows et il est bash affiche les couleurs correctement sans bijou win32console.

+0

Merci - je suppose que c'est une option et je pourrais essayer ça plus tard. Je voudrais d'abord trouver la cause première (surtout étant donné que d'autres semblent l'avoir). Merci quand même pour la suggestion! –

0

Je pense que cela est dû à la différence dans la chaîne de formatage entre votre code et le code dans Ramaze (ou Innate).

"\e[#{COLOR_CODE[LEVEL_COLOR[severity]]}m#{string}\e[0m" 

qui se développe à (pour le rouge, et "Bonjour" étant la chaîne):

"\e[31mHello\e[0m" 

\e, Ruby, est converti en \033, donc cela ne devrait pas nous donner du mal:

bien sûr, est équivalent à être équivalent \033

"\033" == "\e" # => true 

La différence majeure est que Ramaze ne spécifie pas de couleur de fond, car cela peut entraîner une sortie moche si elle contraste trop avec l'arrière-plan par défaut du terminal. Mais comme il peut être complètement illisible si votre arrière-plan est bleu, rouge, blanc ou l'une des autres couleurs de premier plan que Ramaze utilise pour la journalisation, je pense que nous devrions définir le fond explicitement, et espérons que cela corrigera aussi problème de Windows.

+0

Je suis en fait obtenir des codes d'échappement comme ← [34m plutôt que des couleurs du tout, donc ce n'est pas (encore) un problème de contraste ou de schémas de couleurs laides. –

0

essayez d'ajouter ceci dans votre app.rb

require "win32console" 
require "Win32/Console/ANSI" 
+0

J'ai essayé ceci dans mon application et aussi dans l'app.rb de Ramaze (au cas où c'est ce que vous vouliez dire) mais aucune amélioration - encore des séquences d'échappement. –

1

Essayez

require 'rubygems' 
require 'win32console' 
include Win32::Console::ANSI 
include Term::ANSIColor 
0

win32console doit être nécessaire avant Ramaze début. Cela est dû au fait que Ramaze et son mécanisme de journalisation conservent les références à stdout et stderr avant que win32console ne les remplace.

+0

J'ai "require 'win32console'" avant la ligne exigeant ramaze mais cela ne semble pas aider. Ou n'est-ce pas tout à fait ce que vous vouliez dire? –

+0

Vous devez installer win32console gem et l'exiger avant ramaze. Cela devrait envelopper la coloration ANSI et afficher correctement les couleurs sur l'invite Windows. –

0

Je viens d'essayer la suggestion dans How to load ANSI escape codes or get coloured file listing in WinXP cmd shell et cela a bien fonctionné.

Fondamentalement, j'attrapé ANSICon puis couru:

ansicon.exe -I (qui est une capitale 'i' il)

du sous-dossier x86, il a été extrait. Cela a installé la DLL de code de couleur ANSI comme crochet à toutes les fenêtres cmd.exe ouvertes après cela. Yo et voyez - couleurs dans cmd.exe