shellopts 2.0.10 → 2.0.11
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/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
|