class SSHKit::Color

Very basic support for ANSI color, so that we don't have to rely on any external dependencies. This class handles colorizing strings, and automatically disabling color if the underlying output is not a tty.

Constants

COLOR_CODES

Public Class Methods

new(output, env=ENV) click to toggle source
# File lib/sshkit/color.rb, line 26
def initialize(output, env=ENV)
  @output, @env = output, env
end

Public Instance Methods

colorize(obj, color, mode=nil) click to toggle source

Converts the given obj to string and surrounds in the appropriate ANSI color escape sequence, based on the specified color and mode. The color must be a symbol (see COLOR_CODES for a complete list).

If the underlying output does not support ANSI color (see `colorize?), the string will be not be colorized. Likewise if the specified color symbol is unrecognized, the string will not be colorized.

Note that the only mode currently support is :bold. All other values will be silently ignored (i.e. treated the same as mode=nil).

# File lib/sshkit/color.rb, line 41
def colorize(obj, color, mode=nil)
  string = obj.to_s
  return string unless colorize?
  return string unless COLOR_CODES.key?(color)

  result = mode == :bold ? "\e[1;" : "\e[0;"
  result << COLOR_CODES.fetch(color).to_s
  result << ";49m#{string}\e[0m"
end
colorize?() click to toggle source

Returns `true` if the underlying output is a tty, or if the SSHKIT_COLOR environment variable is set.

# File lib/sshkit/color.rb, line 54
def colorize?
  @env['SSHKIT_COLOR'] || (@output.respond_to?(:tty?) && @output.tty?)
end