Class: Win32::Console::ANSI::IO
- Inherits:
-
IO
- Object
- IO
- Win32::Console::ANSI::IO
- Includes:
- Constants
- Defined in:
- lib/Win32/Console/ANSI.rb
Constant Summary collapse
- VERSION =
'0.05'
- DEBUG =
nil
- FD_STD_MAP =
{ :stdout => [1, STD_OUTPUT_HANDLE], :stderr => [2, STD_ERROR_HANDLE] }
- EncodeOk =
@todo: encode is another perl module
false
- OEM =
Win32::Console::OutputCP()
- @@cp =
cpANSI + cpOEM
- @@color =
black foreground
{ 30 => 0, # black foreground 31 => FOREGROUND_RED, # red foreground 32 => FOREGROUND_GREEN, # green foreground 33 => FOREGROUND_RED|FOREGROUND_GREEN, # yellow foreground 34 => FOREGROUND_BLUE, # blue foreground 35 => FOREGROUND_BLUE|FOREGROUND_RED, # magenta foreground 36 => FOREGROUND_BLUE|FOREGROUND_GREEN, # cyan foreground 37 => FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE, # white foreground 40 => 0, # black background 41 => BACKGROUND_RED, # red background 42 => BACKGROUND_GREEN, # green background 43 => BACKGROUND_RED|BACKGROUND_GREEN, # yellow background 44 => BACKGROUND_BLUE, # blue background 45 => BACKGROUND_BLUE|BACKGROUND_RED, # magenta background 46 => BACKGROUND_BLUE|BACKGROUND_GREEN, # cyan background 47 => BACKGROUND_RED|BACKGROUND_GREEN|BACKGROUND_BLUE, # white background }
Constants included from Constants
Constants::BACKGROUND_BLUE, Constants::BACKGROUND_GREEN, Constants::BACKGROUND_INTENSITY, Constants::BACKGROUND_RED, Constants::CAPSLOCK_ON, Constants::CONSOLE_TEXTMODE_BUFFER, Constants::CTRL_BREAK_EVENT, Constants::CTRL_CLOSE_EVENT, Constants::CTRL_C_EVENT, Constants::CTRL_LOGOFF_EVENT, Constants::CTRL_SHUTDOWN_EVENT, Constants::DOUBLE_CLICK, Constants::ENABLE_ECHO_INPUT, Constants::ENABLE_LINE_INPUT, Constants::ENABLE_MOUSE_INPUT, Constants::ENABLE_PROCESSED_INPUT, Constants::ENABLE_PROCESSED_OUTPUT, Constants::ENABLE_WINDOW_INPUT, Constants::ENABLE_WRAP_AT_EOL_OUTPUT, Constants::ENHANCED_KEY, Constants::FILE_SHARE_READ, Constants::FILE_SHARE_WRITE, Constants::FOCUS_EVENT, Constants::FOREGROUND_BLUE, Constants::FOREGROUND_GREEN, Constants::FOREGROUND_INTENSITY, Constants::FOREGROUND_RED, Constants::FROM_LEFT_1ST_BUTTON_PRESSED, Constants::FROM_LEFT_2ND_BUTTON_PRESSED, Constants::FROM_LEFT_3RD_BUTTON_PRESSED, Constants::FROM_LEFT_4TH_BUTTON_PRESSED, Constants::GENERIC_READ, Constants::GENERIC_WRITE, Constants::INVALID_HANDLE_VALUE, Constants::KEY_EVENT, Constants::LEFT_ALT_PRESSED, Constants::LEFT_CTRL_PRESSED, Constants::MENU_EVENT, Constants::MOUSE_EVENT, Constants::MOUSE_MOVED, Constants::MOUSE_WHEELED, Constants::NUMLOCK_ON, Constants::RIGHTMOST_BUTTON_PRESSED, Constants::RIGHT_ALT_PRESSED, Constants::RIGHT_CTRL_PRESSED, Constants::SCROLLLOCK_ON, Constants::SHIFT_PRESSED, Constants::STD_ERROR_HANDLE, Constants::STD_INPUT_HANDLE, Constants::STD_OUTPUT_HANDLE, Constants::WINDOW_BUFFER_SIZE_EVENT
Instance Method Summary collapse
-
#initialize(fd_std = :stdout) ⇒ IO
constructor
A new instance of IO.
-
#putc(int) ⇒ Object
this redefined #putc buffers escape sequences but passes other values to #write as normal.
-
#redirected? ⇒ Boolean
Returns true if output is being redirected to something other then a terminal.
-
#write(*s) ⇒ Object
#write checks if $stdout is going to the console or if it’s being redirected.
Constructor Details
#initialize(fd_std = :stdout) ⇒ IO
Returns a new instance of IO.
85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 |
# File 'lib/Win32/Console/ANSI.rb', line 85 def initialize(fd_std = :stdout) fd, handle = FD_STD_MAP[fd_std] super(fd, 'w') @Out = Win32::Console.new(handle) @x = @y = 0 # to save cursor position # None of these calls will work, when we are redirected unless redirected? @default_foreground = @Out.DefaultForeground @default_background = @Out.DefaultBackground @default_bold = @Out.DefaultBold @default_underline = @Out.DefaultUnderline end @foreground = @default_foreground @background = @default_background @bold = @default_bold @underline = @default_underline @revideo = @concealed = nil @conv = 1 # char conversion by default @buffer = [] STDERR.puts "Console Mode=#{@Out.Mode}" if DEBUG end |
Instance Method Details
#putc(int) ⇒ Object
this redefined #putc buffers escape sequences but passes other values to #write as normal.
112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 |
# File 'lib/Win32/Console/ANSI.rb', line 112 def putc(int) int = int.ord if RUBY_VERSION >= "1.9" if @buffer.empty? # match \e unless int == 27 write(int.chr) else @buffer << int end else @buffer << int case int # match m, J, L, M, @, P, A, B, C, D, E, F, G, H, f, s, u, U, K, X when 109, 74, 76, 77, 64, 80, 65, 66, 67, 68, 69, 70, 71, 72, 102, 115, 117, 85, 75, 88 write(@buffer.pack("c*")) @buffer.clear end end end |
#redirected? ⇒ Boolean
Returns true if output is being redirected to something other then a terminal.
For now just checks the status of Win32::Console#redirected?
154 155 156 |
# File 'lib/Win32/Console/ANSI.rb', line 154 def redirected? @Out.redirected? end |
#write(*s) ⇒ Object
#write checks if $stdout is going to the console or if it’s being redirected. When to the console, it passes the string to _PrintString to be parsed for escape codes.
When redirected, it passes to WriteFile to allow escape codes and all to be output. The application that is handling the redirected IO should handle coloring. For Ruby applications, this means requiring Win32Conole again.
142 143 144 145 146 147 148 |
# File 'lib/Win32/Console/ANSI.rb', line 142 def write(*s) if redirected? s.each{ |x| @Out.WriteFile(x.dup.to_s) } else s.each{ |x| _PrintString(x) } end end |