mirror of
https://github.com/fish-shell/fish-shell.git
synced 2024-12-18 12:33:38 +08:00
0c4dab54f1
Closes #960. Uses pattern matching rather than OS detection. Works with BSD awk, GNU awk and Solaris' nawk.
54 lines
1.1 KiB
Fish
54 lines
1.1 KiB
Fish
|
|
function __fish_complete_man
|
|
if test (commandline -ct)
|
|
|
|
# Try to guess what section to search in. If we don't know, we
|
|
# use [^)]*, which should match any section
|
|
|
|
set section ""
|
|
set prev (commandline -poc)
|
|
set -e prev[1]
|
|
while count $prev
|
|
switch $prev[1]
|
|
case '-**'
|
|
|
|
case '*'
|
|
set section $prev[1]
|
|
end
|
|
set -e prev[1]
|
|
end
|
|
|
|
set section $section"[^)]*"
|
|
|
|
# Do the actual search
|
|
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
|
|
|