metasploit-framework/lib/rex/ui/text/output.rb

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