From 0c4dab54f1544dff96c0e2d01f4c661e07f7fa49 Mon Sep 17 00:00:00 2001 From: David Adam Date: Wed, 27 Nov 2013 17:58:43 +0800 Subject: [PATCH] __fish_complete_man: Use awk to parse output of apropos Closes #960. Uses pattern matching rather than OS detection. Works with BSD awk, GNU awk and Solaris' nawk. --- share/functions/__fish_complete_man.fish | 28 +++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/share/functions/__fish_complete_man.fish b/share/functions/__fish_complete_man.fish index a5e4fa40f..59c8c24eb 100644 --- a/share/functions/__fish_complete_man.fish +++ b/share/functions/__fish_complete_man.fish @@ -21,7 +21,33 @@ function __fish_complete_man set section $section"[^)]*" # Do the actual search - apropos (commandline -ct) ^/dev/null | sgrep \^(commandline -ct) | sed -n -e 's/\([^ ]*\).*(\('$section'\)) *- */\1'\t'\2: /p' + apropos (commandline -ct) ^/dev/null | awk ' + BEGIN { FS="[\t ]- "; OFS="\t"; } + # BSD/Darwin + /^[^( \t]+\('$section'\)/ { + split($1, pages, ", "); + for (i in pages) { + page = pages[i]; + sub(/[ \t]+/, "", page); + paren = index(page, "("); + name = substr(page, 1, paren - 1); + sect = substr(page, paren + 1, length(page) - paren - 1); + print name, sect ": " $2; + } + } + # Linux + /^[^( \t]+ \('$section'\)/ { + split($1, t, " "); + sect = substr(t[2], 2, length(t[2]) - 2); + print t[1], sect ": " $2; + } + # Solaris + /^[^( \t]+\t+[^\(\t]/ { + split($1, t, " "); + sect = substr(t[3], 2, length(t[3]) - 2); + print t[2], sect ": " $2; + } + ' end end