diff options
author | Philip Sequeira <phsequei@gmail.com> | 2014-06-29 01:54:48 -0400 |
---|---|---|
committer | Alessandro Ghedini <alessandro@ghedini.me> | 2014-07-05 00:26:55 +0200 |
commit | 6cf2f634b31b75d4082ce2dc4637b561312a5b39 (patch) | |
tree | a4f477fcdf9d8ed3b1f4e071cb6e1bed1833ff30 | |
parent | e165ccbf3be5475fc0e29384e9f8928cced86542 (diff) | |
download | mpv-6cf2f634b31b75d4082ce2dc4637b561312a5b39.tar.bz2 mpv-6cf2f634b31b75d4082ce2dc4637b561312a5b39.tar.xz |
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-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; |