From 082034e2334b2d0795b2b324ff3e0635bb7d2b86 Mon Sep 17 00:00:00 2001 From: Alessandro Ghedini Date: Tue, 5 Feb 2019 20:44:14 +0000 Subject: [PATCH 1/2] zsh.pl: update regex to better match curl -h output The current regex fails to match '<...>' arguments properly (e.g. those with spaces in them), which causes an completion script with wrong descriptions for some options. The problem can be reproduced as follows: % curl --reso Upstream-commit: dbd32f3241b297b96ee11a51da1a661f528ca026 Signed-off-by: Kamil Dudka --- scripts/zsh.pl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/zsh.pl b/scripts/zsh.pl index 1257190..941b322 100755 --- a/scripts/zsh.pl +++ b/scripts/zsh.pl @@ -7,7 +7,7 @@ use warnings; my $curl = $ARGV[0] || 'curl'; -my $regex = '\s+(?:(-[^\s]+),\s)?(--[^\s]+)\s([^\s.]+)?\s+(.*)'; +my $regex = '\s+(?:(-[^\s]+),\s)?(--[^\s]+)\s*(\<.+?\>)?\s+(.*)'; my @opts = parse_main_opts('--help', $regex); my $opts_str; -- 2.17.2 From 45abc785e101346f19599aa5f9fa1617e525ec4d Mon Sep 17 00:00:00 2001 From: Alessandro Ghedini Date: Tue, 5 Feb 2019 21:06:26 +0000 Subject: [PATCH 2/2] zsh.pl: escape ':' character ':' is interpreted as separator by zsh, so if used as part of the argument or option's description it needs to be escaped. The problem can be reproduced as follows: % curl -E Bug: https://bugs.debian.org/921452 Upstream-commit: b3cc8017b7364f588365be2b2629c49c142efdb7 Signed-off-by: Kamil Dudka --- scripts/zsh.pl | 3 +++ 1 file changed, 3 insertions(+) diff --git a/scripts/zsh.pl b/scripts/zsh.pl index 941b322..0f9cbec 100755 --- a/scripts/zsh.pl +++ b/scripts/zsh.pl @@ -45,9 +45,12 @@ sub parse_main_opts { my $option = ''; + $arg =~ s/\:/\\\:/g if defined $arg; + $desc =~ s/'/'\\''/g if defined $desc; $desc =~ s/\[/\\\[/g if defined $desc; $desc =~ s/\]/\\\]/g if defined $desc; + $desc =~ s/\:/\\\:/g if defined $desc; $option .= '{' . trim($short) . ',' if defined $short; $option .= trim($long) if defined $long; -- 2.17.2