diff options
author | Philip Sequeira <phsequei@gmail.com> | 2014-06-29 01:54:48 -0400 |
---|---|---|
committer | Alessandro Ghedini <alessandro@ghedini.me> | 2014-07-03 11:03:56 +0200 |
commit | bbc005825a60c792e550b2437283ebdc21128588 (patch) | |
tree | d4d12c7ac207056bb1b1f16e59f3b3b3063a2a54 /TOOLS | |
parent | fd09578f0f88e6c729b4e60b19d484c5400da451 (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.
Diffstat (limited to 'TOOLS')
-rwxr-xr-x | TOOLS/zsh.pl | 28 |
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; |