term 0.9.1
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 +7 -0
- data/LICENSE.txt +21 -0
- data/README.md +43 -0
- data/lib/term.rb +21 -0
- data/lib/term/bell.rb +14 -0
- data/lib/term/checkbox.rb +85 -0
- data/lib/term/code.rb +24 -0
- data/lib/term/color.rb +252 -0
- data/lib/term/confirm.rb +64 -0
- data/lib/term/cursor.rb +177 -0
- data/lib/term/font.rb +23 -0
- data/lib/term/input.rb +42 -0
- data/lib/term/password.rb +63 -0
- data/lib/term/process_bar.rb +24 -0
- data/lib/term/qrcode.rb +15 -0
- data/lib/term/redio.rb +68 -0
- data/lib/term/style.rb +126 -0
- data/lib/term/table.rb +76 -0
- data/lib/term/version.rb +6 -0
- data/lib/term/window.rb +50 -0
- metadata +245 -0
data/lib/term/style.rb
ADDED
@@ -0,0 +1,126 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
# @author {mailto:cuihaiqin@gmail.com cuihq}
|
4
|
+
class String
|
5
|
+
# string formatting.
|
6
|
+
# see ANSI/VT100 Control sequences.
|
7
|
+
|
8
|
+
# reset all attributes.
|
9
|
+
#
|
10
|
+
# @return [String] formatting string
|
11
|
+
def reset
|
12
|
+
"\e[0m#{self}\e[0m"
|
13
|
+
end
|
14
|
+
|
15
|
+
# string styles.
|
16
|
+
# see ANSI/VT100 Control sequences.
|
17
|
+
STYLE = {
|
18
|
+
bold: 1,
|
19
|
+
dim: 2,
|
20
|
+
italicized: 3,
|
21
|
+
underlined: 4,
|
22
|
+
blink: 5,
|
23
|
+
inverse: 7,
|
24
|
+
hidden: 8,
|
25
|
+
crossed_out: 9
|
26
|
+
}.freeze
|
27
|
+
|
28
|
+
# @!method bold
|
29
|
+
# blod string.
|
30
|
+
#
|
31
|
+
# @return [String] formatting string
|
32
|
+
|
33
|
+
# @!method reset_bold
|
34
|
+
# reset bold string.
|
35
|
+
#
|
36
|
+
# @see bold
|
37
|
+
# @return [String] formatting string
|
38
|
+
|
39
|
+
# @!method dim
|
40
|
+
# dim string.
|
41
|
+
#
|
42
|
+
# @return [String] formatting string
|
43
|
+
|
44
|
+
# @!method reset_dim
|
45
|
+
# reset dim string.
|
46
|
+
#
|
47
|
+
# @see dim
|
48
|
+
# @return [String] formatting string
|
49
|
+
|
50
|
+
# @!method italicized
|
51
|
+
# italicized string.
|
52
|
+
#
|
53
|
+
# @return [String] formatting string
|
54
|
+
|
55
|
+
# @!method reset_italicized
|
56
|
+
# reset italicized string.
|
57
|
+
#
|
58
|
+
# @see italicized
|
59
|
+
# @return [String] formatting string
|
60
|
+
|
61
|
+
# @!method underlined
|
62
|
+
# underlined string.
|
63
|
+
#
|
64
|
+
# @return [String] formatting string
|
65
|
+
|
66
|
+
# @!method reset_underlined
|
67
|
+
# reset underlined string.
|
68
|
+
#
|
69
|
+
# @see underlined
|
70
|
+
# @return [String] formatting string
|
71
|
+
|
72
|
+
# @!method blink
|
73
|
+
# blink string.
|
74
|
+
#
|
75
|
+
# does not work with most of the terminal emulators
|
76
|
+
# @note works in the tty and XIO.
|
77
|
+
# @return [String] formatting string
|
78
|
+
|
79
|
+
# @!method reset_blink
|
80
|
+
# reset blink string.
|
81
|
+
#
|
82
|
+
# @see blink
|
83
|
+
# @return [String] formatting string
|
84
|
+
|
85
|
+
# @!method inverse
|
86
|
+
# nvert the foreground and background colors.
|
87
|
+
#
|
88
|
+
# @return [String] formatting string
|
89
|
+
|
90
|
+
# @!method reset_inverse
|
91
|
+
# reset inverse string.
|
92
|
+
#
|
93
|
+
# @see inverse
|
94
|
+
# @return [String] formatting string
|
95
|
+
|
96
|
+
# @!method hidden
|
97
|
+
# hidden string.
|
98
|
+
#
|
99
|
+
# @note usefull for passwords.
|
100
|
+
# @return [String] formatting string
|
101
|
+
|
102
|
+
# @!method reset_hidden
|
103
|
+
# reset hidden string.
|
104
|
+
#
|
105
|
+
# @see hidden
|
106
|
+
# @return [String] formatting string
|
107
|
+
|
108
|
+
# @!method crossed_out
|
109
|
+
# crossed out string.
|
110
|
+
#
|
111
|
+
# @return [String] formatting string
|
112
|
+
|
113
|
+
# @!method reset_crossed_out
|
114
|
+
# reset crossed out string.
|
115
|
+
#
|
116
|
+
# @see crossed_out
|
117
|
+
# @return [String] formatting string
|
118
|
+
STYLE.each do |name, value|
|
119
|
+
define_method(name) do
|
120
|
+
"\e[#{value}m#{self}\e[0m"
|
121
|
+
end
|
122
|
+
define_method("reset_#{name}") do
|
123
|
+
"\e[#{10 + value}m#{self}\e[0m"
|
124
|
+
end
|
125
|
+
end
|
126
|
+
end
|
data/lib/term/table.rb
ADDED
@@ -0,0 +1,76 @@
|
|
1
|
+
# cording: utf-8
|
2
|
+
|
3
|
+
require 'unicode/display_width'
|
4
|
+
|
5
|
+
# @author {mailto:cuihaiqin@gmail.com cuihq}
|
6
|
+
class IO
|
7
|
+
# Table Component.
|
8
|
+
class Table
|
9
|
+
# the table border character.
|
10
|
+
BORDER = {
|
11
|
+
sep: '│',
|
12
|
+
line: '-',
|
13
|
+
top: ['┌', '┬', '┐'],
|
14
|
+
mid: ['├', '┼', '┤'],
|
15
|
+
bot: ['└', '┴', '┘']
|
16
|
+
}.freeze
|
17
|
+
|
18
|
+
def initialize
|
19
|
+
@data = []
|
20
|
+
@size = []
|
21
|
+
@column_width = []
|
22
|
+
end
|
23
|
+
|
24
|
+
# add row to the table
|
25
|
+
#
|
26
|
+
# @param row [Array] the row to the table
|
27
|
+
# @return [self] table self
|
28
|
+
def <<(row)
|
29
|
+
@data << row.map(&:to_s)
|
30
|
+
@size << row.map { |cell| cell.to_s.display_width }
|
31
|
+
self
|
32
|
+
end
|
33
|
+
|
34
|
+
# display table.
|
35
|
+
#
|
36
|
+
# @return [String] the table
|
37
|
+
def to_s
|
38
|
+
@column_width = calc_column_width
|
39
|
+
res = get_border_row(BORDER[:top])
|
40
|
+
res << @data.map { |row| get_content_row(row, BORDER[:sep]) }
|
41
|
+
.join(get_border_row(BORDER[:mid]))
|
42
|
+
res << get_border_row(BORDER[:bot])
|
43
|
+
end
|
44
|
+
|
45
|
+
private
|
46
|
+
|
47
|
+
# get column width.
|
48
|
+
def calc_column_width
|
49
|
+
@size.transpose.map(&:max)
|
50
|
+
end
|
51
|
+
|
52
|
+
# get border row.
|
53
|
+
def get_border_row(border)
|
54
|
+
left, mid, right = border
|
55
|
+
line = @column_width.map { |size| BORDER[:line] * size }.join(mid)
|
56
|
+
"#{left}#{line}#{right}#{$/}"
|
57
|
+
end
|
58
|
+
|
59
|
+
# get content row.
|
60
|
+
def get_content_row(row, sep)
|
61
|
+
res = ''
|
62
|
+
row.each_with_index do |cell, column|
|
63
|
+
size = @column_width[column] - cell.display_width
|
64
|
+
res << "#{cell}#{' ' * size}#{sep}"
|
65
|
+
end
|
66
|
+
"#{sep}#{res}#{$/}"
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
# get table component.
|
71
|
+
#
|
72
|
+
# @return [Table] the table instance
|
73
|
+
def self.table
|
74
|
+
IO::Table.new
|
75
|
+
end
|
76
|
+
end
|
data/lib/term/version.rb
ADDED
data/lib/term/window.rb
ADDED
@@ -0,0 +1,50 @@
|
|
1
|
+
# cording: utf-8
|
2
|
+
|
3
|
+
require 'io/console'
|
4
|
+
|
5
|
+
# @author {mailto:cuihaiqin@gmail.com cuihq}
|
6
|
+
class IO
|
7
|
+
# set icon name and window title
|
8
|
+
#
|
9
|
+
# @example set the terminal icon name and window title
|
10
|
+
# IO.title = 'window title'
|
11
|
+
# @return [Term] Term self.
|
12
|
+
def self.title=(text = '')
|
13
|
+
print "\e]0;#{text}\a"
|
14
|
+
self
|
15
|
+
end
|
16
|
+
|
17
|
+
# set icon name
|
18
|
+
#
|
19
|
+
# @example set the terminal icon name
|
20
|
+
# IO.icon_name = 'icon title'
|
21
|
+
# @return [Term] Term self.
|
22
|
+
def self.icon_name=(text = '')
|
23
|
+
print "\e]1;#{text}\a"
|
24
|
+
self
|
25
|
+
end
|
26
|
+
|
27
|
+
# set window title
|
28
|
+
#
|
29
|
+
# @example set the terminal window title
|
30
|
+
# IO.window_title = 'window title'
|
31
|
+
# @return [Term] Term self.
|
32
|
+
def self.window_title=(text = '')
|
33
|
+
print "\e]2;#{text}\a"
|
34
|
+
self
|
35
|
+
end
|
36
|
+
|
37
|
+
# get window width.
|
38
|
+
#
|
39
|
+
# @return [Integer] the window width
|
40
|
+
def self.width
|
41
|
+
$stdout.winsize[1]
|
42
|
+
end
|
43
|
+
|
44
|
+
# get window height.
|
45
|
+
#
|
46
|
+
# @return [Integer] the window height
|
47
|
+
def self.height
|
48
|
+
$stdout.winsize[0]
|
49
|
+
end
|
50
|
+
end
|
metadata
ADDED
@@ -0,0 +1,245 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: term
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.9.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- cuihq
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2017-07-25 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: artii
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rqrcode
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: unicode-display_width
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rouge
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: bundler
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rake
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: rspec
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: pry-byebug
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: rb-readline
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - ">="
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0'
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - ">="
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0'
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: yard
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - ">="
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: '0'
|
146
|
+
type: :development
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - ">="
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: '0'
|
153
|
+
- !ruby/object:Gem::Dependency
|
154
|
+
name: rubycritic
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - ">="
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: '0'
|
160
|
+
type: :development
|
161
|
+
prerelease: false
|
162
|
+
version_requirements: !ruby/object:Gem::Requirement
|
163
|
+
requirements:
|
164
|
+
- - ">="
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: '0'
|
167
|
+
- !ruby/object:Gem::Dependency
|
168
|
+
name: rubocop
|
169
|
+
requirement: !ruby/object:Gem::Requirement
|
170
|
+
requirements:
|
171
|
+
- - ">="
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: '0'
|
174
|
+
type: :development
|
175
|
+
prerelease: false
|
176
|
+
version_requirements: !ruby/object:Gem::Requirement
|
177
|
+
requirements:
|
178
|
+
- - ">="
|
179
|
+
- !ruby/object:Gem::Version
|
180
|
+
version: '0'
|
181
|
+
- !ruby/object:Gem::Dependency
|
182
|
+
name: reek
|
183
|
+
requirement: !ruby/object:Gem::Requirement
|
184
|
+
requirements:
|
185
|
+
- - ">="
|
186
|
+
- !ruby/object:Gem::Version
|
187
|
+
version: '0'
|
188
|
+
type: :development
|
189
|
+
prerelease: false
|
190
|
+
version_requirements: !ruby/object:Gem::Requirement
|
191
|
+
requirements:
|
192
|
+
- - ">="
|
193
|
+
- !ruby/object:Gem::Version
|
194
|
+
version: '0'
|
195
|
+
description: A toolkit of Terminal. Rich support for color, mouse, and lightweight
|
196
|
+
component.
|
197
|
+
email: cuihaiqin@gmail.com
|
198
|
+
executables: []
|
199
|
+
extensions: []
|
200
|
+
extra_rdoc_files: []
|
201
|
+
files:
|
202
|
+
- LICENSE.txt
|
203
|
+
- README.md
|
204
|
+
- lib/term.rb
|
205
|
+
- lib/term/bell.rb
|
206
|
+
- lib/term/checkbox.rb
|
207
|
+
- lib/term/code.rb
|
208
|
+
- lib/term/color.rb
|
209
|
+
- lib/term/confirm.rb
|
210
|
+
- lib/term/cursor.rb
|
211
|
+
- lib/term/font.rb
|
212
|
+
- lib/term/input.rb
|
213
|
+
- lib/term/password.rb
|
214
|
+
- lib/term/process_bar.rb
|
215
|
+
- lib/term/qrcode.rb
|
216
|
+
- lib/term/redio.rb
|
217
|
+
- lib/term/style.rb
|
218
|
+
- lib/term/table.rb
|
219
|
+
- lib/term/version.rb
|
220
|
+
- lib/term/window.rb
|
221
|
+
homepage: http://github.com/cuihq/term
|
222
|
+
licenses:
|
223
|
+
- MIT
|
224
|
+
metadata: {}
|
225
|
+
post_install_message:
|
226
|
+
rdoc_options: []
|
227
|
+
require_paths:
|
228
|
+
- lib
|
229
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
230
|
+
requirements:
|
231
|
+
- - ">="
|
232
|
+
- !ruby/object:Gem::Version
|
233
|
+
version: 2.0.0
|
234
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
235
|
+
requirements:
|
236
|
+
- - ">="
|
237
|
+
- !ruby/object:Gem::Version
|
238
|
+
version: '0'
|
239
|
+
requirements: []
|
240
|
+
rubyforge_project:
|
241
|
+
rubygems_version: 2.6.12
|
242
|
+
signing_key:
|
243
|
+
specification_version: 4
|
244
|
+
summary: A toolkit of Terminal.
|
245
|
+
test_files: []
|