File: foomuuri-bash-completion

package info (click to toggle)
foomuuri 0.31-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 776 kB
  • sloc: python: 3,470; makefile: 112; sh: 39
file content (93 lines) | stat: -rw-r--r-- 2,397 bytes parent folder | download | duplicates (2)
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
87
88
89
90
91
92
93
# Foomuuri completion                              -*- shell-script -*-

_comp_cmd_foomuuri()
{
    local cur prev words cword was_split comp_args
    _comp_initialize -s -- "$@" || return

    local option_count=0
    for word in "${words[@]}"; do
	if [[ "${word}" == --* ]]; then
	    option_count=$((option_count+1))
	fi
    done

    case $((cword-option_count)) in
	1)
	    _comp_compgen -- -W "help start stop reload try-reload status check block list iplist set"
	    ;;
	2)
	    case ${prev} in
		list)
		    zones=$(foomuuri --quiet --quiet status | sed '/^  /!d; s/^  //; s/ .*//')
		    if [[ ${cur} =~ "-" ]]; then
			for szone in ${zones}; do
			    for dzone in ${zones}; do
				_comp_compgen -a -- -W "${szone}-${dzone}"
			    done
			done
		    else
			_comp_compgen -- -W "\"macro \" \"counter \""
			for zone in ${zones}; do
			    _comp_compgen -a -- -W "${zone}-"
			done
			compopt -o nospace
		    fi
		    ;;
		iplist)
		    _comp_compgen -- -W "list add del flush refresh"
		    ;;
		set)
		    _comp_compgen -- -W "interface"
		    ;;
	    esac
	    ;;
	3)
	    case ${prev} in
		counter)  # list
		    counters=$(foomuuri --quiet --quiet list counter | sed 's/ .*//')
		    _comp_compgen -- -W "${counters}"
		    ;;
		macro)  # list
		    macros=$(foomuuri --quiet --quiet list macro | sed '/^  /!d; s/^  //; s/ .*//')
		    _comp_compgen -- -W "${macros}"
		    ;;
		list | add | del | flush | refresh)  # iplist
		    iplists=$(foomuuri --quiet --quiet iplist list | sed 's/ .*//')
		    _comp_compgen -- -W "${iplists}"
		    ;;
		interface)  # set
		    interfaces=$(ip link show | sed '/^[0-9]\+: /!d; s/[0-9]\+: //; /lo:/d; s/:.*//')
		    _comp_compgen -- -W "${interfaces}"
		    ;;
	    esac
	    ;;
	4)
	    interfaces=$(ip link show | sed '/^[0-9]\+: /!d; s/[0-9]\+: //; /lo:/d; s/:.*//')
	    for intf in ${interfaces}; do
		if [ "${prev}" = "${intf}" ]; then
		    _comp_compgen -- -W "zone"
		fi
	    done
	    ;;
	5)
	    case ${prev} in
		zone)
		    zones=$(foomuuri --quiet --quiet status | sed '/^  /!d; s/^  //; s/ .*//')
		    _comp_compgen -- -W "${zones} -"
		    return  # "-" is not an option
		    ;;
	    esac
	    ;;
    esac

    [[ ${was_split} ]] && return

    if [[ ${cur} == -* ]]; then
        _comp_compgen_help
	[[ ${COMPREPLY-} == *= ]] && compopt -o nospace
    fi

} && complete -F _comp_cmd_foomuuri foomuuri

# ex: filetype=sh