diff --git a/share/completions/nmcli.fish b/share/completions/nmcli.fish index f1481d8bb..d2614b28a 100644 --- a/share/completions/nmcli.fish +++ b/share/completions/nmcli.fish @@ -1,3 +1,42 @@ +function __fish_nmcli_list_field_values + set -l command + set -l description + + for i in $argv + switch $i + case id + set command "nmcli -g NAME connection show" + set description "Connection name" + case uuid + set command "nmcli -g UUID connection show" + set description "Connection UUID" + case path + set command "nmcli -g DBUS-PATH connection show" + set description "D-Bus static connection path" + case apath + set command "nmcli -g ACTIVE-PATH connection show --active" + set description "D-Bus active connection path" + case ifname + set command "nmcli -g DEVICE device status" + set description "Interface name" + case ssid + set command "nmcli -g SSID device wifi list" + set description "SSID" + case bssid + set command "nmcli -g BSSID device wifi list" + set description "BSSID" + case '*' + return 1 + end + + if $command | string length -q + printf '%s\n' ($command | string trim | string replace -rf '^(.+)$' '$1\t'$description'') + else + printf '%s\t%s\n' $i $description + end + end +end + set -l nmcli_commands general networking radio connection device agent monitor help set -l nmcli_general status hostname permissions logging help set -l nmcli_networking on off connectivity help @@ -47,33 +86,42 @@ complete -c nmcli -n "__fish_seen_subcommand_from connection; and not __fish_see complete -c nmcli -n "__fish_seen_subcommand_from connection; and not __fish_seen_subcommand_from $nmcli_connection" -xa "edit" -d "Interactive edit" complete -c nmcli -n "contains_seq connection show -- (commandline -op)" -l active -d 'List only active profiles' complete -c nmcli -n "contains_seq connection show -- (commandline -op)" -l order -d 'Custom connection ordering' -complete -c nmcli -n "contains_seq connection show -- (commandline -op)" -xa 'id uuid path apath help' -complete -c nmcli -n "contains_seq connection up -- (commandline -op)" -xa 'id uuid path ifname help' -complete -c nmcli -n "contains_seq connection up -- (commandline -op)" -xa 'ap' -d 'Specify AP to connect to (only for Wi-Fi)' +complete -c nmcli -n "contains_seq connection show -- (commandline -op)" -xa '(__fish_nmcli_list_field_values id uuid path apath) help' +complete -c nmcli -n "contains_seq connection up -- (commandline -op)" -xa '(__fish_nmcli_list_field_values id uuid path) ifname ap help' +complete -c nmcli -n "contains_seq connection up ifname -- (commandline -op)" -xa '(__fish_nmcli_list_field_values ifname)' +complete -c nmcli -n "contains_seq connection up ap -- (commandline -op)" -xa '(__fish_nmcli_list_field_values bssid)' complete -c nmcli -n "contains_seq connection up -- (commandline -op)" -xa 'nsp' -d 'Specify NSP to connect to (only for WiMAX)' complete -c nmcli -n "contains_seq connection up -- (commandline -op)" -xa 'passwd-file' -d 'password file to activate the connection' -complete -c nmcli -n "contains_seq connection down -- (commandline -op)" -xa 'id uuid path apath help' +complete -c nmcli -n "contains_seq connection down -- (commandline -op)" -xa '(__fish_nmcli_list_field_values id uuid path apath) help' complete -c nmcli -n "contains_seq connection add -- (commandline -op)" -xa 'type ifname con-name autoconnect save master slave-type help' +complete -c nmcli -n "contains_seq connection add ifname -- (commandline -op)" -xa '(__fish_nmcli_list_field_values ifname)' complete -c nmcli -n "contains_seq connection modify -- (commandline -op)" -l temporary -complete -c nmcli -n "contains_seq connection modify -- (commandline -op)" -xa 'id uuid path help' +complete -c nmcli -n "contains_seq connection modify -- (commandline -op)" -xa '(__fish_nmcli_list_field_values id uuid path) help' complete -c nmcli -n "contains_seq connection clone -- (commandline -op)" -l temporary -complete -c nmcli -n "contains_seq connection clone -- (commandline -op)" -xa 'id uuid path help' -complete -c nmcli -n "contains_seq connection edit -- (commandline -op)" -xa 'id uuid path type help' +complete -c nmcli -n "contains_seq connection clone -- (commandline -op)" -xa '(__fish_nmcli_list_field_values id uuid path) help' +complete -c nmcli -n "contains_seq connection edit -- (commandline -op)" -xa '(__fish_nmcli_list_field_values id uuid path) type help' complete -c nmcli -n "contains_seq connection edit type -- (commandline -op)" -xa 'con-name' -complete -c nmcli -n "contains_seq connection delete -- (commandline -op)" -xa 'id uuid path help' -complete -c nmcli -n "contains_seq connection monitor -- (commandline -op)" -xa 'id uuid path help' +complete -c nmcli -n "contains_seq connection delete -- (commandline -op)" -xa '(__fish_nmcli_list_field_values id uuid path) help' +complete -c nmcli -n "contains_seq connection monitor -- (commandline -op)" -xa '(__fish_nmcli_list_field_values id uuid path) help' complete -c nmcli -n "contains_seq connection import -- (commandline -op)" -l temporary complete -c nmcli -n "contains_seq connection import -- (commandline -op)" -xa 'type file help' -complete -c nmcli -n "contains_seq connection export -- (commandline -op)" -xa 'id uuid path help' +complete -c nmcli -n "contains_seq connection export -- (commandline -op)" -xa '(__fish_nmcli_list_field_values id uuid path) help' set -l wifi_commands list connect hotspot rescan help complete -c nmcli -n "__fish_seen_subcommand_from device; and not __fish_seen_subcommand_from $nmcli_device" -xa "$nmcli_device" complete -c nmcli -n "contains_seq device set -- (commandline -op)" -xa 'ifname autoconnect managed' complete -c nmcli -n "contains_seq device wifi -- (commandline -op); and not __fish_seen_subcommand_from $wifi_commands" -xa "$wifi_commands" complete -c nmcli -n "contains_seq device wifi list -- (commandline -op)" -xa 'ifname bssid' -complete -c nmcli -n "contains_seq device wifi connect -- (commandline -op)" -xa 'password wep-key-type ifname bssid name private hidden' +complete -c nmcli -n "contains_seq device wifi list ifname -- (commandline -op)" -xa '(__fish_nmcli_list_field_values ifname)' +complete -c nmcli -n "contains_seq device wifi list bssid -- (commandline -op)" -xa '(__fish_nmcli_list_field_values bssid)' +complete -c nmcli -n "contains_seq device wifi connect -- (commandline -op)" -xa '(__fish_nmcli_list_field_values ssid bssid) password wep-key-type ifname bssid name private hidden' +complete -c nmcli -n "contains_seq device wifi connect ifname -- (commandline -op)" -xa '(__fish_nmcli_list_field_values ifname)' +complete -c nmcli -n "contains_seq device wifi connect bssid -- (commandline -op)" -xa '(__fish_nmcli_list_field_values bssid)' complete -c nmcli -n "contains_seq device wifi hotspot -- (commandline -op)" -xa 'ifname con-name ssid band channel password' +complete -c nmcli -n "contains_seq device wifi hotspot ifname -- (commandline -op)" -xa '(__fish_nmcli_list_field_values ifname)' complete -c nmcli -n "contains_seq device wifi rescan -- (commandline -op)" -xa 'ifname ssid' +complete -c nmcli -n "contains_seq device wifi rescan ifname -- (commandline -op)" -xa '(__fish_nmcli_list_field_values ifname)' +complete -c nmcli -n "contains_seq device wifi rescan ssid -- (commandline -op)" -xa '(__fish_nmcli_list_field_values ssid)' complete -c nmcli -n "contains_seq device lldp -- (commandline -op)" -xa 'list' complete -c nmcli -n "__fish_seen_subcommand_from agent; and not __fish_seen_subcommand_from $nmcli_agent" -xa "secret" -d "Register nmcli as NM secret agent"