From 5510443f4887806e4ff9594f6b16359f0506d54b Mon Sep 17 00:00:00 2001 From: Mahmoud Al-Qudsi Date: Mon, 17 Feb 2020 18:23:56 -0600 Subject: [PATCH] __fish_describe_command: Remove regex escape hack --- share/functions/__fish_describe_command.fish | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/share/functions/__fish_describe_command.fish b/share/functions/__fish_describe_command.fish index d41598b4d..72bd3601f 100644 --- a/share/functions/__fish_describe_command.fish +++ b/share/functions/__fish_describe_command.fish @@ -20,16 +20,13 @@ if test (uname) = Darwin end function __fish_describe_command -d "Command used to find descriptions for commands" - # We're going to try to build a regex out of $argv inside awk. - # Make sure $argv has no special characters. - # TODO: stop interpolating argv into regex, and remove this hack. - string match --quiet --regex '^[a-zA-Z0-9_ ]+$' -- "$argv" - or return + # $argv will be inserted directly into the awk regex, so it must be escaped + set -l argv_regex (string escape --style=regex "$argv") type -q apropos; or return apropos $argv 2>/dev/null | awk -v FS=" +- +" '{ split($1, names, ", "); for (name in names) - if (names[name] ~ /^'"$argv"'.* *\([18]\)/ ) { + if (names[name] ~ /^'"$argv_regex"'.* *\([18]\)/ ) { sub( "( |\t)*\\\([18]\\\)", "", names[name] ); sub( " \\\[.*\\\]", "", names[name] ); print names[name] "\t" $2;