diff options
Diffstat (limited to 'completions/_nmcli')
-rw-r--r-- | completions/_nmcli | 201 |
1 files changed, 201 insertions, 0 deletions
diff --git a/completions/_nmcli b/completions/_nmcli new file mode 100644 index 0000000..eac285b --- /dev/null +++ b/completions/_nmcli @@ -0,0 +1,201 @@ +# nmcli completion -*- shell-script -*- + +# Use of this file is deprecated. Upstream completion is available in +# NetworkManager >= 0.9.8.0, use that instead. + +_nmcli_list() +{ + COMPREPLY=($(compgen -W '$1' -- "$cur")) +} + +_nmcli_con_id() +{ + local IFS=$'\n' + COMPREPLY=($(compgen -W "$(nmcli con list 2>/dev/null | + tail -n +2 | awk -F ' {2,}' '{print $1 }')" -- "$cur")) +} + +_nmcli_con_uuid() +{ + COMPREPLY=($(compgen -W "$(nmcli con list 2>/dev/null | + tail -n +2 | awk -F ' {2,}' '{print $2}')" -- "$cur")) +} + +_nmcli_ap_ssid() +{ + local IFS=$'\n' + COMPREPLY=($(compgen -W "$(nmcli dev wifi list 2>/dev/null | + tail -n +2 | awk -F ' {2,}' '{print $1}')" -- "$cur")) +} + +_nmcli_ab_bssid() +{ + COMPREPLY=($(compgen -W "$(nmcli dev wifi list 2>/dev/null | + tail -n +2 | awk -F ' {2,}' '{print $2}')" -- "$cur")) +} + +_nmcli() +{ + local cur prev words cword + _init_completion || return + + case $prev in + -m | --mode) + COMPREPLY=($(compgen -W 'tabular multiline' -- "$cur")) + return + ;; + -f | --fields) + COMPREPLY=($(compgen -W 'all common' -- "$cur")) + return + ;; + -e | --escape) + _nmcli_list "yes no" + return + ;; + id) + _nmcli_con_id + return + ;; + uuid) + _nmcli_con_uuid + return + ;; + iface) + _available_interfaces + return + ;; + bssid) + _nmcli_ab_bssid + return + ;; + wep-key-type) + _nmcli_list "key phrase" + return + ;; + esac + + if ((cword == 1)); then + if [[ $cur == -* ]]; then + COMPREPLY=($(compgen -W '--terse --pretty --mode --fields + --escape --version --help' -- "$cur")) + else + COMPREPLY=($(compgen -W "nm con dev" -- "$cur")) + fi + else + local object=${words[1]} + local command=${words[2]} + + case $object in + nm) + case $command in + enable) + _nmcli_list "true false" + return + ;; + sleep) + _nmcli_list "true false" + return + ;; + wifi) + _nmcli_list "on off" + return + ;; + wwan) + _nmcli_list "on off" + return + ;; + wimax) + _nmcli_list "on off" + return + ;; + esac + + COMPREPLY=($(compgen -W 'status permissions enable sleep + wifi wwan wimax' -- "$cur")) + ;; + con) + case $command in + list) + COMPREPLY=($(compgen -W 'id uuid' -- "$cur")) + return + ;; + up) + if [[ $cur == -* ]]; then + COMPREPLY=($(compgen -W '--nowait --timeout' \ + -- "$cur")) + else + COMPREPLY=($(compgen -W 'id uuid iface ap nsp' \ + -- "$cur")) + fi + return + ;; + down) + COMPREPLY=($(compgen -W 'id uuid' -- "$cur")) + return + ;; + delete) + COMPREPLY=($(compgen -W 'id uuid' -- "$cur")) + return + ;; + esac + + COMPREPLY=($(compgen -W 'list status up down delete' \ + -- "$cur")) + ;; + dev) + case $command in + list) + COMPREPLY=($(compgen -W 'iface' -- "$cur")) + return + ;; + disconnect) + if [[ $cur == -* ]]; then + COMPREPLY=($(compgen -W '--nowait --timeout' \ + -- "$cur")) + else + COMPREPLY=($(compgen -W 'iface' -- "$cur")) + fi + return + ;; + wifi) + local subcommand=${words[3]} + + case $subcommand in + list) + COMPREPLY=($(compgen -W 'iface bssid' \ + -- "$cur")) + return + ;; + connect) + if [[ $cur == -* ]]; then + COMPREPLY=($(compgen -W '--private + --nowait --timeout' -- "$cur")) + else + if [[ $prev == "connect" ]]; then + _nmcli_ap_ssid + else + COMPREPLY=($(compgen -W 'password + wep-key-type iface bssid name' \ + -- "$cur")) + fi + fi + return + ;; + esac + + COMPREPLY=($(compgen -W 'list connect' -- "$cur")) + return + ;; + esac + + COMPREPLY=($(compgen -W 'status list disconnect wifi' \ + -- "$cur")) + ;; + esac + + fi + +} && + complete -F _nmcli nmcli + +# ex: filetype=sh |