Here's a new completion function for nmcli, the command line interface to Linux' Network Manager. I've tried to make it as complete as possible. It has been tested on version 0.8.5.92 that comes with Fedora 14. I have also tried to make it compatible with nmcli 0.9.0 and 0.9.1 (the latest version) by observing the differences in the man page. The man pages were almost unchanged, so it should work across all versions. Also, I've attached a patch for the FFmpeg completion function. Nothing major has changed, but there are a couple of fixes that are worth pushing upstream. -- Haakon
Index: _ffmpeg
===================================================================
RCS file: /cvsroot/zsh/zsh/Completion/Unix/Command/_ffmpeg,v
retrieving revision 1.5
diff -u -1 -0 -r1.5 _ffmpeg
--- _ffmpeg 3 May 2011 18:38:56 -0000 1.5
+++ _ffmpeg 7 Nov 2011 17:27:29 -0000
@@ -14,20 +14,26 @@
acodecs=(copy ${${(M)${(f)"$(_call_program audio-codecs $words[1] -codecs 2>/dev/null)"}:#[[:space:]][D[:space:]][E[:space:]]A[S[:space:]][D[:space:]][T[:space:]][[:space:]][^[:space:]]##*}//(#b)????????([^[:space:]]##)*/$match[1]})
_wanted ffmpeg-audio-codecs expl 'force audio codec (''copy'' to copy stream)' compadd -a acodecs
}
(( $+functions[_ffmpeg_vcodecs] )) || _ffmpeg_vcodecs() {
local vcodecs
vcodecs=(copy ${${(M)${(f)"$(_call_program video-codecs $words[1] -codecs 2>/dev/null)"}:#[[:space:]][D[:space:]][E[:space:]]V[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 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]}}}})
_wanted ffmpeg-formats expl 'force format' compadd -a formats
}
(( $+functions[_ffmpeg_list_pix_fmts] )) || _ffmpeg_list_pix_fmts() {
echo - ${${${(M)${(f)"$(_call_program formats $words[1] -pix_fmts 2>/dev/null)"}:#[I.][O.][H.][P.][B.] [^=[:space:]]*}#* }%% *}
}
@@ -77,20 +83,21 @@
fi
return $ret
}
(( $+functions[_ffmpeg_register_lastopt_values] )) || _ffmpeg_register_lastopt_values() {
if (( lastopt_takesargs )); then
lastopt+=":$lastopt_description:"
if (( $#lastopt_values )); then
if [[ $lastopt_type == flags ]]; then
+ lastopt="*$lastopt"
flagtype=${${lastopt%%:*}#-}
lastopt+="->$flagtype"
_ffmpeg_flags[$flagtype]="${lastopt_values[*]}"
else
lastopt+="(${lastopt_values[*]})"
fi
fi
fi
_ffmpeg_argspecs+=$lastopt
}
@@ -118,32 +125,38 @@
elif [[ $lastopt_description == [^[:space:]]##[[:space:]][[:space:]]* ]]; then
local example=${lastopt_description%% *}
example=${example//:/\\:}
lastopt_description=${lastopt_description##[^[:space:]]##[[:space:]]##}
lastopt_description=${lastopt_description//:/\\:}
if [[ $example == filename ]]; then
lastopt_takesargs=0
lastopt+=":$lastopt_description:_files"
elif [[ $lastopt == -[asv]pre ]]; then
lastopt_takesargs=0
+ lastopt="*$lastopt"
lastopt+=": :_ffmpeg_presets"
elif [[ $lastopt == -acodec ]]; then
lastopt_takesargs=0
lastopt+=": :_ffmpeg_acodecs"
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
lastopt+=": :_ffmpeg_bsfs"
else
lastopt_takesargs=1
lastopt_description+=" ($example)"
fi
else
lastopt_takesargs=0
Attachment:
_nmcli
Description: Binary data