Module: CLI::UI::ANSI
- Extended by:
- T::Sig
- Defined in:
- lib/cli/ui/ansi.rb
Constant Summary collapse
- ESC =
"\x1b"
Class Method Summary collapse
- .clear_to_end_of_line ⇒ Object
- .control(args, cmd) ⇒ Object
- .cursor_back(n = 1) ⇒ Object
- .cursor_down(n = 1) ⇒ Object
- .cursor_forward(n = 1) ⇒ Object
- .cursor_horizontal_absolute(n = 1) ⇒ Object
- .cursor_restore ⇒ Object
- .cursor_save ⇒ Object
- .cursor_up(n = 1) ⇒ Object
- .hide_cursor ⇒ Object
- .next_line ⇒ Object
- .previous_line ⇒ Object
- .printing_width(str) ⇒ Object
- .sgr(params) ⇒ Object
- .show_cursor ⇒ Object
- .strip_codes(str) ⇒ Object
Methods included from T::Sig
Class Method Details
.clear_to_end_of_line ⇒ Object
176 177 178 |
# File 'lib/cli/ui/ansi.rb', line 176 def self.clear_to_end_of_line control('', 'K') end |
.control(args, cmd) ⇒ Object
56 57 58 |
# File 'lib/cli/ui/ansi.rb', line 56 def self.control(args, cmd) ESC + '[' + args + cmd end |
.cursor_back(n = 1) ⇒ Object
114 115 116 117 118 |
# File 'lib/cli/ui/ansi.rb', line 114 def self.cursor_back(n = 1) return '' if n.zero? control(n.to_s, 'D') end |
.cursor_down(n = 1) ⇒ Object
88 89 90 91 92 |
# File 'lib/cli/ui/ansi.rb', line 88 def self.cursor_down(n = 1) return '' if n.zero? control(n.to_s, 'B') end |
.cursor_forward(n = 1) ⇒ Object
101 102 103 104 105 |
# File 'lib/cli/ui/ansi.rb', line 101 def self.cursor_forward(n = 1) return '' if n.zero? control(n.to_s, 'C') end |
.cursor_horizontal_absolute(n = 1) ⇒ Object
127 128 129 130 131 |
# File 'lib/cli/ui/ansi.rb', line 127 def self.cursor_horizontal_absolute(n = 1) cmd = control(n.to_s, 'G') cmd += cursor_back if CLI::UI::OS.current.shift_cursor_back_on_horizontal_absolute? cmd end |
.cursor_restore ⇒ Object
157 158 159 |
# File 'lib/cli/ui/ansi.rb', line 157 def self.cursor_restore control('', 'u') end |
.cursor_save ⇒ Object
150 151 152 |
# File 'lib/cli/ui/ansi.rb', line 150 def self.cursor_save control('', 's') end |
.cursor_up(n = 1) ⇒ Object
75 76 77 78 79 |
# File 'lib/cli/ui/ansi.rb', line 75 def self.cursor_up(n = 1) return '' if n.zero? control(n.to_s, 'A') end |
.hide_cursor ⇒ Object
143 144 145 |
# File 'lib/cli/ui/ansi.rb', line 143 def self.hide_cursor control('', '?25l') end |
.next_line ⇒ Object
164 165 166 |
# File 'lib/cli/ui/ansi.rb', line 164 def self.next_line cursor_down + cursor_horizontal_absolute end |
.previous_line ⇒ Object
171 172 173 |
# File 'lib/cli/ui/ansi.rb', line 171 def self.previous_line cursor_up + cursor_horizontal_absolute end |
.printing_width(str) ⇒ Object
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
# File 'lib/cli/ui/ansi.rb', line 18 def self.printing_width(str) zwj = T.let(false, T::Boolean) strip_codes(str).codepoints.reduce(0) do |acc, cp| if zwj zwj = false next acc end case cp when 0x200d # zero-width joiner zwj = true acc when "\n" acc else acc + 1 end end end |
.sgr(params) ⇒ Object
62 63 64 |
# File 'lib/cli/ui/ansi.rb', line 62 def self.sgr(params) control(params, 'm') end |
.show_cursor ⇒ Object
136 137 138 |
# File 'lib/cli/ui/ansi.rb', line 136 def self.show_cursor control('', '?25h') end |
.strip_codes(str) ⇒ Object
44 45 46 |
# File 'lib/cli/ui/ansi.rb', line 44 def self.strip_codes(str) str.gsub(/\x1b\[[\d;]+[A-z]|\r/, '') end |