ConsoleSourceConsoleTerminalXTerm

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