From 46911a5e7f04031150a11357360a01a66c26328e Mon Sep 17 00:00:00 2001 From: Fabian Homborg Date: Fri, 19 Apr 2019 20:57:45 +0200 Subject: [PATCH] Revert "__fish_describe_command: Remove awk" Dealing with macOS output in a fast manner using `string` is surprisingly hard, given that it features lines like gls(1), ls(1) - list directory contents Printing the "gls" with the description and the "ls" with the description requires a `while read` loop, and that's too slow. This reverts commit 7784a5f23c3a355445e76fce671e53c16e0ea5ed. [ci skip] --- share/functions/__fish_describe_command.fish | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/share/functions/__fish_describe_command.fish b/share/functions/__fish_describe_command.fish index e11d49b0c..7fb334d78 100644 --- a/share/functions/__fish_describe_command.fish +++ b/share/functions/__fish_describe_command.fish @@ -3,8 +3,20 @@ # function __fish_describe_command -d "Command used to find descriptions for commands" - 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")"*" + # 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; + } + }' end +