summaryrefslogtreecommitdiffstats
path: root/whois.bash
blob: 1f7291fc72de77507300733c32296bda8c400449 (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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
_whois_query() {
	"$1" -q "$2" 2>/dev/null | while read -r item _; do
		[[ $item == %* ]] && continue
		printf "%s\n" "${item%%:*}"
	done
}

_whois_hosts() {
	# _known_hosts_real from github.com/scop/bash-completion if available
	if declare -f _known_hosts_real &>/dev/null; then
		_known_hosts_real -- "$1"
		return 0
	fi
	COMPREPLY=($(compgen -A hostname -- "$1"))
}

_whois() {

	case $3 in
	--help | --version | -p | --port | -i)
		return 0
		;;
	-h | --host)
		_whois_hosts "$2"
		return 0
		;;
	-T | -t | -v)
		[[ ${_whois_types-} ]] ||
			_whois_types=" $(_whois_query "$1" types)"
		COMPREPLY=($(compgen -W '$_whois_types' -- "$2"))
		return 0
		;;
	-s | -g)
		[[ ${_whois_sources-} ]] ||
			_whois_sources=" $(_whois_query "$1" sources)"
		COMPREPLY=($(compgen -W '$_whois_sources' -- "$2"))
		if [[ $3 == -g ]]; then
			[[ ${#COMPREPLY[*]} -eq 1 ]] && COMPREPLY[0]+=:
			compopt -o nospace
		fi
		return 0
		;;
	-q)
		COMPREPLY=($(compgen -W 'version sources types' -- "$2"))
		return 0
		;;
	esac

	if [[ $2 == -* ]]; then
		COMPREPLY=($(compgen -W '
			-h --host
			-p --port
			-I
			-H
			--verbose
			--no-recursion
			--help
			--version
			-l
			-L
			-m
			-M
			-c
			-x
			-b
			-B
			-G
			-d
			-i
			-T
			-K
			-r
			-R
			-a
			-s
			-g
			-t
			-v
			-q
		' -- "$2"))
		return 0
	fi

	_whois_hosts "$2"

} && complete -F _whois whois