Files
metasploit-gs/lib/rex/ui/text/output.rb
T
David Maloney c9b5e43201 only use ANSI ctrl chars in stdio output
the async output fix was put in the parent UI IO
class when it only really makes sense in stdio.
Those ctrl sequences will noly be understood if output to a
terminal.

MS-2298
2016-12-01 11:06:17 -06:00

101 lines
1.8 KiB
Ruby

# -*- coding: binary -*-
require 'rex/ui'
module Rex
module Ui
module Text
###
#
# This class implements text-based output but is not
# tied to an output medium.
#
###
class Output < Rex::Ui::Output
require 'rex/ui/text/output/stdio'
require 'rex/ui/text/output/socket'
require 'rex/ui/text/output/buffer'
require 'rex/ui/text/output/file'
require 'rex/ui/text/output/tee'
require 'rex/text/color'
include Rex::Text::Color
def initialize
@config = {
:color => :auto, # true, false, :auto
}
super
end
attr_reader :config
attr_accessor :input
def disable_color
@config[:color] = false
end
def enable_color
@config[:color] = true
end
def auto_color
@config[:color] = :auto
end
def update_prompt(prompt = nil)
return if prompt.nil?
substitute_colors(prompt, true)
end
def print_error(msg = '')
print_line("%bld%red[-]%clr #{msg}")
end
alias_method :print_bad, :print_error
def print_good(msg = '')
print_line("%bld%grn[+]%clr #{msg}")
end
def print_status(msg = '')
print_line("%bld%blu[*]%clr #{msg}")
end
def print_line(msg = '')
print(msg + "\n")
end
def print_warning(msg = '')
print_line("%bld%yel[!]%clr #{msg}")
end
def print(msg = '')
print_raw(substitute_colors(msg))
end
def reset
end
def puts(*args)
args.each do |argument|
line = argument.to_s
print_raw(line)
unless line.ends_with? "\n"
# yes, this is output, but `IO#puts` uses `rb_default_rs`, which is
# [`$/`](https://github.com/ruby/ruby/blob/3af8e150aded9d162bfd41426aaaae0279e5a653/io.c#L12168-L12172),
# which is [`$INPUT_RECORD_SEPARATOR`](https://github.com/ruby/ruby/blob/3af8e150aded9d162bfd41426aaaae0279e5a653/lib/English.rb#L83)
print_raw($INPUT_RECORD_SEPARATOR)
end
end
nil
end
end
end
end
end