From 7784a5f23c3a355445e76fce671e53c16e0ea5ed Mon Sep 17 00:00:00 2001 From: Fabian Homborg Date: Thu, 14 Mar 2019 12:39:47 +0100 Subject: [PATCH] __fish_describe_command: Remove awk This is really the only important place we're using it. See #5553. --- share/functions/__fish_describe_command.fish | 20 ++++---------------- 1 file changed, 4 insertions(+), 16 deletions(-) diff --git a/share/functions/__fish_describe_command.fish b/share/functions/__fish_describe_command.fish index 7fb334d78..e11d49b0c 100644 --- a/share/functions/__fish_describe_command.fish +++ b/share/functions/__fish_describe_command.fish @@ -3,20 +3,8 @@ # 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 - 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]\)/ ) { - sub( "( |\t)*\\\([18]\\\)", "", names[name] ); - sub( " \\\[.*\\\]", "", names[name] ); - print names[name] "\t" $2; - } - }' + command -sq apropos; or return + # Some systems could use -s 1,8 here, but FreeBSD doesn't have that. + apropos $argv 2>/dev/null | string replace -rf '^(\S+) \(\S+\)\s+- (.*)' '$1\t$2' \ + | string match (string replace -a '*' '\*' -- "$argv")"*" end -