Почему Win32Console в Ruby у меня не работает с Ramaze? - PullRequest
3 голосов
/ 29 апреля 2009

Я установил Ramaze (в Windows XP), и он предложил также установить win32console, чтобы получить цветной вывод журнала, когда он работает.

Однако после этого я получаю управляющие коды, а не цвета, как показано ниже:

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

Это происходит даже при чистой установке Ruby / Ramaze / win32console

Моя настройка:

  • Windows XP с SP # 3
  • ruby ​​1.8.6 (2008-08-11, уровень обновления 287) [i386-mswin32]
  • rubygems версия 1.3.1
  • win32console gem версия 1.2.0

Кстати, кажется, что работает следующая тестовая программа, поэтому мне интересно, не является ли это проблемой Ramaze / win32console на моей машине.

#!/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

Ответы [ 6 ]

1 голос
/ 30 сентября 2009

Попробуйте

require 'rubygems'
require 'win32console'
include Win32::Console::ANSI
include Term::ANSIColor
1 голос
/ 29 апреля 2009

Возможно, это не тот ответ, который вы ищете, но я использую MSYS / MinGW в Windows, и его bash правильно отображает цвета без драгоценного камня win32console.

0 голосов
/ 23 ноября 2010

Я только что попробовал предложение в Как загрузить escape-коды ANSI или получить цветной список файлов в оболочке WinXP cmd , и это сработало хорошо.

По сути, я схватил ANSICon и затем побежал:

ansicon.exe -I (там это заглавная буква 'i')

из подпапки x86, в которую он был извлечен. Это установило DLL-код цвета ANSI как ловушку для всех окон cmd.exe, открытых после этого. Йо и вот - цвета в cmd.exe

0 голосов
/ 30 сентября 2009

win32console требуется перед началом Ramaze.

Это потому, что Ramaze и его механизм ведения журнала сохраняют ссылки на stdout и stderr до того, как win32console заменит их.

0 голосов
/ 29 апреля 2009

попробуйте добавить это в вашем app.rb

require "win32console"
require "Win32/Console/ANSI"
0 голосов
/ 29 апреля 2009

Я думаю, это вызвано различием в строке форматирования между вашим кодом и кодом в Ramaze (или Innate).

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

Это расширяется до (для красного, и "Hello" является строкой):

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

\e в Ruby конвертируется в \033, так что это не должно нас беспокоить:

конечно, эквивалентно эквивалентно \033

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

Основное различие заключается в том, что Ramaze не указывает цвет фона, так как это может привести к ужасному выводу, если он слишком сильно контрастирует с заданным по умолчанию фоном терминала. Но так как это может быть совершенно нечитаемым, если ваш фон синий, красный, белый или любой другой цвет переднего плана, который Ramaze использует для регистрации, я думаю, что мы должны определить фон явно, и надеемся, что это также исправит ваш выпуск windows.

...