| line |
stmt |
bran |
cond |
sub |
pod |
time |
code |
|
1
|
|
|
|
|
|
|
package Getopt::Complete; |
|
2
|
|
|
|
|
|
|
|
|
3
|
2
|
|
|
2
|
|
54744
|
use strict; |
|
|
2
|
|
|
|
|
4
|
|
|
|
2
|
|
|
|
|
49
|
|
|
4
|
2
|
|
|
2
|
|
9
|
use warnings; |
|
|
2
|
|
|
|
|
2
|
|
|
|
2
|
|
|
|
|
69
|
|
|
5
|
|
|
|
|
|
|
|
|
6
|
|
|
|
|
|
|
our $VERSION = '0.25'; |
|
7
|
|
|
|
|
|
|
|
|
8
|
2
|
|
|
2
|
|
924
|
use Getopt::Complete::Options; |
|
|
2
|
|
|
|
|
4
|
|
|
|
2
|
|
|
|
|
62
|
|
|
9
|
2
|
|
|
2
|
|
712
|
use Getopt::Complete::Args; |
|
|
2
|
|
|
|
|
5
|
|
|
|
2
|
|
|
|
|
53
|
|
|
10
|
2
|
|
|
2
|
|
665
|
use Getopt::Complete::Compgen; |
|
|
2
|
|
|
|
|
5
|
|
|
|
2
|
|
|
|
|
463
|
|
|
11
|
|
|
|
|
|
|
|
|
12
|
|
|
|
|
|
|
our $ARGS; |
|
13
|
|
|
|
|
|
|
our %ARGS; |
|
14
|
|
|
|
|
|
|
|
|
15
|
|
|
|
|
|
|
our $EXIT_ON_ERRORS = 1; |
|
16
|
|
|
|
|
|
|
our $LONE_DASH_SUPPORT = 0; |
|
17
|
|
|
|
|
|
|
|
|
18
|
|
|
|
|
|
|
sub import { |
|
19
|
1
|
|
|
1
|
|
11
|
my $class = shift; |
|
20
|
1
|
50
|
|
|
|
4
|
unless (@_) { |
|
21
|
|
|
|
|
|
|
# re-using this module after options processing, with no arguments, |
|
22
|
|
|
|
|
|
|
# will just re-export (alias, actually) %ARGS and $ARGS. |
|
23
|
1
|
50
|
|
|
|
2
|
if ($ARGS) { |
|
24
|
0
|
|
|
|
|
0
|
$class->export_aliases(); |
|
25
|
|
|
|
|
|
|
} |
|
26
|
1
|
|
|
|
|
11
|
return; |
|
27
|
|
|
|
|
|
|
} |
|
28
|
|
|
|
|
|
|
|
|
29
|
0
|
0
|
|
|
|
|
if ($ARGS) { |
|
30
|
|
|
|
|
|
|
# Turn on fatal warnings, and this will safely be a die(). |
|
31
|
0
|
|
|
|
|
|
warn "Overriding default command-line %ARGS with a second call to Getopt::Complete!"; |
|
32
|
|
|
|
|
|
|
} |
|
33
|
|
|
|
|
|
|
|
|
34
|
|
|
|
|
|
|
# The safe way to use this module is to specify args at compile time. |
|
35
|
|
|
|
|
|
|
# This allows 'perl -c' to handle shell-completion requests. |
|
36
|
|
|
|
|
|
|
# Direct creation of objects is mostly for testing, and wrapper modules. |
|
37
|
|
|
|
|
|
|
|
|
38
|
|
|
|
|
|
|
# Make a single default Getopt::Complete::Options object, |
|
39
|
|
|
|
|
|
|
|
|
40
|
0
|
|
|
|
|
|
my $options = Getopt::Complete::Options->new(@_); |
|
41
|
|
|
|
|
|
|
|
|
42
|
|
|
|
|
|
|
# See if we are really just being run to respond to a shell completion request. |
|
43
|
|
|
|
|
|
|
# (in this case, the app will exit inside this call) |
|
44
|
|
|
|
|
|
|
|
|
45
|
0
|
|
|
|
|
|
$options->handle_shell_completion(); |
|
46
|
|
|
|
|
|
|
|
|
47
|
|
|
|
|
|
|
# and then a single default Getopt::Complete::Args object. |
|
48
|
|
|
|
|
|
|
|
|
49
|
0
|
|
|
|
|
|
my $args = Getopt::Complete::Args->new( |
|
50
|
|
|
|
|
|
|
options => $options, |
|
51
|
|
|
|
|
|
|
argv => [@ARGV] |
|
52
|
|
|
|
|
|
|
); |
|
53
|
|
|
|
|
|
|
|
|
54
|
|
|
|
|
|
|
# Then make it and its underlying hash available globally in this namespace |
|
55
|
0
|
|
|
|
|
|
$args->__install_as_default__(); |
|
56
|
|
|
|
|
|
|
|
|
57
|
|
|
|
|
|
|
# Alias the above into the caller's namespace |
|
58
|
0
|
|
|
|
|
|
my $caller = caller(); |
|
59
|
0
|
|
|
|
|
|
$class->export_aliases($caller); |
|
60
|
|
|
|
|
|
|
|
|
61
|
|
|
|
|
|
|
# This is overridable externally. |
|
62
|
0
|
0
|
|
|
|
|
if ($EXIT_ON_ERRORS) { |
|
63
|
0
|
0
|
|
|
|
|
if (my @errors = $ARGS->errors) { |
|
64
|
0
|
|
|
|
|
|
for my $error ($ARGS->errors) { |
|
65
|
0
|
|
|
|
|
|
chomp $error; |
|
66
|
0
|
|
|
|
|
|
warn __PACKAGE__ . ' ERROR: ' . $error . "\n"; |
|
67
|
|
|
|
|
|
|
} |
|
68
|
0
|
|
|
|
|
|
exit 1; |
|
69
|
|
|
|
|
|
|
} |
|
70
|
|
|
|
|
|
|
} |
|
71
|
|
|
|
|
|
|
} |
|
72
|
|
|
|
|
|
|
|
|
73
|
|
|
|
|
|
|
sub export_aliases { |
|
74
|
0
|
|
|
0
|
0
|
|
my ($class,$pkg) = @_; |
|
75
|
2
|
|
|
2
|
|
13
|
no strict 'refs'; |
|
|
2
|
|
|
|
|
4
|
|
|
|
2
|
|
|
|
|
430
|
|
|
76
|
0
|
|
0
|
|
|
|
$pkg ||= caller(); |
|
77
|
0
|
|
|
|
|
|
my $v; |
|
78
|
0
|
|
|
|
|
|
$v = ${ $pkg . "::ARGS" }; |
|
|
0
|
|
|
|
|
|
|
|
79
|
0
|
0
|
|
|
|
|
unless (defined $v) { |
|
80
|
0
|
|
|
|
|
|
*{ $pkg . "::ARGS" } = \$ARGS; |
|
|
0
|
|
|
|
|
|
|
|
81
|
|
|
|
|
|
|
} |
|
82
|
0
|
|
|
|
|
|
$v = \%{ $pkg . "::ARGS" }; |
|
|
0
|
|
|
|
|
|
|
|
83
|
0
|
0
|
|
|
|
|
unless (keys %$v) { |
|
84
|
0
|
|
|
|
|
|
*{ $pkg . "::ARGS" } = \%ARGS; |
|
|
0
|
|
|
|
|
|
|
|
85
|
|
|
|
|
|
|
} |
|
86
|
|
|
|
|
|
|
} |
|
87
|
|
|
|
|
|
|
|
|
88
|
|
|
|
|
|
|
1; |
|
89
|
|
|
|
|
|
|
|
|
90
|
|
|
|
|
|
|
=pod |
|
91
|
|
|
|
|
|
|
|
|
92
|
|
|
|
|
|
|
=head1 NAME |
|
93
|
|
|
|
|
|
|
|
|
94
|
|
|
|
|
|
|
Getopt::Complete - programmable shell completion for Perl apps |
|
95
|
|
|
|
|
|
|
|
|
96
|
|
|
|
|
|
|
=head1 VERSION |
|
97
|
|
|
|
|
|
|
|
|
98
|
|
|
|
|
|
|
This document describes Getopt::Complete 0.25. |
|
99
|
|
|
|
|
|
|
|
|
100
|
|
|
|
|
|
|
=head1 SYNOPSIS |
|
101
|
|
|
|
|
|
|
|
|
102
|
|
|
|
|
|
|
In the Perl program "myprogram": |
|
103
|
|
|
|
|
|
|
|
|
104
|
|
|
|
|
|
|
use Getopt::Complete ( |
|
105
|
|
|
|
|
|
|
'frog' => ['ribbit','urp','ugh'], |
|
106
|
|
|
|
|
|
|
'fraggle' => sub { return ['rock','roll'] }, |
|
107
|
|
|
|
|
|
|
'quiet!' => undef, |
|
108
|
|
|
|
|
|
|
'name' => undef, |
|
109
|
|
|
|
|
|
|
'age=n' => undef, |
|
110
|
|
|
|
|
|
|
'outfile=s@' => 'files', |
|
111
|
|
|
|
|
|
|
'outdir' => 'directories' |
|
112
|
|
|
|
|
|
|
'runthis' => 'commands', |
|
113
|
|
|
|
|
|
|
'username' => 'users', |
|
114
|
|
|
|
|
|
|
'<>' => 'directories', |
|
115
|
|
|
|
|
|
|
); |
|
116
|
|
|
|
|
|
|
|
|
117
|
|
|
|
|
|
|
print "the frog says " . $ARGS{frog} . "\n"; |
|
118
|
|
|
|
|
|
|
|
|
119
|
|
|
|
|
|
|
In ~/.bashrc or ~/.bash_profile, or directly in bash: |
|
120
|
|
|
|
|
|
|
|
|
121
|
|
|
|
|
|
|
complete -C myprogram myprogram |
|
122
|
|
|
|
|
|
|
|
|
123
|
|
|
|
|
|
|
Thereafter in the terminal (after next login, or sourcing the updated .bashrc): |
|
124
|
|
|
|
|
|
|
|
|
125
|
|
|
|
|
|
|
$ myprogram --f |
|
126
|
|
|
|
|
|
|
$ myprogram --fr |
|
127
|
|
|
|
|
|
|
|
|
128
|
|
|
|
|
|
|
$ myprogram --fr |
|
129
|
|
|
|
|
|
|
frog fraggle |
|
130
|
|
|
|
|
|
|
|
|
131
|
|
|
|
|
|
|
$ myprogram --fro |
|
132
|
|
|
|
|
|
|
$ myprogram --frog |
|
133
|
|
|
|
|
|
|
|
|
134
|
|
|
|
|
|
|
$ myprogram --frog |
|
135
|
|
|
|
|
|
|
ribbit urp ugh |
|
136
|
|
|
|
|
|
|
|
|
137
|
|
|
|
|
|
|
$ myprogram --frog r |
|
138
|
|
|
|
|
|
|
$ myprogram --frog ribbit |
|
139
|
|
|
|
|
|
|
|
|
140
|
|
|
|
|
|
|
=head1 DESCRIPTION |
|
141
|
|
|
|
|
|
|
|
|
142
|
|
|
|
|
|
|
This module makes it easy to add custom command-line completion to Perl |
|
143
|
|
|
|
|
|
|
applications. It also does additional validation of arguments, when the |
|
144
|
|
|
|
|
|
|
program is actually executed, based on completion lists. |
|
145
|
|
|
|
|
|
|
|
|
146
|
|
|
|
|
|
|
Support is also present for apps which are an entry point for a hierarchy of |
|
147
|
|
|
|
|
|
|
sub-commands (in the style of cvs and git). |
|
148
|
|
|
|
|
|
|
|
|
149
|
|
|
|
|
|
|
Getopt::Complete also wraps the standard options processing and exports |
|
150
|
|
|
|
|
|
|
it as a %ARGS hash at compile time, making using the arguments hassle-free. |
|
151
|
|
|
|
|
|
|
|
|
152
|
|
|
|
|
|
|
The completion features currently work with the bash shell, which is |
|
153
|
|
|
|
|
|
|
the default on most Linux and Mac systems. Patches for other shells |
|
154
|
|
|
|
|
|
|
are welcome. |
|
155
|
|
|
|
|
|
|
|
|
156
|
|
|
|
|
|
|
=head1 OPTIONS PROCESSING |
|
157
|
|
|
|
|
|
|
|
|
158
|
|
|
|
|
|
|
Getopt::Complete processes the command-line options at compile time. |
|
159
|
|
|
|
|
|
|
|
|
160
|
|
|
|
|
|
|
The results are avaialble in the %ARGS hash, which is intended as a companion |
|
161
|
|
|
|
|
|
|
to the @ARGV array generated natively by Perl. |
|
162
|
|
|
|
|
|
|
|
|
163
|
|
|
|
|
|
|
use Getopt::Complete ( |
|
164
|
|
|
|
|
|
|
'mydir' => 'd', |
|
165
|
|
|
|
|
|
|
'myfile' => 'f', |
|
166
|
|
|
|
|
|
|
'<>' = ['monkey', 'taco', 'banana'] |
|
167
|
|
|
|
|
|
|
); |
|
168
|
|
|
|
|
|
|
|
|
169
|
|
|
|
|
|
|
for $opt (keys %ARGS) { |
|
170
|
|
|
|
|
|
|
$val = $ARGS{$opt}; |
|
171
|
|
|
|
|
|
|
print "$opt has value $val\n"; |
|
172
|
|
|
|
|
|
|
} |
|
173
|
|
|
|
|
|
|
|
|
174
|
|
|
|
|
|
|
Errors in shell argumentes result in messages to STDERR via warn(), and cause the |
|
175
|
|
|
|
|
|
|
program to exit during "use" call. Getopt::Complete verifies that the option values |
|
176
|
|
|
|
|
|
|
specified match their own completion list, and will otherwise add additional errors |
|
177
|
|
|
|
|
|
|
explaining the problem. |
|
178
|
|
|
|
|
|
|
|
|
179
|
|
|
|
|
|
|
The %ARGS hash is an alias for %Getopt::Complete::ARGS. The alias is not created |
|
180
|
|
|
|
|
|
|
in the caller's namespaces if a hash named %ARGS already exists with data, but |
|
181
|
|
|
|
|
|
|
the results are always available from %Getopt::Complete::ARGS. |
|
182
|
|
|
|
|
|
|
|
|
183
|
|
|
|
|
|
|
They keys of the hash are the option names, minus any specifiers like "=s" or "!". |
|
184
|
|
|
|
|
|
|
The key is only present if the option was specified on the command-line. |
|
185
|
|
|
|
|
|
|
|
|
186
|
|
|
|
|
|
|
The values of the hash are the values from the command-line. For multi-value |
|
187
|
|
|
|
|
|
|
options the hash value is an arrayref. |
|
188
|
|
|
|
|
|
|
|
|
189
|
|
|
|
|
|
|
=head1 OBJECT API |
|
190
|
|
|
|
|
|
|
|
|
191
|
|
|
|
|
|
|
An object $ARGS is also created in the caller's namespace (class L) |
|
192
|
|
|
|
|
|
|
with a more detailed API for argument interrogation. See the documentation for that |
|
193
|
|
|
|
|
|
|
module, and also for the underlying L module. |
|
194
|
|
|
|
|
|
|
|
|
195
|
|
|
|
|
|
|
It is possible to override any part of the default process, including doing custom |
|
196
|
|
|
|
|
|
|
parsing, doing processing at run-time, and and preventing exit when there are errors. |
|
197
|
|
|
|
|
|
|
|
|
198
|
|
|
|
|
|
|
See OVERRIDING COMPILE-TIME OPTION PARSING for more information. |
|
199
|
|
|
|
|
|
|
|
|
200
|
|
|
|
|
|
|
=head1 PROGRAMMABLE COMPLETION BACKGROUND |
|
201
|
|
|
|
|
|
|
|
|
202
|
|
|
|
|
|
|
The bash shell supports smart completion of words when the key is pressed. |
|
203
|
|
|
|
|
|
|
By default, after the program name is specified, bash will presume the word the user |
|
204
|
|
|
|
|
|
|
is typing a is a file name, and will attempt to complete the word accordingly. Where |
|
205
|
|
|
|
|
|
|
completion is ambiguous, the shell will go as far as it can and beep. Subsequent |
|
206
|
|
|
|
|
|
|
completion attempts at that position result in a list being shown of possible completions. |
|
207
|
|
|
|
|
|
|
|
|
208
|
|
|
|
|
|
|
Bash can be configured to run a specific program to handle the completion task, allowing |
|
209
|
|
|
|
|
|
|
custom completions to be done for different appliations. The "complete" built-in bash |
|
210
|
|
|
|
|
|
|
command instructs the shell as-to how to handle tab-completion for a given command. |
|
211
|
|
|
|
|
|
|
|
|
212
|
|
|
|
|
|
|
This module allows a program to be its own word-completer. It detects that the |
|
213
|
|
|
|
|
|
|
COMP_LINE and COMP_POINT environment variables are set, indicating that it is being |
|
214
|
|
|
|
|
|
|
used as a completion program, and responds by returning completion values suitable |
|
215
|
|
|
|
|
|
|
for the shell _instead_ of really running the application. |
|
216
|
|
|
|
|
|
|
|
|
217
|
|
|
|
|
|
|
See the manual page for "bash", the heading "Programmable Completion" for full |
|
218
|
|
|
|
|
|
|
details on the general topic. |
|
219
|
|
|
|
|
|
|
|
|
220
|
|
|
|
|
|
|
=head1 HOW TO CONFIGURE PROGRAMMABLE COMPLETION |
|
221
|
|
|
|
|
|
|
|
|
222
|
|
|
|
|
|
|
=over 4 |
|
223
|
|
|
|
|
|
|
|
|
224
|
|
|
|
|
|
|
=item 1 |
|
225
|
|
|
|
|
|
|
|
|
226
|
|
|
|
|
|
|
Put a "use Getopt::Complete" statement into your app as shown in the synopsis. |
|
227
|
|
|
|
|
|
|
The key-value pairs describe the command-line options available, |
|
228
|
|
|
|
|
|
|
and their completions. |
|
229
|
|
|
|
|
|
|
|
|
230
|
|
|
|
|
|
|
This should be at the TOP of the app, before any real processing is done. |
|
231
|
|
|
|
|
|
|
The only modules used before it should be those needed for custom callbacks, |
|
232
|
|
|
|
|
|
|
if there are any. No code should print to standard output during compile |
|
233
|
|
|
|
|
|
|
time, or it will confuse bash. |
|
234
|
|
|
|
|
|
|
|
|
235
|
|
|
|
|
|
|
Subsequent code can use %ARGS or the $ARGS object to check on command-line |
|
236
|
|
|
|
|
|
|
option values. |
|
237
|
|
|
|
|
|
|
|
|
238
|
|
|
|
|
|
|
Existing apps using Getopt::Long should use their option spec in the use declaration |
|
239
|
|
|
|
|
|
|
instead. If they bind variables directly the code should to be updated to get |
|
240
|
|
|
|
|
|
|
values from the %ARGS hash instead. |
|
241
|
|
|
|
|
|
|
|
|
242
|
|
|
|
|
|
|
=item 2 |
|
243
|
|
|
|
|
|
|
|
|
244
|
|
|
|
|
|
|
Put the following in your .bashrc or .bash_profile: |
|
245
|
|
|
|
|
|
|
|
|
246
|
|
|
|
|
|
|
complete -C myprogram myprogram |
|
247
|
|
|
|
|
|
|
|
|
248
|
|
|
|
|
|
|
For the very conservative, do this (to ensure nothing runs during completion checks): |
|
249
|
|
|
|
|
|
|
|
|
250
|
|
|
|
|
|
|
complete -C 'perl -c myprogram 2>/dev/null' myprogram |
|
251
|
|
|
|
|
|
|
|
|
252
|
|
|
|
|
|
|
=item 3 |
|
253
|
|
|
|
|
|
|
|
|
254
|
|
|
|
|
|
|
New logins will automatically run the above and become aware that your |
|
255
|
|
|
|
|
|
|
program has programmable completion. For shells you already |
|
256
|
|
|
|
|
|
|
have open, run this to alert bash to your that your program has |
|
257
|
|
|
|
|
|
|
custom tab-completion. |
|
258
|
|
|
|
|
|
|
|
|
259
|
|
|
|
|
|
|
source ~/.bashrc |
|
260
|
|
|
|
|
|
|
|
|
261
|
|
|
|
|
|
|
=back |
|
262
|
|
|
|
|
|
|
|
|
263
|
|
|
|
|
|
|
Type the name of your app ("myprogram" in the example), and experiment |
|
264
|
|
|
|
|
|
|
with using the key to get various completions to test it. Every time |
|
265
|
|
|
|
|
|
|
you hit , bash sets certain environment variables, and then runs your |
|
266
|
|
|
|
|
|
|
program. The Getopt::Complete module detects these variables, responds to the |
|
267
|
|
|
|
|
|
|
completion request, and then forces the program to exit before really running |
|
268
|
|
|
|
|
|
|
your regular application code. |
|
269
|
|
|
|
|
|
|
|
|
270
|
|
|
|
|
|
|
IMPORTANT: Do not do steps #2 and #3 w/o doing step #1, or your application |
|
271
|
|
|
|
|
|
|
will actually run "normally" every time you press with it on the command-line! |
|
272
|
|
|
|
|
|
|
The module will not be present to detect that this is not a "real" execution |
|
273
|
|
|
|
|
|
|
of the program, and you may find your program is running when it should not. |
|
274
|
|
|
|
|
|
|
|
|
275
|
|
|
|
|
|
|
|
|
276
|
|
|
|
|
|
|
=head1 KEYS IN THE OPTIONS SPECIFICATION |
|
277
|
|
|
|
|
|
|
|
|
278
|
|
|
|
|
|
|
Each key in the list decribes an option which can be completed. Any |
|
279
|
|
|
|
|
|
|
key usable in a Getopt:::Long GetOptions specification works here, |
|
280
|
|
|
|
|
|
|
(except as noted in BUGS below): |
|
281
|
|
|
|
|
|
|
|
|
282
|
|
|
|
|
|
|
=over 4 |
|
283
|
|
|
|
|
|
|
|
|
284
|
|
|
|
|
|
|
=item an option name |
|
285
|
|
|
|
|
|
|
|
|
286
|
|
|
|
|
|
|
A normal word is interpreted as an option name. The '=s' specifier is |
|
287
|
|
|
|
|
|
|
presumed if no specifier is present. |
|
288
|
|
|
|
|
|
|
|
|
289
|
|
|
|
|
|
|
'p1' => [...] |
|
290
|
|
|
|
|
|
|
|
|
291
|
|
|
|
|
|
|
=item a complete option specifier |
|
292
|
|
|
|
|
|
|
|
|
293
|
|
|
|
|
|
|
Any specification usable by L is valid as the key. |
|
294
|
|
|
|
|
|
|
For example: |
|
295
|
|
|
|
|
|
|
|
|
296
|
|
|
|
|
|
|
'p1=s' => [...] # the same as just 'p1' |
|
297
|
|
|
|
|
|
|
'p2=s@' => [...] # expect multiple values |
|
298
|
|
|
|
|
|
|
|
|
299
|
|
|
|
|
|
|
=item the '<>' symbol for "bare arguments" |
|
300
|
|
|
|
|
|
|
|
|
301
|
|
|
|
|
|
|
This special key specifies how to complete non-option (bare) arguments. |
|
302
|
|
|
|
|
|
|
It presumes multiple values are possible (like '=s@'): |
|
303
|
|
|
|
|
|
|
|
|
304
|
|
|
|
|
|
|
Have an explicit list: |
|
305
|
|
|
|
|
|
|
'<>' = ['value1','value2','value3'] |
|
306
|
|
|
|
|
|
|
|
|
307
|
|
|
|
|
|
|
Do normal file completion: |
|
308
|
|
|
|
|
|
|
'<>' = 'files' |
|
309
|
|
|
|
|
|
|
|
|
310
|
|
|
|
|
|
|
Take arbitrary values with no expectations: |
|
311
|
|
|
|
|
|
|
'<>' = undef |
|
312
|
|
|
|
|
|
|
|
|
313
|
|
|
|
|
|
|
If there is no '<>' key specified, bare arguments will be treated as an error. |
|
314
|
|
|
|
|
|
|
|
|
315
|
|
|
|
|
|
|
=item a sub-command specifier, starting with '>' |
|
316
|
|
|
|
|
|
|
|
|
317
|
|
|
|
|
|
|
When a key in the options specification starts with '>', it indicates |
|
318
|
|
|
|
|
|
|
a that word maps to a distinct sub-command with its own options. The |
|
319
|
|
|
|
|
|
|
array to the right is itself a full options specification, following |
|
320
|
|
|
|
|
|
|
the same format as the one above it, including possible further |
|
321
|
|
|
|
|
|
|
sub-commands. |
|
322
|
|
|
|
|
|
|
|
|
323
|
|
|
|
|
|
|
See SUB-COMMAND TREES for more details. |
|
324
|
|
|
|
|
|
|
|
|
325
|
|
|
|
|
|
|
=back |
|
326
|
|
|
|
|
|
|
|
|
327
|
|
|
|
|
|
|
=head1 VALUES IN THE OPTIONS SPECIFICATION |
|
328
|
|
|
|
|
|
|
|
|
329
|
|
|
|
|
|
|
Each value describes how the option in question should be completed. |
|
330
|
|
|
|
|
|
|
|
|
331
|
|
|
|
|
|
|
=over 4 |
|
332
|
|
|
|
|
|
|
|
|
333
|
|
|
|
|
|
|
=item array reference |
|
334
|
|
|
|
|
|
|
|
|
335
|
|
|
|
|
|
|
An array reference expliciitly lists the valid values for the option. |
|
336
|
|
|
|
|
|
|
|
|
337
|
|
|
|
|
|
|
In the app: |
|
338
|
|
|
|
|
|
|
|
|
339
|
|
|
|
|
|
|
use Getopt::Complete ( |
|
340
|
|
|
|
|
|
|
'color' => ['red','green','blue'], |
|
341
|
|
|
|
|
|
|
); |
|
342
|
|
|
|
|
|
|
|
|
343
|
|
|
|
|
|
|
In the shell: |
|
344
|
|
|
|
|
|
|
|
|
345
|
|
|
|
|
|
|
$ myprogram --color |
|
346
|
|
|
|
|
|
|
red green blue |
|
347
|
|
|
|
|
|
|
|
|
348
|
|
|
|
|
|
|
$ myprogram --color blue |
|
349
|
|
|
|
|
|
|
(runs with no errors) |
|
350
|
|
|
|
|
|
|
|
|
351
|
|
|
|
|
|
|
The list of value is also used to validate the user's choice after options |
|
352
|
|
|
|
|
|
|
are processed: |
|
353
|
|
|
|
|
|
|
|
|
354
|
|
|
|
|
|
|
myprogram --color purple |
|
355
|
|
|
|
|
|
|
ERROR: color has invalid value purple: select from red green blue |
|
356
|
|
|
|
|
|
|
|
|
357
|
|
|
|
|
|
|
See below for details on how to permit values which aren't shown in completions to |
|
358
|
|
|
|
|
|
|
be used and not generate errors. |
|
359
|
|
|
|
|
|
|
|
|
360
|
|
|
|
|
|
|
=item undef |
|
361
|
|
|
|
|
|
|
|
|
362
|
|
|
|
|
|
|
An undefined value indicates that the option is not completable. No completions |
|
363
|
|
|
|
|
|
|
will be offered by the application, though any value provided by the user will be |
|
364
|
|
|
|
|
|
|
considered valid. |
|
365
|
|
|
|
|
|
|
|
|
366
|
|
|
|
|
|
|
Note that this is distinct from returning an empty arrayref from a callback, which |
|
367
|
|
|
|
|
|
|
implies that there ARE known completions but the user has failed to match any of them. |
|
368
|
|
|
|
|
|
|
|
|
369
|
|
|
|
|
|
|
Also note: this is the only valid completion for boolean parameters, since there is no |
|
370
|
|
|
|
|
|
|
value to specify on the command-line. |
|
371
|
|
|
|
|
|
|
|
|
372
|
|
|
|
|
|
|
use Getopt::Complete ( |
|
373
|
|
|
|
|
|
|
'name' => undef, # take --name "anyting" |
|
374
|
|
|
|
|
|
|
'perky!' => undef, # take --perky or --no-perky |
|
375
|
|
|
|
|
|
|
); |
|
376
|
|
|
|
|
|
|
|
|
377
|
|
|
|
|
|
|
=item subroutine callback |
|
378
|
|
|
|
|
|
|
|
|
379
|
|
|
|
|
|
|
When the list of valid values must be determined dynamically, a subroutine reference or |
|
380
|
|
|
|
|
|
|
name can be specified. If a name is specified, it should be fully qualified. (If |
|
381
|
|
|
|
|
|
|
it is not, it will be presumed to refer to one of the bash builtin completions types. |
|
382
|
|
|
|
|
|
|
See BUILTIN COMPLETION TYPES below.) |
|
383
|
|
|
|
|
|
|
|
|
384
|
|
|
|
|
|
|
The subroutine will be called, and is expected to return an arrayref of possiible matches. |
|
385
|
|
|
|
|
|
|
The arrayref will be treated as though it were specified directly in the specification. |
|
386
|
|
|
|
|
|
|
|
|
387
|
|
|
|
|
|
|
As with explicit values, an empty arrayref indicated that there are no valid matches |
|
388
|
|
|
|
|
|
|
for this option, given the other params on the command-line, and the text already typed. |
|
389
|
|
|
|
|
|
|
An undef value indicates that any value is valid for this parameter. |
|
390
|
|
|
|
|
|
|
|
|
391
|
|
|
|
|
|
|
Parameters to the callback are described below. |
|
392
|
|
|
|
|
|
|
|
|
393
|
|
|
|
|
|
|
=back |
|
394
|
|
|
|
|
|
|
|
|
395
|
|
|
|
|
|
|
=head1 WRITING SUBROUTINE CALLBACKS |
|
396
|
|
|
|
|
|
|
|
|
397
|
|
|
|
|
|
|
A subroutine callback is useful when the list of options to match must be dynamically generated. |
|
398
|
|
|
|
|
|
|
|
|
399
|
|
|
|
|
|
|
It is also useful when knowing what the user has already typed helps narrow the search for |
|
400
|
|
|
|
|
|
|
valid completions, or when iterative completion needs to occur (see PARTIAL COMPLETIONS below). |
|
401
|
|
|
|
|
|
|
|
|
402
|
|
|
|
|
|
|
The callback is expected to return an arrayref of valid completions. If it is empty, no |
|
403
|
|
|
|
|
|
|
completions are considered valid. If an undefined value is returned, no completions are |
|
404
|
|
|
|
|
|
|
specified, but ANY arbitrary value entered is considered valid as far as error checking is |
|
405
|
|
|
|
|
|
|
concerned. |
|
406
|
|
|
|
|
|
|
|
|
407
|
|
|
|
|
|
|
The callback registerd in the completion specification will receive the following parameters: |
|
408
|
|
|
|
|
|
|
|
|
409
|
|
|
|
|
|
|
=over 4 |
|
410
|
|
|
|
|
|
|
|
|
411
|
|
|
|
|
|
|
=item command name |
|
412
|
|
|
|
|
|
|
|
|
413
|
|
|
|
|
|
|
Contains the name of the command for which options are being parsed. This is $0 in most |
|
414
|
|
|
|
|
|
|
cases, though hierarchical commands may have a name "svn commit" or "foo bar baz" etc. |
|
415
|
|
|
|
|
|
|
|
|
416
|
|
|
|
|
|
|
=item current word |
|
417
|
|
|
|
|
|
|
|
|
418
|
|
|
|
|
|
|
This is the word the user is trying to complete. It may be an empty string, if the user hits |
|
419
|
|
|
|
|
|
|
without typing anything first. |
|
420
|
|
|
|
|
|
|
|
|
421
|
|
|
|
|
|
|
=item option name |
|
422
|
|
|
|
|
|
|
|
|
423
|
|
|
|
|
|
|
This is the name of the option for which we are resolving a value. It is typically ignored unless |
|
424
|
|
|
|
|
|
|
you use the same subroutine to service multiple options. |
|
425
|
|
|
|
|
|
|
|
|
426
|
|
|
|
|
|
|
A value of '<>' indicates an unnamed argument (a.k.a "bare argument" or "non-option" argument). |
|
427
|
|
|
|
|
|
|
|
|
428
|
|
|
|
|
|
|
=item other opts |
|
429
|
|
|
|
|
|
|
|
|
430
|
|
|
|
|
|
|
It is the hashref resulting from Getopt::Long processing of all of the OTHER arguments. |
|
431
|
|
|
|
|
|
|
This is useful when one option limits the valid values for another option. |
|
432
|
|
|
|
|
|
|
|
|
433
|
|
|
|
|
|
|
In some cases, the options which should be available change depending on what other |
|
434
|
|
|
|
|
|
|
options are present, or the values available change depending on other options or their |
|
435
|
|
|
|
|
|
|
values. |
|
436
|
|
|
|
|
|
|
|
|
437
|
|
|
|
|
|
|
=back |
|
438
|
|
|
|
|
|
|
|
|
439
|
|
|
|
|
|
|
The environment variables COMP_LINE and COMP_POINT have the exact text |
|
440
|
|
|
|
|
|
|
of the command-line and also the exact character position, if more detail is |
|
441
|
|
|
|
|
|
|
needed in raw form than the parameters provide. |
|
442
|
|
|
|
|
|
|
|
|
443
|
|
|
|
|
|
|
The return value is a list of possible matches. The callback is free to narrow its results |
|
444
|
|
|
|
|
|
|
by examining the current word, but is not required to do so. The module will always return |
|
445
|
|
|
|
|
|
|
only the appropriate matches. |
|
446
|
|
|
|
|
|
|
|
|
447
|
|
|
|
|
|
|
=head2 EXAMPLE |
|
448
|
|
|
|
|
|
|
|
|
449
|
|
|
|
|
|
|
This app takes 2 parameters, one of which is dependent on the other: |
|
450
|
|
|
|
|
|
|
|
|
451
|
|
|
|
|
|
|
use Getopt::Complete ( |
|
452
|
|
|
|
|
|
|
type => ['names','places','things'], |
|
453
|
|
|
|
|
|
|
instance => sub { |
|
454
|
|
|
|
|
|
|
my ($command, $value, $option, $other_opts) = @_; |
|
455
|
|
|
|
|
|
|
if ($other_opts{type} eq 'names') { |
|
456
|
|
|
|
|
|
|
return [qw/larry moe curly/], |
|
457
|
|
|
|
|
|
|
} |
|
458
|
|
|
|
|
|
|
elsif ($other_opts{type} eq 'places') { |
|
459
|
|
|
|
|
|
|
return [qw/here there everywhere/], |
|
460
|
|
|
|
|
|
|
} |
|
461
|
|
|
|
|
|
|
elsif ($other_opts{type} eq 'things') { |
|
462
|
|
|
|
|
|
|
return [ query_database_matching("${value}%") ] |
|
463
|
|
|
|
|
|
|
} |
|
464
|
|
|
|
|
|
|
elsif ($otper_opts{type} eq 'surprsing') { |
|
465
|
|
|
|
|
|
|
# no defined list: take anything typed |
|
466
|
|
|
|
|
|
|
return undef; |
|
467
|
|
|
|
|
|
|
} |
|
468
|
|
|
|
|
|
|
else { |
|
469
|
|
|
|
|
|
|
# invalid type: no matches |
|
470
|
|
|
|
|
|
|
return [] |
|
471
|
|
|
|
|
|
|
} |
|
472
|
|
|
|
|
|
|
} |
|
473
|
|
|
|
|
|
|
); |
|
474
|
|
|
|
|
|
|
|
|
475
|
|
|
|
|
|
|
$ myprogram --type people --instance |
|
476
|
|
|
|
|
|
|
larry moe curly |
|
477
|
|
|
|
|
|
|
|
|
478
|
|
|
|
|
|
|
$ myprogram --type places --instance |
|
479
|
|
|
|
|
|
|
here there everywhere |
|
480
|
|
|
|
|
|
|
|
|
481
|
|
|
|
|
|
|
$ myprogram --type surprising --instance |
|
482
|
|
|
|
|
|
|
(no completions appear) |
|
483
|
|
|
|
|
|
|
|
|
484
|
|
|
|
|
|
|
|
|
485
|
|
|
|
|
|
|
=head1 BUILTIN COMPLETIONS |
|
486
|
|
|
|
|
|
|
|
|
487
|
|
|
|
|
|
|
Bash has a list of built-in value types which it knows how to complete. Any of the |
|
488
|
|
|
|
|
|
|
default shell completions supported by bash's "compgen" are supported by this module. |
|
489
|
|
|
|
|
|
|
|
|
490
|
|
|
|
|
|
|
The list of builtin types supported as-of this writing are: |
|
491
|
|
|
|
|
|
|
|
|
492
|
|
|
|
|
|
|
files |
|
493
|
|
|
|
|
|
|
directories |
|
494
|
|
|
|
|
|
|
commands |
|
495
|
|
|
|
|
|
|
users |
|
496
|
|
|
|
|
|
|
groups |
|
497
|
|
|
|
|
|
|
environment |
|
498
|
|
|
|
|
|
|
services |
|
499
|
|
|
|
|
|
|
aliases |
|
500
|
|
|
|
|
|
|
builtins |
|
501
|
|
|
|
|
|
|
|
|
502
|
|
|
|
|
|
|
To indicate that an argument's valid values are one of the above, use the exact string |
|
503
|
|
|
|
|
|
|
after Getopt::Complete:: as the completion callback. For example: |
|
504
|
|
|
|
|
|
|
|
|
505
|
|
|
|
|
|
|
use Getopt::Complete ( |
|
506
|
|
|
|
|
|
|
infile => 'Getopt::Complete::files', |
|
507
|
|
|
|
|
|
|
outdir => 'Getopt::Complete::directories', |
|
508
|
|
|
|
|
|
|
myuser => 'Getopt::Complete::users', |
|
509
|
|
|
|
|
|
|
); |
|
510
|
|
|
|
|
|
|
|
|
511
|
|
|
|
|
|
|
The full name is alissed as the single-character compgen parameter name for convenience. |
|
512
|
|
|
|
|
|
|
Further, because Getopt::Complete is the default namespace during processing, it can |
|
513
|
|
|
|
|
|
|
be ommitted from callback function names. |
|
514
|
|
|
|
|
|
|
|
|
515
|
|
|
|
|
|
|
The following are all equivalent. They effectively produce the same list as 'compgen -f': |
|
516
|
|
|
|
|
|
|
|
|
517
|
|
|
|
|
|
|
file1 => \&Getopt::Complete::files |
|
518
|
|
|
|
|
|
|
file1 => \&Getopt::Complete::f |
|
519
|
|
|
|
|
|
|
file1 => 'Getopt::Complete::files' |
|
520
|
|
|
|
|
|
|
file1 => 'Getopt::Complete::f' |
|
521
|
|
|
|
|
|
|
file1 => 'files' |
|
522
|
|
|
|
|
|
|
file1 => 'f' |
|
523
|
|
|
|
|
|
|
|
|
524
|
|
|
|
|
|
|
See L for specifics on using builtin completions. |
|
525
|
|
|
|
|
|
|
|
|
526
|
|
|
|
|
|
|
See "man bash", in the Programmable Complete secion, and the "compgen" builtin command for more details. |
|
527
|
|
|
|
|
|
|
|
|
528
|
|
|
|
|
|
|
=head1 UNLISTED VALID VALUES |
|
529
|
|
|
|
|
|
|
|
|
530
|
|
|
|
|
|
|
If there are options which should not be part of completion lists, but still count |
|
531
|
|
|
|
|
|
|
as valid if passed-into the app, they can be in a final sub-array at the end. This |
|
532
|
|
|
|
|
|
|
list doesn't affect the completion system at all, just prevents errors in the |
|
533
|
|
|
|
|
|
|
ERRORS array described above. |
|
534
|
|
|
|
|
|
|
|
|
535
|
|
|
|
|
|
|
use Getopt::Complete ( |
|
536
|
|
|
|
|
|
|
'color' => ['red','green','blue', ['yellow','orange']], |
|
537
|
|
|
|
|
|
|
); |
|
538
|
|
|
|
|
|
|
|
|
539
|
|
|
|
|
|
|
myprogram --color |
|
540
|
|
|
|
|
|
|
red green blue |
|
541
|
|
|
|
|
|
|
|
|
542
|
|
|
|
|
|
|
myprogram --color orange |
|
543
|
|
|
|
|
|
|
# no errors |
|
544
|
|
|
|
|
|
|
|
|
545
|
|
|
|
|
|
|
myprogram --color purple |
|
546
|
|
|
|
|
|
|
# error |
|
547
|
|
|
|
|
|
|
|
|
548
|
|
|
|
|
|
|
=head1 PARTIAL COMPLETIONS |
|
549
|
|
|
|
|
|
|
|
|
550
|
|
|
|
|
|
|
=head2 BASICS |
|
551
|
|
|
|
|
|
|
|
|
552
|
|
|
|
|
|
|
Any returned value ending in a character ("\t") will be considered |
|
553
|
|
|
|
|
|
|
a "partial" completion. This means that the shell will be instructed |
|
554
|
|
|
|
|
|
|
to leave the cursor at the end of that word even if there is no ambiguity |
|
555
|
|
|
|
|
|
|
in the rest of the returned list. |
|
556
|
|
|
|
|
|
|
|
|
557
|
|
|
|
|
|
|
Partial completions are only usable from callbacks. From a hard-coded |
|
558
|
|
|
|
|
|
|
array of values, it would be impossible to ever fuly complete the partial |
|
559
|
|
|
|
|
|
|
completion. |
|
560
|
|
|
|
|
|
|
|
|
561
|
|
|
|
|
|
|
=head2 BACKGROUND |
|
562
|
|
|
|
|
|
|
|
|
563
|
|
|
|
|
|
|
Sometimes, the entire list of completions is too big to reasonable resolve and |
|
564
|
|
|
|
|
|
|
return. The most obvious example is filename completion at the root of a |
|
565
|
|
|
|
|
|
|
large filesystem. In these cases, the completion of is handled in pieces, allowing |
|
566
|
|
|
|
|
|
|
the user to gradually "drill down" to the complete value directory by directory. |
|
567
|
|
|
|
|
|
|
It is even possible to hit to get one completion, then hit it again and get |
|
568
|
|
|
|
|
|
|
more completion, in the case of single-sub-directory directories. |
|
569
|
|
|
|
|
|
|
|
|
570
|
|
|
|
|
|
|
The Getopt::Complete module supports iterative drill-down completions from any |
|
571
|
|
|
|
|
|
|
parameter configured with a callback. It is completely valid to complete |
|
572
|
|
|
|
|
|
|
"a" with "aa" "ab" and "ac", but then to complete "ab" with yet more text. |
|
573
|
|
|
|
|
|
|
|
|
574
|
|
|
|
|
|
|
Unless the shell knows, however that your "aa", "ab", and "ac" completions are |
|
575
|
|
|
|
|
|
|
in fact only partial completions, an inconvenient space will be added |
|
576
|
|
|
|
|
|
|
after the word on the terminal line, as the shell happily moves on to helping |
|
577
|
|
|
|
|
|
|
the user enter the next argument. |
|
578
|
|
|
|
|
|
|
|
|
579
|
|
|
|
|
|
|
=head2 DETAILS |
|
580
|
|
|
|
|
|
|
|
|
581
|
|
|
|
|
|
|
Because partial completions are indicated in Getopt::Complete by adding a "\t" |
|
582
|
|
|
|
|
|
|
tab character to the end of the returned string, an application can |
|
583
|
|
|
|
|
|
|
return a mix of partial and full completions, and it will respect each |
|
584
|
|
|
|
|
|
|
correctly. |
|
585
|
|
|
|
|
|
|
|
|
586
|
|
|
|
|
|
|
Note: The "\t" is actually stripped-off before going to the shell |
|
587
|
|
|
|
|
|
|
and internal hackery is used to force the shell to not put a space |
|
588
|
|
|
|
|
|
|
where it isn't needed. This is not part of the bash programmable completion |
|
589
|
|
|
|
|
|
|
specification, but is used to simulate features typically only available |
|
590
|
|
|
|
|
|
|
with bash for builtin completions like files/directories. |
|
591
|
|
|
|
|
|
|
|
|
592
|
|
|
|
|
|
|
=head1 SUB-COMMAND TREES |
|
593
|
|
|
|
|
|
|
|
|
594
|
|
|
|
|
|
|
It is common for a given appliction to actually be an entry point for several different tools. |
|
595
|
|
|
|
|
|
|
Popular exmples are the big version control suites (cvs,svn,svk,git), which use |
|
596
|
|
|
|
|
|
|
the form: |
|
597
|
|
|
|
|
|
|
|
|
598
|
|
|
|
|
|
|
cvs SUBCOMMAND [ARGS] |
|
599
|
|
|
|
|
|
|
|
|
600
|
|
|
|
|
|
|
Each sub-command has its own options specification. Those may in turn have further sub-commands. |
|
601
|
|
|
|
|
|
|
|
|
602
|
|
|
|
|
|
|
Sub-commands are identified by an initial '>' in the options specification key. The value |
|
603
|
|
|
|
|
|
|
is interpreted as a complete, isolated options spec, using the same general syntax. This |
|
604
|
|
|
|
|
|
|
applies recursively. |
|
605
|
|
|
|
|
|
|
|
|
606
|
|
|
|
|
|
|
=head2 EXAMPLE COMMAND TREE SPEC |
|
607
|
|
|
|
|
|
|
|
|
608
|
|
|
|
|
|
|
use Getopt::Complete ( |
|
609
|
|
|
|
|
|
|
'>animal' => [ |
|
610
|
|
|
|
|
|
|
'>dog' => [ |
|
611
|
|
|
|
|
|
|
'>bark' => [ |
|
612
|
|
|
|
|
|
|
'ferocity' => ['yip','wail','ruf','grrrr'], |
|
613
|
|
|
|
|
|
|
'count' => ['1','2','one too many'], |
|
614
|
|
|
|
|
|
|
], |
|
615
|
|
|
|
|
|
|
'>drool' => [ |
|
616
|
|
|
|
|
|
|
'buckets=n' => undef, |
|
617
|
|
|
|
|
|
|
'lick' => 'users', |
|
618
|
|
|
|
|
|
|
], |
|
619
|
|
|
|
|
|
|
'list!' => undef, |
|
620
|
|
|
|
|
|
|
], |
|
621
|
|
|
|
|
|
|
'>cat' => [ |
|
622
|
|
|
|
|
|
|
'>purr' => [], |
|
623
|
|
|
|
|
|
|
'>meow' => [ |
|
624
|
|
|
|
|
|
|
'volume=n' => undef, |
|
625
|
|
|
|
|
|
|
'bass' => ['low','medium','high'], |
|
626
|
|
|
|
|
|
|
] |
|
627
|
|
|
|
|
|
|
], |
|
628
|
|
|
|
|
|
|
], |
|
629
|
|
|
|
|
|
|
'>plant' => [ |
|
630
|
|
|
|
|
|
|
'>taters' => [ |
|
631
|
|
|
|
|
|
|
'>fry' => [ |
|
632
|
|
|
|
|
|
|
'greasiness' => ['crispy','drippy'], |
|
633
|
|
|
|
|
|
|
'width' => ['fat','thin','frite'], |
|
634
|
|
|
|
|
|
|
], |
|
635
|
|
|
|
|
|
|
'>bake' => [ |
|
636
|
|
|
|
|
|
|
'hard!' => undef, |
|
637
|
|
|
|
|
|
|
'temp=n' => undef, |
|
638
|
|
|
|
|
|
|
], |
|
639
|
|
|
|
|
|
|
], |
|
640
|
|
|
|
|
|
|
'>dasies' => [ |
|
641
|
|
|
|
|
|
|
'>pick' => [ |
|
642
|
|
|
|
|
|
|
'<>' => ['mine','yours','theirs'], |
|
643
|
|
|
|
|
|
|
], |
|
644
|
|
|
|
|
|
|
'>plant' => [ |
|
645
|
|
|
|
|
|
|
'season' => ['winter','spring','summer','fall'], |
|
646
|
|
|
|
|
|
|
'seeds=n' => undef, |
|
647
|
|
|
|
|
|
|
'deep!' => undef, |
|
648
|
|
|
|
|
|
|
] |
|
649
|
|
|
|
|
|
|
] |
|
650
|
|
|
|
|
|
|
] |
|
651
|
|
|
|
|
|
|
); |
|
652
|
|
|
|
|
|
|
|
|
653
|
|
|
|
|
|
|
my ($word1,$word2,$word3) = $ARGS->parent_sub_commands; |
|
654
|
|
|
|
|
|
|
# (the above is also in $ARGS{'>'} for non-OO access) |
|
655
|
|
|
|
|
|
|
|
|
656
|
|
|
|
|
|
|
# your program probably has something smarter to decide where to go |
|
657
|
|
|
|
|
|
|
# for a given command |
|
658
|
|
|
|
|
|
|
if ($word1 eq 'animal') { |
|
659
|
|
|
|
|
|
|
if ($word2 eq 'dog') { |
|
660
|
|
|
|
|
|
|
if ($word3 eq 'bark') { |
|
661
|
|
|
|
|
|
|
# work with %ARGS for barking dogs... |
|
662
|
|
|
|
|
|
|
# .... |
|
663
|
|
|
|
|
|
|
} |
|
664
|
|
|
|
|
|
|
} |
|
665
|
|
|
|
|
|
|
} |
|
666
|
|
|
|
|
|
|
elsif ($path[0] eq 'plant') { |
|
667
|
|
|
|
|
|
|
... |
|
668
|
|
|
|
|
|
|
} |
|
669
|
|
|
|
|
|
|
|
|
670
|
|
|
|
|
|
|
The above example specifies two sub-commands "animal" and "plant, each of which has its own two |
|
671
|
|
|
|
|
|
|
sub-commands, dog/cat and taters/dasies. Each of those, in turn, have two sub-commands, |
|
672
|
|
|
|
|
|
|
for a total of 8 complete commands possible, each with different arguments. Each of the |
|
673
|
|
|
|
|
|
|
8 has thier own options specification. |
|
674
|
|
|
|
|
|
|
|
|
675
|
|
|
|
|
|
|
When the program executes, the %ARGS hash contains option/value pairs for the specific command |
|
676
|
|
|
|
|
|
|
chosen. The the series of sub-command choices in $ARGS{'>'}, separate from the regular bare |
|
677
|
|
|
|
|
|
|
arguments in '<>'. (The method name on an $ARGS object for this is "parent_sub_commands", a |
|
678
|
|
|
|
|
|
|
companion to the "bare_args" method. |
|
679
|
|
|
|
|
|
|
|
|
680
|
|
|
|
|
|
|
The method to determine the next available sub-commands is just "sub_commands".) |
|
681
|
|
|
|
|
|
|
|
|
682
|
|
|
|
|
|
|
Note that, since the user can hit at any time, it is possible that the parent_sub_commands |
|
683
|
|
|
|
|
|
|
will be a partial drill-down. It isn't uncommon to have something like this in place: |
|
684
|
|
|
|
|
|
|
|
|
685
|
|
|
|
|
|
|
if (my @next = $ARGS->sub_commands) { |
|
686
|
|
|
|
|
|
|
print STDERR "Please select a sub-command:\n"; |
|
687
|
|
|
|
|
|
|
print STDERR join("\n", @sub_commands),"\n"; |
|
688
|
|
|
|
|
|
|
exit 1; |
|
689
|
|
|
|
|
|
|
} |
|
690
|
|
|
|
|
|
|
|
|
691
|
|
|
|
|
|
|
The above checking is not done automatically, since a sub-command may have further sub-commands, but |
|
692
|
|
|
|
|
|
|
still also be used directly, possibly with other option and bare arguments. |
|
693
|
|
|
|
|
|
|
|
|
694
|
|
|
|
|
|
|
=head1 THE LONE DASH |
|
695
|
|
|
|
|
|
|
|
|
696
|
|
|
|
|
|
|
A lone dash is often used to represent using STDIN instead of a file for applications which otherwise take filenames. |
|
697
|
|
|
|
|
|
|
|
|
698
|
|
|
|
|
|
|
This is supported by all options which complete with the "files" builtin, though it does not appear in completion hint displays. |
|
699
|
|
|
|
|
|
|
|
|
700
|
|
|
|
|
|
|
To disable this, set $Getopt::Complete::LONE_DASH = 0. |
|
701
|
|
|
|
|
|
|
|
|
702
|
|
|
|
|
|
|
=head1 OVERRIDING COMPILE-TIME OPTION PARSING |
|
703
|
|
|
|
|
|
|
|
|
704
|
|
|
|
|
|
|
Getopt::Complete makes a lot of assumptions in order to be easy to use in the |
|
705
|
|
|
|
|
|
|
default case. Here is how to override that behavior if it's not what you want. |
|
706
|
|
|
|
|
|
|
|
|
707
|
|
|
|
|
|
|
=head2 OPTION 1: DOING CUSTOM ERROR HANDLING |
|
708
|
|
|
|
|
|
|
|
|
709
|
|
|
|
|
|
|
To prevent Getopt::Complete from exiting at compile time if there are errors, |
|
710
|
|
|
|
|
|
|
the EXIT_ON_ERRORS flag should be set to 0 first, at compile time, before using |
|
711
|
|
|
|
|
|
|
the Getopt::Complete module as follows: |
|
712
|
|
|
|
|
|
|
|
|
713
|
|
|
|
|
|
|
BEGIN { $Getopt:Complete::EXIT_ON_ERRORS = 0; } |
|
714
|
|
|
|
|
|
|
|
|
715
|
|
|
|
|
|
|
This should not affect completions in any way (it will still exit if it realizes |
|
716
|
|
|
|
|
|
|
it is talking to bash, to prevent accidentally running your program). |
|
717
|
|
|
|
|
|
|
|
|
718
|
|
|
|
|
|
|
Errors are retained in: |
|
719
|
|
|
|
|
|
|
|
|
720
|
|
|
|
|
|
|
$Getopt::Complete::ARGS->errors; |
|
721
|
|
|
|
|
|
|
|
|
722
|
|
|
|
|
|
|
It is then up to the application to not run with invalid parameters. |
|
723
|
|
|
|
|
|
|
|
|
724
|
|
|
|
|
|
|
=head2 OPTION 2: RE-PROCESS @ARGV |
|
725
|
|
|
|
|
|
|
|
|
726
|
|
|
|
|
|
|
This module restores @ARGV to its original state after processing, so |
|
727
|
|
|
|
|
|
|
independent option processing can be done if necessary. The full |
|
728
|
|
|
|
|
|
|
spec imported by Getopt::Complete is stored as: |
|
729
|
|
|
|
|
|
|
|
|
730
|
|
|
|
|
|
|
$Getopt::Complete::ARGS->option_specs; |
|
731
|
|
|
|
|
|
|
|
|
732
|
|
|
|
|
|
|
This is an easy option when upgrading old applications. |
|
733
|
|
|
|
|
|
|
|
|
734
|
|
|
|
|
|
|
Combined with disabling the EXIT_ON_ERROS flag above, set, you can completely ignore, |
|
735
|
|
|
|
|
|
|
or partially ignore, the options processing which happens automatically. |
|
736
|
|
|
|
|
|
|
|
|
737
|
|
|
|
|
|
|
=head2 OPTION 3: CHANGING COMPILE-TIME PROCESSING |
|
738
|
|
|
|
|
|
|
|
|
739
|
|
|
|
|
|
|
You can also adjust how option processing happens inside of Getopt::Complete. |
|
740
|
|
|
|
|
|
|
Getopt::Complete wraps Getopt::Long to do the underlying option parsing. It uses |
|
741
|
|
|
|
|
|
|
GetOptions(\%h, @specification) to produce the %ARGS hash. Customization of |
|
742
|
|
|
|
|
|
|
Getopt::Long should occur in a BEGIN block before using Getopt::Complete. |
|
743
|
|
|
|
|
|
|
|
|
744
|
|
|
|
|
|
|
=head2 OPTION 4: USE THE OBJECTS AND WRITE YOUR OWN LOGIC |
|
745
|
|
|
|
|
|
|
|
|
746
|
|
|
|
|
|
|
The logic in import() is very short, and is simple to modify. It is best |
|
747
|
|
|
|
|
|
|
to do it in a BEGIN {} block so that bash can use 'perl -c myprogram' |
|
748
|
|
|
|
|
|
|
to get completions at compile time. |
|
749
|
|
|
|
|
|
|
|
|
750
|
|
|
|
|
|
|
BEGIN { |
|
751
|
|
|
|
|
|
|
|
|
752
|
|
|
|
|
|
|
my $options = Getopt::Complete::Options->new( |
|
753
|
|
|
|
|
|
|
'myfile' => 'f', |
|
754
|
|
|
|
|
|
|
'mychoice' => ['small','medium','huge'] |
|
755
|
|
|
|
|
|
|
); |
|
756
|
|
|
|
|
|
|
|
|
757
|
|
|
|
|
|
|
$options->handle_shell_completion(); |
|
758
|
|
|
|
|
|
|
|
|
759
|
|
|
|
|
|
|
my $args = Getopt::Complete::Args->new( |
|
760
|
|
|
|
|
|
|
options => $options, |
|
761
|
|
|
|
|
|
|
argv => [@ARGV] |
|
762
|
|
|
|
|
|
|
); |
|
763
|
|
|
|
|
|
|
|
|
764
|
|
|
|
|
|
|
if (my @errors = $ARGS->errors) { |
|
765
|
|
|
|
|
|
|
for my $error ($ARGS->errors) { |
|
766
|
|
|
|
|
|
|
chomp $error; |
|
767
|
|
|
|
|
|
|
warn __PACKAGE__ . ' ERROR:' . $error . "\n"; |
|
768
|
|
|
|
|
|
|
} |
|
769
|
|
|
|
|
|
|
exit 1; |
|
770
|
|
|
|
|
|
|
} |
|
771
|
|
|
|
|
|
|
|
|
772
|
|
|
|
|
|
|
# make the %ARGS available to all of the app |
|
773
|
|
|
|
|
|
|
$args->__install_as_default__; |
|
774
|
|
|
|
|
|
|
|
|
775
|
|
|
|
|
|
|
# if you also want %ARGS and $ARGS here when you're finished... |
|
776
|
|
|
|
|
|
|
Getopt:Complete->export_aliases(__PACKAGE__); |
|
777
|
|
|
|
|
|
|
}; |
|
778
|
|
|
|
|
|
|
|
|
779
|
|
|
|
|
|
|
=head1 EXTENSIVE USAGE EXAMPLE |
|
780
|
|
|
|
|
|
|
|
|
781
|
|
|
|
|
|
|
Cut-and-paste this into a script called "myprogram" in your path, make it executable, |
|
782
|
|
|
|
|
|
|
and then run this in the shell: complete -C myprogram myprogram. Then try it out. |
|
783
|
|
|
|
|
|
|
It does one of everything, besides command trees. |
|
784
|
|
|
|
|
|
|
|
|
785
|
|
|
|
|
|
|
#!/usr/bin/env perl |
|
786
|
|
|
|
|
|
|
use strict; |
|
787
|
|
|
|
|
|
|
use warnings; |
|
788
|
|
|
|
|
|
|
|
|
789
|
|
|
|
|
|
|
use Getopt::Complete ( |
|
790
|
|
|
|
|
|
|
# list the explicit values which are valid for this option |
|
791
|
|
|
|
|
|
|
'frog' => ['ribbit','urp','ugh'], |
|
792
|
|
|
|
|
|
|
|
|
793
|
|
|
|
|
|
|
# you can add any valid Getopt::Long specification to the key on the left |
|
794
|
|
|
|
|
|
|
# ...if you put nothing: "=s" is assumed |
|
795
|
|
|
|
|
|
|
'names=s@' => ['eenie','meanie','miney'], |
|
796
|
|
|
|
|
|
|
|
|
797
|
|
|
|
|
|
|
# support for Bash "compgen" builtins is present with some pre-made callbacks |
|
798
|
|
|
|
|
|
|
'myfile' => 'Getopt::Complete::Compgen::files', |
|
799
|
|
|
|
|
|
|
'mydir' => 'Getopt::Complete::Compgen::directories', |
|
800
|
|
|
|
|
|
|
|
|
801
|
|
|
|
|
|
|
# the plain name or first letter of the compgen builtins also work |
|
802
|
|
|
|
|
|
|
'myfile2' => 'files', |
|
803
|
|
|
|
|
|
|
'myfile3' => 'f', |
|
804
|
|
|
|
|
|
|
|
|
805
|
|
|
|
|
|
|
# handle unnamed arguments from the command-line ("non-option" arguments) with a special key: |
|
806
|
|
|
|
|
|
|
'<>' => ['some','raw','words'], |
|
807
|
|
|
|
|
|
|
|
|
808
|
|
|
|
|
|
|
# CODE callbacks allow a the completion list to be dynamically resolved |
|
809
|
|
|
|
|
|
|
'fraggle' => sub { return ['rock','roll','fried fish','fried taters','fries and squid'] }, |
|
810
|
|
|
|
|
|
|
|
|
811
|
|
|
|
|
|
|
# callbacks get extra info to help them, including the part of the |
|
812
|
|
|
|
|
|
|
# word already typed, and the remainder of the options already processed for context |
|
813
|
|
|
|
|
|
|
'type' => ['people','places'], |
|
814
|
|
|
|
|
|
|
'instance'=> sub { |
|
815
|
|
|
|
|
|
|
my ($command, $partial_word, $option_name, $other_opts_hashref) = @_; |
|
816
|
|
|
|
|
|
|
# be lazy and ignore the partial word: bash will compensate |
|
817
|
|
|
|
|
|
|
if (my $type = $other_opts_hashref->{type}) { |
|
818
|
|
|
|
|
|
|
if ($type eq 'people') { |
|
819
|
|
|
|
|
|
|
return [qw/larry moe curly/] |
|
820
|
|
|
|
|
|
|
} |
|
821
|
|
|
|
|
|
|
elsif ($type eq 'places') { |
|
822
|
|
|
|
|
|
|
return [qw/here there everywhere/], |
|
823
|
|
|
|
|
|
|
} |
|
824
|
|
|
|
|
|
|
} |
|
825
|
|
|
|
|
|
|
return []; |
|
826
|
|
|
|
|
|
|
}, |
|
827
|
|
|
|
|
|
|
|
|
828
|
|
|
|
|
|
|
# undef means we don't know how to complete the value: any value specified will do |
|
829
|
|
|
|
|
|
|
# this will result in no shell ompletions, but will still expect a value to be entered |
|
830
|
|
|
|
|
|
|
'name=s' => undef, |
|
831
|
|
|
|
|
|
|
|
|
832
|
|
|
|
|
|
|
# boolean values never have a completion list, and will yell if you are that foolish |
|
833
|
|
|
|
|
|
|
# this will give you --no-fast for free as well |
|
834
|
|
|
|
|
|
|
'fast!' => undef, |
|
835
|
|
|
|
|
|
|
|
|
836
|
|
|
|
|
|
|
); |
|
837
|
|
|
|
|
|
|
|
|
838
|
|
|
|
|
|
|
use Data::Dumper; |
|
839
|
|
|
|
|
|
|
print "The arguments are: " . Dumper(\%ARGS); |
|
840
|
|
|
|
|
|
|
|
|
841
|
|
|
|
|
|
|
=head1 DEVELOPMENT |
|
842
|
|
|
|
|
|
|
|
|
843
|
|
|
|
|
|
|
Patches are welcome. |
|
844
|
|
|
|
|
|
|
|
|
845
|
|
|
|
|
|
|
http://github.com/sakoht/Getopt--Complete-for-Perl/ |
|
846
|
|
|
|
|
|
|
|
|
847
|
|
|
|
|
|
|
git clone git://github.com/sakoht/Getopt--Complete-for-Perl.git |
|
848
|
|
|
|
|
|
|
|
|
849
|
|
|
|
|
|
|
As are complaints. Help us find bugs by sending an email to the address below, or using CPAN's bug tracking system: |
|
850
|
|
|
|
|
|
|
|
|
851
|
|
|
|
|
|
|
https://rt.cpan.org/ |
|
852
|
|
|
|
|
|
|
|
|
853
|
|
|
|
|
|
|
The latest version of this module is always availabe on CPAN: |
|
854
|
|
|
|
|
|
|
|
|
855
|
|
|
|
|
|
|
http://search.cpan.org/search?query=Getopt%3A%3AComplete&mode=all |
|
856
|
|
|
|
|
|
|
|
|
857
|
|
|
|
|
|
|
And is readily installable with the CPAN shell on Mac, Linux, and other Unix-like systems: |
|
858
|
|
|
|
|
|
|
|
|
859
|
|
|
|
|
|
|
sudo cpan Getopt::Complete |
|
860
|
|
|
|
|
|
|
|
|
861
|
|
|
|
|
|
|
=head1 BUGS |
|
862
|
|
|
|
|
|
|
|
|
863
|
|
|
|
|
|
|
Completions with whitespace work, but they do so by escaping whitespace characters instead of quoting. |
|
864
|
|
|
|
|
|
|
Support should be present for completing quoted text. It should also be the default, since it is |
|
865
|
|
|
|
|
|
|
more attractive. |
|
866
|
|
|
|
|
|
|
|
|
867
|
|
|
|
|
|
|
The logic to "shorten" the completion options shown in some cases is still in development. |
|
868
|
|
|
|
|
|
|
This means that filename completion shows full paths as options instead of just the last word in the file path. |
|
869
|
|
|
|
|
|
|
|
|
870
|
|
|
|
|
|
|
Some uses of Getopt::Long will not work currently: multi-name options (though standard shortening works), +, :, %. |
|
871
|
|
|
|
|
|
|
|
|
872
|
|
|
|
|
|
|
Currently this module only supports bash, though other shells could be added easily. |
|
873
|
|
|
|
|
|
|
|
|
874
|
|
|
|
|
|
|
There is logic in development to have the tool possibly auto-update the user's .bashrc / .bash_profile, but this |
|
875
|
|
|
|
|
|
|
is incomplete. |
|
876
|
|
|
|
|
|
|
|
|
877
|
|
|
|
|
|
|
=head1 SEE ALSO |
|
878
|
|
|
|
|
|
|
|
|
879
|
|
|
|
|
|
|
=over 4 |
|
880
|
|
|
|
|
|
|
|
|
881
|
|
|
|
|
|
|
=item L |
|
882
|
|
|
|
|
|
|
|
|
883
|
|
|
|
|
|
|
the object API for the option/value argument set |
|
884
|
|
|
|
|
|
|
|
|
885
|
|
|
|
|
|
|
=item L |
|
886
|
|
|
|
|
|
|
|
|
887
|
|
|
|
|
|
|
the object API for the options specification |
|
888
|
|
|
|
|
|
|
|
|
889
|
|
|
|
|
|
|
=item L |
|
890
|
|
|
|
|
|
|
|
|
891
|
|
|
|
|
|
|
supplies builtin completions like file lists |
|
892
|
|
|
|
|
|
|
|
|
893
|
|
|
|
|
|
|
=item L |
|
894
|
|
|
|
|
|
|
|
|
895
|
|
|
|
|
|
|
the definitive options parser, wrapped by this module |
|
896
|
|
|
|
|
|
|
|
|
897
|
|
|
|
|
|
|
=item L |
|
898
|
|
|
|
|
|
|
|
|
899
|
|
|
|
|
|
|
the manual page for bash has lots of info on how tab-completion works |
|
900
|
|
|
|
|
|
|
|
|
901
|
|
|
|
|
|
|
=back |
|
902
|
|
|
|
|
|
|
|
|
903
|
|
|
|
|
|
|
=head1 COPYRIGHT |
|
904
|
|
|
|
|
|
|
|
|
905
|
|
|
|
|
|
|
Copyright 2010, 2011 Washington University School of Medicine |
|
906
|
|
|
|
|
|
|
|
|
907
|
|
|
|
|
|
|
=head1 AUTHORS |
|
908
|
|
|
|
|
|
|
|
|
909
|
|
|
|
|
|
|
Scott Smith (sakoht at cpan .org) |
|
910
|
|
|
|
|
|
|
Nathan Nutter |
|
911
|
|
|
|
|
|
|
Andrei Benea |
|
912
|
|
|
|
|
|
|
|
|
913
|
|
|
|
|
|
|
=head1 LICENSE |
|
914
|
|
|
|
|
|
|
|
|
915
|
|
|
|
|
|
|
This program is free software; you can redistribute it and/or modify it under |
|
916
|
|
|
|
|
|
|
the same terms as Perl itself. |
|
917
|
|
|
|
|
|
|
|
|
918
|
|
|
|
|
|
|
The full text of the license can be found in the LICENSE file included with this |
|
919
|
|
|
|
|
|
|
module. |
|
920
|
|
|
|
|
|
|
|
|
921
|
|
|
|
|
|
|
=cut |
|
922
|
|
|
|
|
|
|
|