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
|
|
|
|
|
|
|
|