3

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
4

6 に答える 6

1

あなたが探している答えではないかもしれませんが、私はWindows でMSYS/MinGWを使用しており、win32console gem なしで bash が適切に色を表示します。

于 2009-04-29T09:36:32.333 に答える
1

試す

require 'rubygems'
require 'win32console'
include Win32::Console::ANSI
include Term::ANSIColor
于 2009-09-30T14:14:37.150 に答える
0

ANSIエスケープコードをロードする方法、またはWinXP cmdシェルで色付きのファイルリストを取得する方法の提案を試したところ、うまくいきました。

基本的に、私はANSIConをつかんで実行しました:

ansicon.exe -I (大文字の「i」です)

抽出先の x86 サブフォルダーから。これにより、その後開いたすべての cmd.exe ウィンドウへのフックとして ANSI カラー コード DLL がインストールされました。Yo and behold - cmd.exe の色

于 2010-11-23T14:00:30.830 に答える
0

これを app.rb に追加してみてください

require "win32console"
require "Win32/Console/ANSI"
于 2009-04-29T19:26:45.050 に答える
0

Ramaze を開始する前に、win32console が必要です。

これは、Ramaze とそのロギング メカニズムが stdout と stderr への参照を維持し、win32console がそれらを置き換えるためです。

于 2009-09-30T14:51:00.047 に答える
0

これは、あなたのコードと 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 が background-color を指定しないことです。端末のデフォルトの背景とのコントラストが強すぎると、見苦しい出力になる可能性があるためです。しかし、背景が青、赤、白、または Ramaze がロギングに使用するその他の前景色の場合、完全に判読できない可能性があるため、背景を明示的に定義する必要があると思います。窓の問題。

于 2009-04-29T13:49:20.540 に答える