summary refs log tree commit diff
diff options
context:
space:
mode:
authorPeter Stephenson <pws@users.sourceforge.net>2011-11-08 09:51:31 +0000
committerPeter Stephenson <pws@users.sourceforge.net>2011-11-08 09:51:31 +0000
commit970adcc4d0e9f2ab08439d9db43076e02885553b (patch)
tree2e417ec84884f05473daca08a77f51c29951409d
parentb337296b933b076ffcd9c39b7036847c92cb0a11 (diff)
downloadzsh-970adcc4d0e9f2ab08439d9db43076e02885553b.tar.gz
zsh-970adcc4d0e9f2ab08439d9db43076e02885553b.tar.xz
zsh-970adcc4d0e9f2ab08439d9db43076e02885553b.zip
Haakon Riiser: 29895, 29897: _ffmpeg, _nmcli
-rw-r--r--ChangeLog9
-rw-r--r--Completion/Linux/Command/.distfiles1
-rw-r--r--Completion/Linux/Command/_nmcli244
-rw-r--r--Completion/Unix/Command/_ffmpeg13
4 files changed, 266 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index 66347ea1a..e712811a5 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2011-11-08  Peter Stephenson  <pws@csr.com>
+
+	* Haakon Riiser: 29895, 29887: Completion/Unix/Command/_ffmpeg,
+	Completion/Linux/Command/_nmcli (plus
+	Completion/Linux/Command/.distfiles): update and new
+	NetworkManager client completion.
+
 2011-11-07  Simon Ruderich  <simon@ruderich.org>
 
 	* 29893: Completion/Unix/Command/_ssh: Update (mostly) for 5.9.
@@ -15552,5 +15559,5 @@
 
 *****************************************************
 * This is used by the shell to define $ZSH_PATCHLEVEL
-* $Revision: 1.5495 $
+* $Revision: 1.5496 $
 *****************************************************
diff --git a/Completion/Linux/Command/.distfiles b/Completion/Linux/Command/.distfiles
index 941e2de3c..0d817fc5d 100644
--- a/Completion/Linux/Command/.distfiles
+++ b/Completion/Linux/Command/.distfiles
@@ -18,6 +18,7 @@ _mdadm
 _mii-tool
 _modutils
 _mondo
+_nmcli
 _pkgtool
 _rpmbuild
 _schedtool
diff --git a/Completion/Linux/Command/_nmcli b/Completion/Linux/Command/_nmcli
new file mode 100644
index 000000000..a6b97a36c
--- /dev/null
+++ b/Completion/Linux/Command/_nmcli
@@ -0,0 +1,244 @@
+#compdef nmcli
+
+local context state line expl
+typeset -A opt_args
+
+if [[ -z $_nmcli_version ]]; then
+    _nmcli_version="${"$(_call_program nmcli $words[1] --version)"##*version }"
+fi
+
+(( $+functions[_nmcli_is_running] )) || _nmcli_is_running() {
+    [[ $(_call_program nmcli $words[1] -f running nm) != *'not running'* ]]
+}
+
+(( $+functions[_nmcli_con_ids] )) || _nmcli_con_ids() {
+    _nmcli_is_running || return
+    local -a con_ids
+    con_ids=(${(f)"$(_call_program nmcli $words[1] -f name con)"})
+    con_ids=(${con_ids[2,-2]})
+    con_ids=(${con_ids[@]%%\ ##})
+    _describe 'select connection' con_ids
+}
+
+(( $+functions[_nmcli_con_uuids] )) || _nmcli_con_uuids() {
+    _nmcli_is_running || return
+    local -a con_uuids
+    con_uuids=(${(f)"$(_call_program nmcli $words[1] -f uuid con)"})
+    con_uuids=(${con_uuids[2,-2]})
+    con_uuids=(${con_uuids[@]%%\ ##})
+    _describe 'select connection' con_uuids
+}
+ 
+(( $+functions[_nmcli_objects] )) || _nmcli_objects() {
+    local -a objects_array
+    objects_array=(
+        'nm:NetworkManager status'
+        'con:NetworkManager connections'
+        'dev:devices managed by NetworkManager'
+    )
+    _describe 'nmcli object' objects_array
+}
+
+(( $+functions[_nmcli_nm] )) || _nmcli_nm() {
+    local -a nm_array
+    nm_array=(
+        'status:show overall status of NetworkManager'
+        'enable:get status or enable/disable networking'
+        'sleep:get sleep status or put to sleep/awake NetworkManager'
+        'wifi:inquire or set status of WiFi in NetworkManager'
+        'wwan:inquire or set status of WWAN in NetworkManager'
+    )
+    _describe 'inquire and change state of NetworkManager' nm_array
+}
+
+(( $+functions[_nmcli_con] )) || _nmcli_con() {
+    local -a con_array
+    con_array=(
+        'list:list configured connections'
+        'status:print status of active connections'
+        'up:activate a connection'
+        'down:deactivate a connection'
+    )
+    if [[ $_nmcli_version == 0.9.[1-9]* ]]; then
+        con_array[5]="delete:delete a connection"
+    fi
+    _describe "get information about NetworkManager's connections" con_array
+}
+
+(( $+functions[_nmcli_con_list] )) || _nmcli_con_list() {
+    local -a con_list_array
+    con_list_array=(
+        'id:get details on connection specified by id'
+        'uuid:get details on connection specified by uuid'
+    )
+    if [[ $_nmcli_version == 0.8* ]]; then
+        con_list_array[3]='system:only list system connections'
+        con_list_array[4]='user:only list user connections'
+    fi
+    _describe 'list configured connections' con_list_array
+}
+
+(( $+functions[_nmcli_con_up] )) || _nmcli_con_up() {
+    local -a con_up_array
+    con_up_array=(
+        'id:activate connection specified by id'
+        'uuid:activate connection specified by uuid'
+    )
+    _describe 'activate connection by id or uuid' con_up_array
+}
+
+(( $+functions[_nmcli_con_down] )) || _nmcli_con_down() {
+    local -a con_down_array
+    con_down_array=(
+        'id:deactivate connection specified by id'
+        'uuid:deactivate connection specified by uuid'
+    )
+    _describe 'deactivate connection by id or uuid' con_down_array
+}
+
+(( $+functions[_nmcli_con_delete] )) || _nmcli_con_delete() {
+    local -a con_delete_array
+    con_delete_array=(
+        'id:delete connection specified by id'
+        'uuid:delete connection specified by uuid'
+    )
+    _describe 'delete connection by id or uuid' con_delete_array
+}
+
+(( $+functions[_nmcli_con_up_extraargs] )) || _nmcli_con_up_extraargs() {
+    local -a con_up_extraargs_array
+    con_up_extraargs_array=(
+        'iface:require a particular interface'
+        'ap:require a specific access point'
+        '--nowait:don''t wait for command completion'
+        '--timeout:specify how long to wait for operation to complete'
+    )
+    _describe 'extra options for "con up"' con_up_extraargs_array
+}
+
+(( $+functions[_nmcli_dev_disconnect_extraargs] )) || _nmcli_dev_disconnect_extraargs() {
+    local -a dev_disconnect_extraargs_array
+    dev_disconnect_extraargs_array=(
+        '--nowait:don''t wait for command completion'
+        '--timeout:specify how long to wait for operation to complete'
+    )
+    _describe 'extra options for "dev disconnect"' dev_disconnect_extraargs_array
+}
+
+(( $+functions[_nmcli_dev_wifi_list] )) || _nmcli_dev_wifi_list() {
+    local -a dev_wifi_list_array
+    dev_wifi_list_array=(
+        'iface:list APs for a particular interface'
+    )
+    if [[ $_nmcli_version == 0.8* || $_nmcli_version == 0.9.0* ]]; then
+        dev_wifi_list_array[2] = 'hwaddr:list a specific AP by MAC address'
+    elif [[ $_nmcli_version == 0.9.[1-9]* ]]; then
+        dev_wifi_list_array[2] = 'bssid:list a specific AP by BSSID'
+    fi
+    _describe 'options for specifying the AP to list' dev_wifi_list_array
+}
+
+(( $+functions[_nmcli_dev] )) || _nmcli_dev() {
+    local -a dev_array
+    dev_array=(
+        'status:print status of devices'
+        'list:get detailed information about devices'
+        'disconnect:disconnect device and prevent it from automatically activating'
+        'wifi:list available WiFi access points'
+    )
+    _describe "get information about devices" dev_array
+}
+
+(( $+functions[_nmcli_truefalse] )) || _nmcli_truefalse() {
+    _wanted boolean expl 'use true/false to modify (nothing = query status)' compadd true false
+}
+
+(( $+functions[_nmcli_onoff] )) || _nmcli_onoff() {
+    _wanted onoff expl 'use on/off to modify (nothing = query status)' compadd on off
+}
+
+local w1="${words[$#words - 1]}"
+local w2="${words[$#words - 2]}"
+local w3="${words[$#words - 3]}"
+local w4="${words[$#words - 4]}"
+
+if [[ $w2 == nm && $w1 == (sleep|enable) ]]; then
+    _nmcli_truefalse && return
+elif [[ $w2 == nm && $w1 == (wifi|wwan) ]]; then
+    _nmcli_onoff && return
+elif [[ $w1 == nm ]]; then
+    _nmcli_nm && return
+elif [[ $w3 == con && $w2 == list && $w1 == id ]]; then
+    _nmcli_con_ids && return
+elif [[ $w3 == con && $w2 == list && $w1 == uuid ]]; then
+    _nmcli_con_uuids && return
+elif [[ $w2 == con && $w1 == list ]]; then
+    _nmcli_con_list && return
+elif [[ $w3 == con && $w2 == (up|down) && $w1 == id ]]; then
+    _nmcli_con_ids && return
+elif [[ $_nmcli_version == 0.9.[1-9]* && $w3 == con && $w2 == delete && $w1 == id ]]; then
+    _nmcli_con_ids && return
+elif [[ $w3 == con && $w2 == (up|down) && $w1 == uuid ]]; then
+    _nmcli_con_uuids && return
+elif [[ $_nmcli_version == 0.9.[1-9]* && $w3 == con && $w2 == delete && $w1 == uuid ]]; then
+    _nmcli_con_uuids && return
+elif [[ ${(pj:\0:)words} == *$'\0con\0up\0'(id|uuid)$'\0'* ]]; then
+     if [[ $w1 == iface ]]; then
+         _net_interfaces && return
+     elif [[ $w1 == ap ]]; then
+         _message -e descriptions 'enter MAC address' && return
+     elif [[ $w1 == --timeout ]]; then
+         _message -e descriptions 'enter timeout' && return
+     else
+         _nmcli_con_up_extraargs && return
+     fi
+elif [[ $w2 == con && $w1 == up ]]; then
+    _nmcli_con_up && return
+elif [[ $w2 == con && $w1 == down ]]; then
+    _nmcli_con_down && return
+elif [[ $_nmcli_version == 0.9.[1-9]* && $w2 == con && $w1 == delete ]]; then
+    _nmcli_con_delete && return
+elif [[ $w1 == con ]]; then
+    _nmcli_con && return
+elif [[ $w3 == dev && $w2 == (list|disconnect) && $w1 == iface ]]; then
+    _net_interfaces && return
+elif [[ ${(pj:\0:)words} == *$'\0dev\0disconnect\0iface\0'* ]]; then
+     if [[ $w1 == --timeout ]]; then
+         _message -e descriptions 'enter timeout' && return
+     else
+         _nmcli_dev_disconnect_extraargs && return
+     fi
+elif [[ $w2 == dev && $w1 == list ]]; then
+    compadd iface && return
+elif [[ $w2 == dev && $w1 == disconnect ]]; then
+    compadd iface && return
+elif [[ $w4 == dev && $w3 == wifi && $w2 == list && $w1 == iface ]]; then
+    _net_interfaces && return
+elif [[ $w4 == dev && $w3 == wifi && $w2 == list && $w1 == hwaddr ]]; then
+    _message -e descriptions 'enter MAC address' && return
+elif [[ $w3 == dev && $w2 == wifi && $w1 == list ]]; then
+    _nmcli_dev_wifi_list && return
+elif [[ $w2 == dev && $w1 == wifi ]]; then
+    compadd list && return
+elif [[ $w1 == dev ]]; then
+    _nmcli_dev && return
+else
+    _arguments \
+      {'(--terse)-t','(-t)--terse'}'[terse output]' \
+      {'(--pretty)-p','(-p)--pretty'}'[pretty output]' \
+      {'(--mode)-m','(-m)--mode'}'[output mode]:output mode:(tabular multiline)' \
+      {'(--fields)-f','(-f)--fields'}'[specify fields to output]: :->fields' \
+      {'(--escape)-e','(-e)--escape'}'[escape columns separators in values]:escape columns separators in values:(yes no)' \
+      {'(--version)-v','(-v)--version'}'[show program version]' \
+      {'(--help)-h','(-h)--help'}'[print this help]' \
+      '*::nmcli object:_nmcli_objects' \
+      && return
+fi
+
+[[ "$state" == "fields" ]] &&
+ _values -s , 'fields to be printed' \
+   all common \
+   autoconnect dbus-path device name net-enabled readonly running \
+   scope state timestamp timestamp-real type uuid wifi wifi-hardware \
+   wwan wwan-hardware \
+   && return
diff --git a/Completion/Unix/Command/_ffmpeg b/Completion/Unix/Command/_ffmpeg
index 8f9b2c9cb..6a4ba234d 100644
--- a/Completion/Unix/Command/_ffmpeg
+++ b/Completion/Unix/Command/_ffmpeg
@@ -21,6 +21,12 @@ typeset -A opt_args
     _wanted ffmpeg-video-codecs expl 'force video codec (''copy'' to copy stream)' compadd -a vcodecs
 }
 
+(( $+functions[_ffmpeg_scodecs] )) || _ffmpeg_scodecs() {
+    local scodecs
+    scodecs=(copy ${${(M)${(f)"$(_call_program video-codecs $words[1] -codecs 2>/dev/null)"}:#[[:space:]][D[:space:]][E[:space:]]S[S[:space:]][D[:space:]][T[:space:]][[:space:]][^[:space:]]##*}//(#b)????????([^[:space:]]##)*/$match[1]})
+    _wanted ffmpeg-video-codecs expl 'force video codec (''copy'' to copy stream)' compadd -a scodecs
+}
+
 (( $+functions[_ffmpeg_formats] )) || _ffmpeg_formats() {
     local formats
     formats=(${(ou)${=${(s:,:)${${(M)${(f)"$(_call_program formats $words[1] -formats 2>/dev/null)"}:#[[:space:]][D[:space:]][E[:space:]][[:space:]][^[:space:]]##*}//(#b)????([^[:space:]]##)*/$match[1]}}}})
@@ -84,6 +90,7 @@ typeset -A _ffmpeg_flags
         lastopt+=":$lastopt_description:"
         if (( $#lastopt_values )); then
             if [[ $lastopt_type == flags ]]; then
+                lastopt="*$lastopt"
                 flagtype=${${lastopt%%:*}#-}
                 lastopt+="->$flagtype"
                 _ffmpeg_flags[$flagtype]="${lastopt_values[*]}"
@@ -125,6 +132,7 @@ local -a _ffmpeg_argspecs
                     lastopt+=":$lastopt_description:_files"
                 elif [[ $lastopt == -[asv]pre ]]; then
                     lastopt_takesargs=0
+                    lastopt="*$lastopt"
                     lastopt+=": :_ffmpeg_presets"
                 elif [[ $lastopt == -acodec ]]; then
                     lastopt_takesargs=0
@@ -132,11 +140,16 @@ local -a _ffmpeg_argspecs
                 elif [[ $lastopt == -vcodec ]]; then
                     lastopt_takesargs=0
                     lastopt+=": :_ffmpeg_vcodecs"
+                elif [[ $lastopt == -scodec ]]; then
+                    lastopt_takesargs=0
+                    lastopt+=": :_ffmpeg_scodecs"
                 elif [[ $lastopt == -f ]]; then
                     lastopt_takesargs=0
+                    lastopt="*$lastopt"
                     lastopt+=": :_ffmpeg_formats"
                 elif [[ $lastopt == -pix_fmt ]]; then
                     lastopt_takesargs=0
+                    lastopt="*$lastopt"
                     lastopt+=": :_ffmpeg_pix_fmts"
                 elif [[ $example == bitstream_filter ]]; then
                     lastopt_takesargs=0