74 lines
1.3 KiB
Ruby
Raw Normal View History

2016-08-26 16:04:47 +02:00
module Tty
module_function
def strip_ansi(string)
string.gsub(/\033\[\d+(;\d+)*m/, "")
end
def width
@width ||= begin
2018-09-17 19:44:12 +02:00
_, width = `/bin/stty size 2>/dev/null`.split
width, = `/usr/bin/tput cols 2>/dev/null`.split if width.to_i.zero?
width ||= 80
width.to_i
end
2016-08-26 16:04:47 +02:00
end
def truncate(string)
(w = width).zero? ? string.to_s : string.to_s[0, w - 4]
end
COLOR_CODES = {
red: 31,
green: 32,
yellow: 33,
blue: 34,
magenta: 35,
cyan: 36,
default: 39,
}.freeze
STYLE_CODES = {
reset: 0,
bold: 1,
italic: 3,
underline: 4,
strikethrough: 9,
no_underline: 24,
}.freeze
CODES = COLOR_CODES.merge(STYLE_CODES).freeze
def append_to_escape_sequence(code)
@escape_sequence ||= []
@escape_sequence << code
self
end
def current_escape_sequence
return "" if @escape_sequence.nil?
2018-09-17 02:45:00 +02:00
2016-08-26 16:04:47 +02:00
"\033[#{@escape_sequence.join(";")}m"
end
def reset_escape_sequence!
@escape_sequence = nil
end
CODES.each do |name, code|
define_singleton_method(name) do
append_to_escape_sequence(code)
end
end
def to_s
2018-08-02 07:20:40 +02:00
if !ENV["HOMEBREW_COLOR"] && (ENV["HOMEBREW_NO_COLOR"] || !$stdout.tty?)
return ""
end
2018-09-17 02:45:00 +02:00
2016-08-26 16:04:47 +02:00
current_escape_sequence
ensure
reset_escape_sequence!
end
end