Module: Dev::UI::ANSI

Defined in:
lib/dev/ui/ansi.rb

Constant Summary collapse

ESC =
"\x1b"

Class Method Summary collapse

Class Method Details

.control(args, cmd) ⇒ Object



18
19
20
# File 'lib/dev/ui/ansi.rb', line 18

def self.control(args, cmd)
  ESC + "[" + args + cmd
end

.cursor_back(n = 1) ⇒ Object



44
45
46
47
# File 'lib/dev/ui/ansi.rb', line 44

def self.cursor_back(n = 1)
  return '' if n.zero?
  control(n.to_s, 'D')
end

.cursor_down(n = 1) ⇒ Object



34
35
36
37
# File 'lib/dev/ui/ansi.rb', line 34

def self.cursor_down(n = 1)
  return '' if n.zero?
  control(n.to_s, 'B')
end

.cursor_forward(n = 1) ⇒ Object



39
40
41
42
# File 'lib/dev/ui/ansi.rb', line 39

def self.cursor_forward(n = 1)
  return '' if n.zero?
  control(n.to_s, 'C')
end

.cursor_up(n = 1) ⇒ Object

Cursor Movement



29
30
31
32
# File 'lib/dev/ui/ansi.rb', line 29

def self.cursor_up(n = 1)
  return '' if n.zero?
  control(n.to_s, 'A')
end

.end_of_lineObject



69
70
71
# File 'lib/dev/ui/ansi.rb', line 69

def self.end_of_line
  control("\033[", 'C')
end

.hide_cursorObject



55
56
57
# File 'lib/dev/ui/ansi.rb', line 55

def self.hide_cursor
  control('', "?25l")
end

.next_lineObject

Line Handling



61
62
63
# File 'lib/dev/ui/ansi.rb', line 61

def self.next_line
  cursor_down + control('1', 'G')
end

.previous_lineObject



65
66
67
# File 'lib/dev/ui/ansi.rb', line 65

def self.previous_line
  cursor_up + control('1', 'G')
end

.printing_width(str) ⇒ Object

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



10
11
12
# File 'lib/dev/ui/ansi.rb', line 10

def self.printing_width(str)
  strip_codes(str).size
end

.sgr(params) ⇒ Object



23
24
25
# File 'lib/dev/ui/ansi.rb', line 23

def self.sgr(params)
  control(params.to_s, 'm')
end

.show_cursorObject

Cursor Visibility



51
52
53
# File 'lib/dev/ui/ansi.rb', line 51

def self.show_cursor
  control('', "?25h")
end

.strip_codes(str) ⇒ Object



14
15
16
# File 'lib/dev/ui/ansi.rb', line 14

def self.strip_codes(str)
  str.gsub(/\x1b\[[\d;]+[A-z]|\r/, '')
end