dev-ui 0.0.2 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +2 -0
- data/lib/dev/ui.rb +4 -3
- data/lib/dev/ui/ansi.rb +21 -1
- data/lib/dev/ui/formatter.rb +10 -8
- data/lib/dev/ui/frame.rb +26 -10
- data/lib/dev/ui/interactive_prompt.rb +4 -11
- data/lib/dev/ui/spinner.rb +2 -2
- data/lib/dev/ui/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: '0088aa409f65b6130d130f404bb71662a06a6f3d'
|
|
4
|
+
data.tar.gz: a1a7e7da5c2b8534882f67b22953d4fe886f4d4b
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: d8dc9c83e8145df6ba606ad805b9c2fd1444c372ad00cbd34e534878ba1a3f0180d00488371cac76706f22bd4d8335e1dc51a3b144fc00e08496ecd07eac471e
|
|
7
|
+
data.tar.gz: b89f0a81a0840ed0ffde9b9f118ae4d9552b0ac4fde6505158a63ecd2bddcb4fdc8a1a74db78ffd9a7a0a27acc970cc68321905a1cfa89135299d1ad2883e2f0
|
data/README.md
CHANGED
data/lib/dev/ui.rb
CHANGED
|
@@ -67,9 +67,10 @@ module Dev
|
|
|
67
67
|
Dev::UI::StdoutRouter.duplicate_output_to = File.open(path, 'w')
|
|
68
68
|
yield
|
|
69
69
|
ensure
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
70
|
+
if file_descriptor = Dev::UI::StdoutRouter.duplicate_output_to
|
|
71
|
+
file_descriptor.close
|
|
72
|
+
Dev::UI::StdoutRouter.duplicate_output_to = nil
|
|
73
|
+
end
|
|
73
74
|
end
|
|
74
75
|
|
|
75
76
|
def self.raw
|
data/lib/dev/ui/ansi.rb
CHANGED
|
@@ -7,8 +7,24 @@ module Dev
|
|
|
7
7
|
|
|
8
8
|
# ANSI escape sequences (like \x1b[31m) have zero width.
|
|
9
9
|
# when calculating the padding width, we must exclude them.
|
|
10
|
+
# This also implements a *reaaaallly* shitty version of utf8 character
|
|
11
|
+
# width calculation like we could get for real from something like
|
|
12
|
+
# utf8proc.
|
|
10
13
|
def self.printing_width(str)
|
|
11
|
-
|
|
14
|
+
zwj = false
|
|
15
|
+
strip_codes(str).codepoints.reduce(0) do |acc, cp|
|
|
16
|
+
if zwj
|
|
17
|
+
zwj = false
|
|
18
|
+
next acc
|
|
19
|
+
end
|
|
20
|
+
case cp
|
|
21
|
+
when 0x200d # zero-width joiner
|
|
22
|
+
zwj = true
|
|
23
|
+
acc
|
|
24
|
+
else
|
|
25
|
+
acc + 1
|
|
26
|
+
end
|
|
27
|
+
end
|
|
12
28
|
end
|
|
13
29
|
|
|
14
30
|
def self.strip_codes(str)
|
|
@@ -46,6 +62,10 @@ module Dev
|
|
|
46
62
|
control(n.to_s, 'D')
|
|
47
63
|
end
|
|
48
64
|
|
|
65
|
+
def self.cursor_horizontal_absolute(n = 1)
|
|
66
|
+
control(n.to_s, 'G')
|
|
67
|
+
end
|
|
68
|
+
|
|
49
69
|
# Cursor Visibility
|
|
50
70
|
|
|
51
71
|
def self.show_cursor
|
data/lib/dev/ui/formatter.rb
CHANGED
|
@@ -8,14 +8,16 @@ module Dev
|
|
|
8
8
|
class Formatter
|
|
9
9
|
SGR_MAP = {
|
|
10
10
|
# presentational
|
|
11
|
-
'red'
|
|
12
|
-
'green'
|
|
13
|
-
'yellow'
|
|
14
|
-
'blue'
|
|
15
|
-
'magenta'
|
|
16
|
-
'cyan'
|
|
17
|
-
'bold'
|
|
18
|
-
'
|
|
11
|
+
'red' => '31',
|
|
12
|
+
'green' => '32',
|
|
13
|
+
'yellow' => '33',
|
|
14
|
+
'blue' => '34',
|
|
15
|
+
'magenta' => '35',
|
|
16
|
+
'cyan' => '36',
|
|
17
|
+
'bold' => '1',
|
|
18
|
+
'italic' => '3',
|
|
19
|
+
'underline' => '4',
|
|
20
|
+
'reset' => '0',
|
|
19
21
|
|
|
20
22
|
# semantic
|
|
21
23
|
'error' => '31', # red
|
data/lib/dev/ui/frame.rb
CHANGED
|
@@ -130,24 +130,40 @@ module Dev
|
|
|
130
130
|
prefix << ' ' << text << ' '
|
|
131
131
|
end
|
|
132
132
|
|
|
133
|
+
termwidth = Dev::UI::Terminal.width
|
|
134
|
+
|
|
133
135
|
suffix = String.new
|
|
134
136
|
if right_text
|
|
135
|
-
suffix << ' ' << right_text << ' '
|
|
137
|
+
suffix << ' ' << right_text << ' '
|
|
136
138
|
end
|
|
137
139
|
|
|
138
|
-
|
|
139
|
-
termwidth
|
|
140
|
-
|
|
140
|
+
suffix_width = Dev::UI::ANSI.printing_width(suffix)
|
|
141
|
+
suffix_end = termwidth - 2
|
|
142
|
+
suffix_start = suffix_end - suffix_width
|
|
141
143
|
|
|
142
|
-
|
|
144
|
+
prefix_width = Dev::UI::ANSI.printing_width(prefix)
|
|
145
|
+
prefix_start = 0
|
|
146
|
+
prefix_end = prefix_start + prefix_width
|
|
147
|
+
|
|
148
|
+
if prefix_end > suffix_start
|
|
143
149
|
suffix = ''
|
|
144
|
-
|
|
145
|
-
|
|
150
|
+
# if prefix_end > termwidth
|
|
151
|
+
# we *could* truncate it, but let's just let it overflow to the
|
|
152
|
+
# next line and call it poor usage of this API.
|
|
146
153
|
end
|
|
147
|
-
padwidth = termwidth - textwidth
|
|
148
|
-
pad = Dev::UI::Box::Heavy::HORZ * padwidth
|
|
149
154
|
|
|
150
|
-
|
|
155
|
+
o = String.new
|
|
156
|
+
|
|
157
|
+
o << color.code
|
|
158
|
+
o << Dev::UI::Box::Heavy::HORZ * termwidth # draw a full line
|
|
159
|
+
o << Dev::UI::ANSI.cursor_horizontal_absolute(1 + prefix_start)
|
|
160
|
+
o << prefix
|
|
161
|
+
o << Dev::UI::ANSI.cursor_horizontal_absolute(1 + suffix_start)
|
|
162
|
+
o << suffix
|
|
163
|
+
o << Dev::UI::Color::RESET.code
|
|
164
|
+
o << "\n"
|
|
165
|
+
|
|
166
|
+
o
|
|
151
167
|
end
|
|
152
168
|
|
|
153
169
|
module FrameStack
|
|
@@ -85,17 +85,10 @@ module Dev
|
|
|
85
85
|
end
|
|
86
86
|
|
|
87
87
|
def raw_tty!
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
end
|
|
93
|
-
yield
|
|
94
|
-
ensure
|
|
95
|
-
begin
|
|
96
|
-
$stdin.cooked!
|
|
97
|
-
rescue Errno::ENOTTY
|
|
98
|
-
''
|
|
88
|
+
if ENV['TEST'] || !$stdin.tty?
|
|
89
|
+
yield
|
|
90
|
+
else
|
|
91
|
+
$stdin.raw { yield }
|
|
99
92
|
end
|
|
100
93
|
end
|
|
101
94
|
|
data/lib/dev/ui/spinner.rb
CHANGED
|
@@ -151,11 +151,11 @@ module Dev
|
|
|
151
151
|
end
|
|
152
152
|
|
|
153
153
|
Dev::UI::Frame.divider('STDOUT')
|
|
154
|
-
out = "(empty)" if out.strip.empty?
|
|
154
|
+
out = "(empty)" if out.nil? || out.strip.empty?
|
|
155
155
|
puts out
|
|
156
156
|
|
|
157
157
|
Dev::UI::Frame.divider('STDERR')
|
|
158
|
-
err = "(empty)" if err.strip.empty?
|
|
158
|
+
err = "(empty)" if err.nil? || err.strip.empty?
|
|
159
159
|
puts err
|
|
160
160
|
end
|
|
161
161
|
end
|
data/lib/dev/ui/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: dev-ui
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.0
|
|
4
|
+
version: 0.1.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Burke Libbey
|
|
@@ -9,7 +9,7 @@ authors:
|
|
|
9
9
|
autorequire:
|
|
10
10
|
bindir: exe
|
|
11
11
|
cert_chain: []
|
|
12
|
-
date: 2017-
|
|
12
|
+
date: 2017-06-21 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
14
|
- !ruby/object:Gem::Dependency
|
|
15
15
|
name: bundler
|