module Dex::UI::ANSI

Constants

ESC

Public Class Methods

control(args, cmd) click to toggle source
# File lib/dex/ui/ansi.rb, line 18
def self.control(args, cmd)
  ESC + "[" + args + cmd
end
cursor_back(n = 1) click to toggle source
# File lib/dex/ui/ansi.rb, line 42
def self.cursor_back(n = 1)
  return '' if n.zero?
  control(n.to_s, 'D')
end
cursor_down(n = 1) click to toggle source
# File lib/dex/ui/ansi.rb, line 32
def self.cursor_down(n = 1)
  return '' if n.zero?
  control(n.to_s, 'B')
end
cursor_forward(n = 1) click to toggle source
# File lib/dex/ui/ansi.rb, line 37
def self.cursor_forward(n = 1)
  return '' if n.zero?
  control(n.to_s, 'C')
end
cursor_up(n = 1) click to toggle source
# File lib/dex/ui/ansi.rb, line 27
def self.cursor_up(n = 1)
  return '' if n.zero?
  control(n.to_s, 'A')
end
printing_width(str) click to toggle source

ANSI escape sequences (like x1b[31m) have zero width. when calculating the padding width, we must exclude them.

# File lib/dex/ui/ansi.rb, line 10
def self.printing_width(str)
  strip_codes(str).size
end
sgr(params) click to toggle source

en.wikipedia.org/wiki/ANSI_escape_code#graphics

# File lib/dex/ui/ansi.rb, line 23
def self.sgr(params)
  control(params.to_s, 'm')
end
strip_codes(str) click to toggle source
# File lib/dex/ui/ansi.rb, line 14
def self.strip_codes(str)
  str.gsub(/\x1b\[[\d;]+[A-z]|\r/, '')
end