shellopts 2.0.21 → 2.0.22
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/shellopts/formatter.rb +12 -7
- data/lib/shellopts/renderer.rb +19 -20
- 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: d3f9f19d62ccf36d5de39421163eb70e7aa8ae621cee13381d48ce68e7ab593d
|
4
|
+
data.tar.gz: 13351ee8dceceea7c5da573de7c5bd257aa2efd1c4690be760f6ebe1445ca8c9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4afd636e92e1ff74b45c77399d4dbaba6afaccd441ee528800a727ed5e4db802d481d8dcaaddcd46bdbcd7c28f3b121b35e42b63e44f02d006c557eafda29692
|
7
|
+
data.tar.gz: 7c12cd6d9f0dede5c7931cf82b8e1ff32d4de738c2d3dd42fb5c2f65740ed0804078eb65ca0b951ce28a1095fd9b43289df01501275a5f9c178a965e569aa054
|
data/lib/shellopts/formatter.rb
CHANGED
@@ -30,8 +30,8 @@ module ShellOpts
|
|
30
30
|
class Command
|
31
31
|
using Ext::Array::Wrap
|
32
32
|
|
33
|
-
def puts_usage(bol: false)
|
34
|
-
width = [Formatter.rest,
|
33
|
+
def puts_usage(bol: false, max_width: Formatter::USAGE_MAX_WIDTH)
|
34
|
+
width = [Formatter.rest, max_width].min
|
35
35
|
if descrs.size == 0
|
36
36
|
print (lead = Formatter.command_prefix || "")
|
37
37
|
indent(lead.size, ' ', bol: bol && lead == "") {
|
@@ -41,7 +41,7 @@ module ShellOpts
|
|
41
41
|
lead = Formatter.command_prefix || ""
|
42
42
|
descrs.each { |descr|
|
43
43
|
print lead
|
44
|
-
puts render(:
|
44
|
+
puts render(:multi, width, args: descr.text.split(' '))
|
45
45
|
}
|
46
46
|
end
|
47
47
|
end
|
@@ -58,7 +58,7 @@ module ShellOpts
|
|
58
58
|
end
|
59
59
|
|
60
60
|
puts "Usage"
|
61
|
-
indent { puts_usage(bol: true) }
|
61
|
+
indent { puts_usage(bol: true, max_width: Formatter::HELP_MAX_WIDTH) }
|
62
62
|
|
63
63
|
if options.any?
|
64
64
|
puts
|
@@ -112,14 +112,13 @@ module ShellOpts
|
|
112
112
|
puts
|
113
113
|
|
114
114
|
puts Ansi.bold "USAGE"
|
115
|
-
indent { puts_usage(bol: true) }
|
115
|
+
indent { puts_usage(bol: true, max_width: Formatter::HELP_MAX_WIDTH) }
|
116
116
|
|
117
117
|
section = {
|
118
118
|
Paragraph => "DESCRIPTION",
|
119
119
|
OptionGroup => "OPTION",
|
120
120
|
Command => "COMMAND"
|
121
121
|
}
|
122
|
-
|
123
122
|
seen_sections = {}
|
124
123
|
newline = false # True if a newline should be printed before child
|
125
124
|
indent {
|
@@ -173,7 +172,10 @@ module ShellOpts
|
|
173
172
|
end
|
174
173
|
|
175
174
|
module WrappedNode
|
176
|
-
def puts_descr
|
175
|
+
def puts_descr
|
176
|
+
width = [Formatter.rest, Formatter::HELP_MAX_WIDTH].min
|
177
|
+
puts lines(width)
|
178
|
+
end
|
177
179
|
end
|
178
180
|
|
179
181
|
class Code
|
@@ -217,6 +219,9 @@ module ShellOpts
|
|
217
219
|
# Indent to use in help output
|
218
220
|
HELP_INDENT = 4
|
219
221
|
|
222
|
+
# Max. width of help text (not including indent)
|
223
|
+
HELP_MAX_WIDTH = 85
|
224
|
+
|
220
225
|
# Command prefix when subject is a sub-command
|
221
226
|
def self.command_prefix() @command_prefix end
|
222
227
|
|
data/lib/shellopts/renderer.rb
CHANGED
@@ -15,9 +15,9 @@ require 'terminfo'
|
|
15
15
|
#
|
16
16
|
# Command rendering
|
17
17
|
# cmd --all --beta [cmd1|cmd2] ARG1 ARG2 # Single-line formats (:single)
|
18
|
-
# cmd --all --beta [cmd1|cmd2] ARGS...
|
18
|
+
# cmd --all --beta [cmd1|cmd2] ARGS... # Not used
|
19
19
|
# cmd -a -b [cmd1|cmd2] ARG1 ARG2
|
20
|
-
# cmd -a -b [cmd1|cmd2] ARGS...
|
20
|
+
# cmd -a -b [cmd1|cmd2] ARGS... # Not used
|
21
21
|
#
|
22
22
|
# cmd -a -b [cmd1|cmd2] ARG1 ARG2 # One line for each argument description (:enum)
|
23
23
|
# cmd -a -b [cmd1|cmd2] ARG3 ARG4 # (used in the USAGE section)
|
@@ -108,7 +108,7 @@ module ShellOpts
|
|
108
108
|
def get_args(args: nil)
|
109
109
|
case descrs.size
|
110
110
|
when 0; []
|
111
|
-
when 1;
|
111
|
+
when 1; descrs.first.text.split(' ')
|
112
112
|
else [DESCRS_ABBR]
|
113
113
|
end
|
114
114
|
end
|
@@ -120,6 +120,7 @@ module ShellOpts
|
|
120
120
|
end
|
121
121
|
|
122
122
|
# Force one line. Compact options, commands, arguments if needed
|
123
|
+
#
|
123
124
|
def render_single(width, args: nil)
|
124
125
|
long_options = options.map { |option| option.render(:long) }
|
125
126
|
short_options = options.map { |option| option.render(:short) }
|
@@ -164,32 +165,30 @@ module ShellOpts
|
|
164
165
|
def render_multi(width, args: nil)
|
165
166
|
long_options = options.map { |option| option.render(:long) }
|
166
167
|
short_options = options.map { |option| option.render(:short) }
|
167
|
-
|
168
|
-
|
168
|
+
compact_options = options.empty? ? [] : [OPTIONS_ABBR]
|
169
|
+
|
170
|
+
# Only compact commands if they can't fit on one line
|
171
|
+
if commands.empty?
|
172
|
+
use_commands = []
|
173
|
+
else
|
174
|
+
short_command = "[#{commands.map(&:name).join("|")}]"
|
175
|
+
use_commands = [short_command.size > width ? COMMANDS_ABBR : short_command]
|
176
|
+
end
|
169
177
|
|
170
178
|
args ||= get_args
|
171
179
|
|
172
180
|
# On one line
|
173
|
-
words = [name] + long_options +
|
181
|
+
words = [name] + long_options + use_commands + args
|
174
182
|
return [words.join(" ")] if pass?(words, width)
|
175
|
-
words = [name] + short_options +
|
183
|
+
words = [name] + short_options + use_commands + args
|
184
|
+
return [words.join(" ")] if pass?(words, width)
|
185
|
+
words = [name] + compact_options + use_commands + args
|
176
186
|
return [words.join(" ")] if pass?(words, width)
|
177
187
|
|
178
188
|
# On multiple lines
|
179
189
|
lead = name + " "
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
begin
|
184
|
-
words = short_commands + args
|
185
|
-
break if pass?(words, width)
|
186
|
-
words = compact_commands + args
|
187
|
-
break if pass?(words, width)
|
188
|
-
words = compact_commands + [DESCRS_ABBR]
|
189
|
-
end while false
|
190
|
-
|
191
|
-
cmdargs = words.empty? ? [] : [words.join(" ")]
|
192
|
-
options + indent_lines(lead.size, cmdargs)
|
190
|
+
words = (long_options + use_commands + args).wrap(width - lead.size)
|
191
|
+
lines = [lead + words[0]] + indent_lines(lead.size, words[1..-1])
|
193
192
|
end
|
194
193
|
|
195
194
|
protected
|
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.22
|
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-04-
|
11
|
+
date: 2022-04-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: forward_to
|