aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Philip Sequeira <phsequei@gmail.com>2014-06-29 01:54:48 -0400
committerGravatar Alessandro Ghedini <alessandro@ghedini.me>2014-07-03 11:03:56 +0200
commitbbc005825a60c792e550b2437283ebdc21128588 (patch)
treed4d12c7ac207056bb1b1f16e59f3b3b3063a2a54
parentfd09578f0f88e6c729b4e60b19d484c5400da451 (diff)
TOOLS/zsh.pl: don't consume extra arguments
Completion now uses "--opt=value" instead of "--opt value". Once the user presses space and starts a new argument, the option just completed is out of the picture, whether or not it was given an argument. This handles options with no arguments or optional arguments much better; previously, completing such an option would effectively disable completion for the next argument. Custom completed options such as "--ao" and friends will no longer claim to consume an extra argument.
-rwxr-xr-xTOOLS/zsh.pl28
1 files changed, 18 insertions, 10 deletions
diff --git a/TOOLS/zsh.pl b/TOOLS/zsh.pl
index 53be1844ab..59979015fe 100755
--- a/TOOLS/zsh.pl
+++ b/TOOLS/zsh.pl
@@ -7,7 +7,7 @@ use warnings;
my $mpv = $ARGV[0] || 'mpv';
-my @opts = parse_opts("$mpv --list-options", '^ (\-\-[^\s\*]*)\*?\s*(.*)');
+my @opts = parse_opts("$mpv --list-options", '^ (\-\-[^\s\*]*)\*?\s*(.*)', 1);
my @ao = parse_opts("$mpv --ao=help", '^ ([^\s\:]*)\s*: (.*)');
my @vo = parse_opts("$mpv --vo=help", '^ ([^\s\:]*)\s*: (.*)');
@@ -17,7 +17,7 @@ my @vf = parse_opts("$mpv --vf=help", '^ ([^\s\:]*)\s*: (.*)');
my ($opts_str, $ao_str, $vo_str, $af_str, $vf_str);
-$opts_str .= qq{ '$_': \\\n} foreach (@opts);
+$opts_str .= qq{ '$_' \\\n} foreach (@opts);
chomp $opts_str;
$ao_str .= qq{ '$_' \\\n} foreach (@ao);
@@ -98,7 +98,7 @@ EOS
print $tmpl;
sub parse_opts {
- my ($cmd, $regex) = @_;
+ my ($cmd, $regex, $parsing_main_options) = @_;
my @list;
my @lines = split /\n/, `$cmd`;
@@ -108,21 +108,29 @@ sub parse_opts {
next;
}
- my $entry = "$1:";
+ my $entry = $1;
+
+ if ($parsing_main_options) {
+ $entry .= '=-';
+ }
if (defined $2) {
my $desc = $2;
$desc =~ s/\:/\\:/g;
- $entry .= $desc;
+ $entry .= ':' . $desc;
}
- $entry .= ':->ao' if ($1 eq '--ao');
- $entry .= ':->vo' if ($1 eq '--vo');
- $entry .= ':->af' if ($1 eq '--af');
- $entry .= ':->vf' if ($1 eq '--vf');
+ if ($parsing_main_options) {
+ $entry .= ':';
+
+ $entry .= '->ao' if ($1 eq '--ao');
+ $entry .= '->vo' if ($1 eq '--vo');
+ $entry .= '->af' if ($1 eq '--af');
+ $entry .= '->vf' if ($1 eq '--vf');
+ }
- push @list, $entry if ($line =~ /^$regex/)
+ push @list, $entry
}
return @list;