aboutsummaryrefslogtreecommitdiffhomepage
path: root/share/functions/__fish_complete_man.fish
blob: 59c8c24ebe37834fe06c18fab577cbf46b30b1a7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53

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