Files
NetworkManager/cli/completion/nmcli
Thomas Haller e2f77d30b1 cli: make bash-completion for nmcli support more abbreviations.
Also sub commands can be abbreviated. Add some more aliases to the bash
completion.

Also fix the option 'nmcli radio mobile' which is called 'wwan'.

Signed-off-by: Thomas Haller <thaller@redhat.com>
2013-08-13 14:17:44 +02:00

347 lines
11 KiB
Bash

# nmcli(1) completion -*- shell-script -*-
# Originally based on
# https://github.com/GArik/bash-completion/blob/master/completions/nmcli
_nmcli_list()
{
COMPREPLY=( $( compgen -W '$1' -- $cur ) )
}
_nmcli_list_nl()
{
local IFS=$'\n'
COMPREPLY=( $( compgen -W '$1' -- $cur ) )
}
_nmcli_con_id()
{
echo "$(nmcli -t -f NAME con show c 2>/dev/null)"
}
_nmcli_con_uuid()
{
echo "$(nmcli -t -f UUID con show c 2>/dev/null)"
}
_nmcli_con_path()
{
echo "$(nmcli -t -f DBUS-PATH con show c 2>/dev/null)"
}
_nmcli_con_apath()
{
echo "$(nmcli -t -f DBUS-PATH con show a 2>/dev/null)"
}
_nmcli_ap_ssid()
{
echo "$(nmcli -t -f SSID dev wifi list 2>/dev/null)"
# without quotes
#ssids="$(nmcli -t -f SSID dev wifi list 2>/dev/null)"
#local IFS=$'\n'
#for ssid in $ssids; do
# temp="${ssid%\'}"
# temp="${temp#\'}"
# echo "$temp"
#done
}
_nmcli_ap_bssid()
{
echo "$(nmcli -e no -t -f BSSID dev wifi list 2>/dev/null)"
}
_nmcli_NM_devices()
{
echo "$(nmcli -t -f DEVICE dev status 2>/dev/null)"
}
_nmcli_NM_dev_MAC()
{
echo "$(nmcli -t dev show | grep HWADDR | cut -d':' -f2- | sort | uniq)"
}
_nmcli()
{
local cur prev words cword
_init_completion || return
case $prev in
-m|--mode)
_nmcli_list "tabular multiline"
return 0
;;
-f|--fields)
_nmcli_list "all common"
return 0
;;
-e|--escape)
_nmcli_list "yes no"
return 0
;;
id)
_nmcli_list_nl "$(_nmcli_con_id)"
return 0
;;
uuid)
_nmcli_list_nl "$(_nmcli_con_uuid)"
return 0
;;
path)
_nmcli_list_nl "$(_nmcli_con_path)"
return 0
;;
apath)
_nmcli_list_nl "$(_nmcli_con_apath)"
return 0
;;
iface | ifname)
#_available_interfaces
_nmcli_list_nl "$(_nmcli_NM_devices)"
return 0
;;
bssid)
_nmcli_list_nl "$(_nmcli_ap_bssid)"
return 0
;;
wep-key-type)
_nmcli_list "key phrase"
return 0
;;
autoconnect | stp | hairpin | private)
_nmcli_list "yes no"
return 0
;;
# connection types
type)
_nmcli_list "ethernet wifi wimax gsm cdma infiniband adsl bluetooth vpn \
olpc-mesh vlan bond bridge bond-slave bridge-slave"
return 0
;;
# VPN types
vpn-type)
_nmcli_list "vpn-type vpnc openvpn pptp openconnect openswan"
return 0
;;
# Bluetooth modes
bt-type)
_nmcli_list "panu dun-gsm dun-cdma"
return 0
;;
# InfiniBand transport modes
transport-mode)
_nmcli_list "datagram connected"
return 0
;;
# bonding modes
mode)
_nmcli_list "balance-rr active-backup balance-xor broadcast \
802.3ad balance-tlb balance-alb"
return 0
;;
# MAC addresses
mac)
_mac_addresses
return 0
;;
# master interface
master)
UUIDS=$(_nmcli_con_uuid)
DEVICES=$(_nmcli_NM_devices)
_nmcli_list "$DEVICES $UUIDS"
return 0
;;
esac
if [[ $cword -eq 1 ]] ; then
if [[ "$cur" == -* ]]; then
if [[ "$cur" == -[tpmfenavh] ]]; then
_nmcli_list "-t -p -m -f -e -n -a -v -h"
else
_nmcli_list "--terse --pretty --mode --fields --escape --nocheck --ask --version --help"
fi
else
_nmcli_list "general networking radio connection device"
fi
else
local object=${words[1]}
local command=${words[2]}
[[ $command == help ]] && return 0
case $object in
g|ge|gen|gene|gener|genera|general)
if [[ ${#words[@]} -gt 3 ]]; then
case $command in
s|st|sta|stat|statu|status | p|pe|per|perm|permi|permis|permiss|permissi|permissio|permission|permissions)
return 0
;;
l|lo|log|logg|loggi|loggin|logging)
_nmcli_list "level domains"
return 0
;;
esac
fi
_nmcli_list "status permissions logging help"
;;
n|ne|net|netw|netwo|networ|network|networki|networkin|networking)
if [[ ${#words[@]} -gt 3 ]]; then
case $command in
on | off)
return 0
;;
esac
fi
_nmcli_list "on off help"
;;
r|ra|rad|radi|radio)
if [[ ${#words[@]} -gt 3 ]]; then
case $command in
a|al|all | w|wi|wif|wifi | ww|wwa|wwan | wim|wima|wimax)
_nmcli_list "on off"
return 0
;;
esac
fi
_nmcli_list "all wifi wwan wimax help"
;;
c|co|con|conn|conne|connec|connect|connecti|connectio|connection)
if [[ ${#words[@]} -gt 3 ]]; then
case $command in
s|sh|sho|show)
local subcommand=${words[3]}
if [[ ${#words[@]} -gt 4 ]]; then
case $subcommand in
c|co|con|conf|confi|config|configu|configur|configure|configured)
_nmcli_list "id uuid path"
return 0
;;
a|ac|act|acti|activ|active)
_nmcli_list "id uuid path apath"
return 0
;;
esac
fi
_nmcli_list "configured active"
return 0
;;
u|up)
if [[ "$cur" == -* ]]; then
_nmcli_list "--nowait --timeout"
else
_nmcli_list "id uuid path iface ap nsp"
fi
return 0
;;
d|do|dow|down)
_nmcli_list "id uuid path apath"
return 0
;;
a|ad|add)
_nmcli_list "type con-name autoconnect ifname help"
return 0
;;
e|ed|edi|edit)
_nmcli_list "id uuid path type con-name"
return 0
;;
m|mo|mod|modi|modif|modify)
_nmcli_list_nl "$(_nmcli_con_id)"
return 0
;;
de|del|dele|delet|delete)
_nmcli_list "id uuid path"
return 0
;;
esac
fi
_nmcli_list "show up down add modify edit delete reload help"
;;
d|de|dev|devi|devic|device)
if [[ ${#words[@]} -gt 3 ]]; then
case $command in
sh|sho|show)
_nmcli_list_nl "$(_nmcli_NM_devices)"
return 0
;;
d|di|dis|disc|disco|discon|disconn|disconne|disconnec|disconnect)
if [[ "$cur" == -* ]]; then
_nmcli_list "--nowait --timeout"
else
_nmcli_list_nl "$(_nmcli_NM_devices)"
fi
return 0
;;
w|wi|wif|wifi)
local subcommand=${words[3]}
case $subcommand in
l|li|lis|list)
_nmcli_list "iface bssid"
return 0
;;
c|co|con|conn|conne|connec|connect)
if [[ "$cur" == -* ]]; then
_nmcli_list "--private --nowait --timeout"
else
if [[ "$prev" == "connect" ]]; then
_nmcli_list_nl "$(_nmcli_ap_ssid)"
else
_nmcli_list "password wep-key-type iface bssid name"
fi
fi
return 0
;;
r|re|res|resc|resca|rescan)
if [[ "$cur" == i* ]]; then
_nmcli_list "iface"
else
_nmcli_list_nl "$(_nmcli_NM_devices)"
fi
return 0
;;
esac
_nmcli_list "list connect scan"
return 0
;;
wim|wima|wimax)
local subcommand=${words[3]}
if [[ ${#words[@]} -gt 4 ]]; then
case $subcommand in
l|li|lis|list)
_nmcli_list "iface nsp"
return 0
;;
esac
fi
_nmcli_list "list"
return 0
;;
esac
fi
_nmcli_list "status show disconnect wifi wimax help"
;;
esac
fi
return 0
} &&
complete -F _nmcli nmcli
# ex: ts=4 sw=4 et filetype=sh