shellopts 2.0.10 → 2.0.11
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/ext/array.rb +3 -1
- data/lib/shellopts/formatter.rb +34 -51
- data/lib/shellopts/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 485e81c58a890240d2a77e24a5f3a7a291551da968f395f3aaa4f5b2dac3cc9b
|
4
|
+
data.tar.gz: 2d6c92ca01ce1207f6311cf9b0e9bab3e555e309142ba6916d589396f215afb8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 31f3801b98585bed378ff77ae6632d18951ef37a49b3cfde843df9718dc5b46da40e777dff3f7b29e01bf8b32f2ebe0e1e7ab76ddb66744a461acf0061f75b1f
|
7
|
+
data.tar.gz: d72bcf1d58e9afdf4f92477af1f2824e01031a46b4cacf5283878ce1045ad91dd930c1c1a15cd588a2552a4ad90fe5ac3add6019b50e099693aa184b7747153f
|
data/lib/ext/array.rb
CHANGED
@@ -41,7 +41,9 @@ module Ext
|
|
41
41
|
|
42
42
|
module Wrap
|
43
43
|
refine ::Array do
|
44
|
-
# Concatenate
|
44
|
+
# Concatenate array of words into lines that are at most +width+
|
45
|
+
# characters wide. +curr+ is the initial number of characters already
|
46
|
+
# used on the first line
|
45
47
|
def wrap(width, curr = 0)
|
46
48
|
lines = [[]]
|
47
49
|
curr -= 1 # Simplifies conditions below
|
data/lib/shellopts/formatter.rb
CHANGED
@@ -1,12 +1,5 @@
|
|
1
1
|
require 'terminfo'
|
2
2
|
|
3
|
-
# TODO: Move to ext/indented_io.rb
|
4
|
-
module IndentedIO
|
5
|
-
class IndentedIO
|
6
|
-
def margin() combined_indent.size end
|
7
|
-
end
|
8
|
-
end
|
9
|
-
|
10
3
|
module ShellOpts
|
11
4
|
module Grammar
|
12
5
|
class Node
|
@@ -216,7 +209,10 @@ module ShellOpts
|
|
216
209
|
BRIEF_COL1_MAX_WIDTH = 40
|
217
210
|
|
218
211
|
# Minimum width of second column in brief option and command lists
|
219
|
-
|
212
|
+
BRIEF_COL2_MIN_WIDTH = 30
|
213
|
+
|
214
|
+
# Maximum width of second column in brief option and command lists
|
215
|
+
BRIEF_COL2_MAX_WIDTH = 70
|
220
216
|
|
221
217
|
# Indent to use in help output
|
222
218
|
HELP_INDENT = 4
|
@@ -226,29 +222,21 @@ module ShellOpts
|
|
226
222
|
|
227
223
|
# Usage string in error messages
|
228
224
|
def self.usage(subject)
|
229
|
-
|
230
|
-
@command_prefix =
|
225
|
+
command = Grammar::Command.command(subject)
|
226
|
+
@command_prefix = command.ancestors.map { |node| node.name + " " }.join
|
231
227
|
setup_indent(1) {
|
232
228
|
print lead = "#{USAGE_STRING}: "
|
233
|
-
indent(lead.size, ' ', bol: false) {
|
229
|
+
indent(lead.size, ' ', bol: false) { command.puts_usage }
|
234
230
|
}
|
235
231
|
end
|
236
232
|
|
237
|
-
# # TODO
|
238
|
-
# def self.usage=(usage_lambda)
|
239
|
-
# end
|
240
|
-
|
241
233
|
# When the user gives a -h option
|
242
|
-
def self.brief(
|
243
|
-
command = Grammar::Command.command(
|
234
|
+
def self.brief(subject)
|
235
|
+
command = Grammar::Command.command(subject)
|
244
236
|
@command_prefix = command.ancestors.map { |node| node.name + " " }.join
|
245
237
|
setup_indent(BRIEF_INDENT) { command.puts_brief }
|
246
238
|
end
|
247
239
|
|
248
|
-
# # TODO
|
249
|
-
# def self.brief=(brief_lambda)
|
250
|
-
# end
|
251
|
-
|
252
240
|
# When the user gives a --help option
|
253
241
|
def self.help(subject)
|
254
242
|
subject = Grammar::Command.command(subject)
|
@@ -262,18 +250,6 @@ module ShellOpts
|
|
262
250
|
obj.is_a?(Grammar::Command) ? obj : obj.__grammar__
|
263
251
|
end
|
264
252
|
|
265
|
-
# # TODO
|
266
|
-
# def self.help_w_lambda(program)
|
267
|
-
# if @help_lambda
|
268
|
-
# #
|
269
|
-
# else
|
270
|
-
# program = Grammar::Command.command(program)
|
271
|
-
# setup_indent(HELP_INDENT) { program.puts_descr }
|
272
|
-
# end
|
273
|
-
# end
|
274
|
-
#
|
275
|
-
# def self.help=(help_lambda) @help_lambda end
|
276
|
-
|
277
253
|
def self.puts_columns(widths, fields)
|
278
254
|
l = []
|
279
255
|
first_width, second_width = *widths
|
@@ -284,40 +260,47 @@ module ShellOpts
|
|
284
260
|
puts first
|
285
261
|
indent(first_width + BRIEF_COL_SEP, ' ') { puts second.wrap(second_width) } if second
|
286
262
|
elsif second
|
287
|
-
|
288
|
-
|
263
|
+
indent_size = first_width + BRIEF_COL_SEP
|
264
|
+
printf "%-#{indent_size}s", first
|
265
|
+
indent(indent_size, ' ', bol: false) { puts second.wrap(second_width) }
|
289
266
|
else
|
290
267
|
puts first
|
291
268
|
end
|
292
269
|
end
|
293
270
|
end
|
294
271
|
|
272
|
+
# Returns a tuple of [first-column-width, second-column-width]. +width+ is
|
273
|
+
# the maximum width of the colunms and the BRIEF_COL_SEP separator.
|
274
|
+
# +fields+ is an array of [subject-string, descr-text] tuples where the
|
275
|
+
# descr is an array of words
|
295
276
|
def self.compute_columns(width, fields)
|
296
|
-
first_max =
|
297
|
-
|
298
|
-
|
299
|
-
|
300
|
-
|
301
|
-
|
302
|
-
|
303
|
-
|
304
|
-
|
305
|
-
|
306
|
-
first_width = first_max
|
307
|
-
second_width = width - first_width - BRIEF_COL_SEP
|
277
|
+
first_max =
|
278
|
+
fields.map { |first, _| first.size }.select { |size| size <= BRIEF_COL1_MAX_WIDTH }.max ||
|
279
|
+
BRIEF_COL1_MIN_WIDTH
|
280
|
+
second_max = fields.map { |_, second| second ? second&.map(&:size).sum + second.size - 1 : 0 }.max
|
281
|
+
first_width = [[first_max, BRIEF_COL1_MIN_WIDTH].max, BRIEF_COL1_MAX_WIDTH].min
|
282
|
+
rest = width - first_width - BRIEF_COL_SEP
|
283
|
+
second_min = [BRIEF_COL2_MIN_WIDTH, second_max].min
|
284
|
+
if rest < second_min
|
285
|
+
first_width = [first_max, width - second_min - BRIEF_COL_SEP].max
|
286
|
+
second_width = [width - first_width - BRIEF_COL_SEP, BRIEF_COL2_MIN_WIDTH].max
|
308
287
|
else
|
309
|
-
|
310
|
-
second_width = BRIEF_COL2_MAX_WIDTH
|
288
|
+
second_width = [[rest, BRIEF_COL2_MIN_WIDTH].max, BRIEF_COL2_MAX_WIDTH].min
|
311
289
|
end
|
312
|
-
|
313
290
|
[first_width, second_width]
|
314
291
|
end
|
315
292
|
|
316
293
|
def self.width()
|
317
294
|
@width ||= TermInfo.screen_width - MARGIN_RIGHT
|
295
|
+
@width
|
296
|
+
end
|
297
|
+
|
298
|
+
# Used in rspec
|
299
|
+
def self.width=(width)
|
300
|
+
@width = width
|
318
301
|
end
|
319
302
|
|
320
|
-
def self.rest() width - $stdout.
|
303
|
+
def self.rest() width - $stdout.tab end
|
321
304
|
|
322
305
|
private
|
323
306
|
# TODO Get rid of?
|
data/lib/shellopts/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: shellopts
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.
|
4
|
+
version: 2.0.11
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Claus Rasmussen
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-03-
|
11
|
+
date: 2022-03-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: forward_to
|