class XTerm
XTerm style terminal output.
Definitions
COLORS
XTerm color codes.
Implementation
COLORS = {
black: 0,
red: 1,
green: 2,
yellow: 3,
blue: 4,
magenta: 5,
cyan: 6,
white: 7,
default: 9,
}.freeze
ATTRIBUTES
XTerm attribute codes.
Implementation
ATTRIBUTES = {
normal: 0,
bold: 1,
bright: 1,
faint: 2,
italic: 3,
underline: 4,
blink: 5,
reverse: 7,
hidden: 8,
}.freeze
def colors?
Whether the terminal supports colors.
Implementation
def colors?
true
end
def size
The size of the terminal.
Implementation
def size
@stream.winsize
rescue Errno::ENOTTY
# Fake it...
[24, 80]
end
def width
The width of the terminal.
Implementation
def width
size.last
end
def style(foreground, background = nil, *attributes)
Apply the given style to the output.
Signature
-
parameter
foreground
Symbol
The foreground color.
-
parameter
background
Symbol
The background color.
-
parameter
attributes
Array(Symbol)
The attributes to apply.
-
returns
String
The style code.
Implementation
def style(foreground, background = nil, *attributes)
tokens = []
if foreground
tokens << 30 + COLORS.fetch(foreground)
end
if background
tokens << 40 + COLORS.fetch(background)
end
attributes.each do |attribute|
tokens << ATTRIBUTES.fetch(attribute){attribute.to_i}
end
return "\e[#{tokens.join(';')}m"
end
def reset
Reset the style.
Signature
-
returns
String
The reset code.
Implementation
def reset
"\e[0m"
end