Compare commits

..

No commits in common. "master" and "0.36.0" have entirely different histories.

27 changed files with 1707 additions and 1549 deletions

View File

@ -69,10 +69,3 @@ esac
return $ret return $ret
# Local Variables:
# mode: Shell-Script
# sh-indentation: 2
# indent-tabs-mode: nil
# sh-basic-offset: 2
# End:
# vim: ft=zsh sw=2 ts=2 et

View File

@ -41,29 +41,14 @@
# ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------
function _cask() { function _cask() {
typeset -A opt_args local ret=1 state
local context state line ret=1 _arguments \
local curcontext="$curcontext"
_arguments -C \
'(--proxy --http-proxy --https-proxy)--proxy[Set emacs proxy for HTTPS and HTTPS]:host:_hosts' \
'(--proxy --http-proxy)--http-proxy[Set emacs proxy for HTTP]:host:_hosts' \
'(--proxy --https-proxy)--https-proxy[Set emacs proxy for HTTPS]:host:_hosts' \
'(--proxy --http-proxy --https-proxy)--proxy[Set emacs proxy for HTTPS and HTTPS]:host:_hosts' \
'--no-proxy[Set Emacs no-proxy to HOST]:host:_hosts' \
'(- *)--version[Print Cask version and exit]' \
'(- *)'{-h,--help}'[Display usage or information for command]::command:->subcommand' \
'--debug[Turn on debug output]' \
'--path[Run command in this PATH instead of default-directory]:dir:_files -/' \
'(--verbose --silent)--verbose[Be verbose and show debug output]' \
'(--verbose --silent)--verbose[Be slient and do not show anything]' \
':subcommand:->subcommand' \ ':subcommand:->subcommand' \
'*:: :->subcmds' \ '*:: :->subcmds' && ret=0
&& ret=0
case $state in case $state in
(subcommand) subcommand)
local -a subcommands=( subcommands=(
"build:build all Elisp files in the files directive" "build:build all Elisp files in the files directive"
"clean-elc:remove all byte compiled Elisp files in the files directive" "clean-elc:remove all byte compiled Elisp files in the files directive"
"exec:execute command with correct 'exec-path' and 'load-path'" "exec:execute command with correct 'exec-path' and 'load-path'"
@ -86,20 +71,15 @@ function _cask() {
"upgrade:upgrade Cask itself and its dependencies" "upgrade:upgrade Cask itself and its dependencies"
"version:print program version" "version:print program version"
) )
_describe -t subcommands 'cask subcommands' subcommands && ret=0 _describe -t subcommands 'cask subcommands' subcommands && ret=0
;; esac
(subcmds)
case "$words[1]" in case "$words[1]" in
(init) init)
_arguments \ _arguments \
'(--dev)--dev[Run in dev mode]' \ '(--dev)--dev[Run in dev mode]' && ret=0 ;;
&& ret=0 exec)
;; _generic
(exec)
_generic
;;
esac
;; ;;
esac esac
@ -107,11 +87,3 @@ function _cask() {
} }
_cask "$@" _cask "$@"
# Local Variables:
# mode: Shell-Script
# sh-indentation: 2
# indent-tabs-mode: nil
# sh-basic-offset: 2
# End:
# vim: ft=zsh sw=2 ts=2 et

View File

@ -248,7 +248,7 @@ __ccache_config_keys() {
if compset -P '--set-config=*='; then if compset -P '--set-config=*='; then
case $IPREFIX in case $IPREFIX in
( *=absolute_paths_in_stderr= | *=compression= | *=debug= | *=depend_mode= | *=direct_mode= | *=disable= | *=file_clone= | *=hard_link= | *=hash_dir= | *=inode_cache= | *=keep_comments_cpp= | *=read_only= | *=read_only_direct= | *=recache= | *=run_second_cpp= | *=stats= | *=unify= ) ( *=absolute_paths_in_stderr= | *=compression= | *=debug= | *=depend_mode= | *=direct_mode= | *=disable= | *=file_clone= | *=hard_link= | *=hash_dir= | *=inode_cache= | *=keep_comments_cpp= | *=read_only= | *=read_only_direct= | *=recache= | *=run_second_cpp= | *=stats= | *=unify= )
local -a booleans=('true' 'false') local -a booleans=('true' 'false')
_describe -t booleans 'boolean' booleans _describe -t booleans 'boolean' booleans
;; ;;

719
src/_cf

File diff suppressed because it is too large Load Diff

View File

@ -108,8 +108,8 @@ _chromium_proxyurls () {
do do
while _next_label prefixes expl 'URL prefix' -S '' "$@" while _next_label prefixes expl 'URL prefix' -S '' "$@"
do do
compset -S '[^:/]*' && compstate[to_end]='' compset -S '[^:/]*' && compstate[to_end]=''
compadd "$expl[@]" http:// socks:// socks4:// socks5:// && ret=0 compadd "$expl[@]" http:// socks:// socks4:// socks5:// && ret=0
done done
(( ret )) || return 0 (( ret )) || return 0
done done
@ -123,27 +123,27 @@ _chromium_proxyurls () {
return return
fi ;; fi ;;
(file) [[ -prefix //(127.0.0.1|localhost)/ ]] && compset -P '//(127.0.0.1|localhost)' (file) [[ -prefix //(127.0.0.1|localhost)/ ]] && compset -P '//(127.0.0.1|localhost)'
[[ -prefix /// ]] && compset -P // [[ -prefix /// ]] && compset -P //
if ! compset -P // if ! compset -P //
then then
_tags -C file files _tags -C file files
while _tags while _tags
do do
while _next_label files expl 'local file' while _next_label files expl 'local file'
do do
if [[ -prefix / ]] if [[ -prefix / ]]
then then
_path_files "$expl[@]" -S '' "${glob[@]}" && ret=0 _path_files "$expl[@]" -S '' "${glob[@]}" && ret=0
_path_files "$expl[@]" -S/ -r '/' -/ && ret=0 _path_files "$expl[@]" -S/ -r '/' -/ && ret=0
elif [[ -z "$PREFIX" ]] elif [[ -z "$PREFIX" ]]
then then
compadd -S '/' -r '/' "$expl[@]" "$@" - "${PWD%/}" && ret=0 compadd -S '/' -r '/' "$expl[@]" "$@" - "${PWD%/}" && ret=0
fi fi
done done
(( ret )) || return 0 (( ret )) || return 0
done done
return 1 return 1
fi ;; fi ;;
esac esac
if ! compset -P '(#b)([^:/]#)([:/])' if ! compset -P '(#b)([^:/]#)([:/])'
then then
@ -153,10 +153,10 @@ _chromium_proxyurls () {
do do
while _next_label hosts expl host while _next_label hosts expl host
do do
compset -S '[:/]*' || suf="/" compset -S '[:/]*' || suf="/"
(( $#uhosts )) || _hosts -S "$suf" -r '/:' "$expl[@]" && ret=0 (( $#uhosts )) || _hosts -S "$suf" -r '/:' "$expl[@]" && ret=0
[[ "$scheme" = http ]] && uhosts=($uhosts $localhttp_servername) [[ "$scheme" = http ]] && uhosts=($uhosts $localhttp_servername)
compadd -S "$suf" -r '/:' "$expl[@]" -a uhosts && ret=0 compadd -S "$suf" -r '/:' "$expl[@]" -a uhosts && ret=0
done done
(( ret )) || return 0 (( ret )) || return 0
done done
@ -171,28 +171,28 @@ _chromium_proxyurls () {
then then
if ! compset -P '(#b)([^/]#)/' if ! compset -P '(#b)([^/]#)/'
then then
_users -S/ "$@" _users -S/ "$@"
return return
fi fi
user="$match[1]" user="$match[1]"
while _tags while _tags
do do
while _next_label files expl 'local file' while _next_label files expl 'local file'
do do
_path_files "$expl[@]" "$@" -W ~$user/$localhttp_userdir "${glob[@]}" && ret=0 _path_files "$expl[@]" "$@" -W ~$user/$localhttp_userdir "${glob[@]}" && ret=0
_path_files -S/ -r '/' "$expl[@]" -W ~$user/$localhttp_userdir-/ && ret=0 _path_files -S/ -r '/' "$expl[@]" -W ~$user/$localhttp_userdir-/ && ret=0
done done
(( ret )) || return 0 (( ret )) || return 0
done done
else else
while _tags while _tags
do do
while _next_label files expl 'local file' while _next_label files expl 'local file'
do do
_path_files "$expl[@]" "$@" -W $localhttp_documentroot "${glob[@]}" && ret=0 _path_files "$expl[@]" "$@" -W $localhttp_documentroot "${glob[@]}" && ret=0
_path_files -S/ -r '/' "$expl[@]" -W $localhttp_documentroot -/ && ret=0 _path_files -S/ -r '/' "$expl[@]" -W $localhttp_documentroot -/ && ret=0
done done
(( ret )) || return 0 (( ret )) || return 0
done done
fi fi
else else
@ -200,8 +200,8 @@ _chromium_proxyurls () {
do do
(( $#urls )) && while _next_label files expl 'local file' (( $#urls )) && while _next_label files expl 'local file'
do do
_path_files "$expl[@]" "$@" -W $urls/$scheme/$host "${glob[@]}" && ret=0 _path_files "$expl[@]" "$@" -W $urls/$scheme/$host "${glob[@]}" && ret=0
_path_files -S/ -r '/' "$expl[@]" -W $urls/$scheme/$host -/ && ret=0 _path_files -S/ -r '/' "$expl[@]" -W $urls/$scheme/$host -/ && ret=0
done done
[[ $scheme = (scp|sftp) ]] && _requested remote-files && _remote_files -h $host -- ssh && ret=0 [[ $scheme = (scp|sftp) ]] && _requested remote-files && _remote_files -h $host -- ssh && ret=0
(( ret )) || return 0 (( ret )) || return 0

View File

@ -79,12 +79,12 @@ local -a cmake_build_options=(
'--list-presets[List available presets]' '--list-presets[List available presets]'
'--workflow[Run a workflow preset]' '--workflow[Run a workflow preset]'
'-E[CMake command mode]:command:_cmake_commands' '-E[CMake command mode]:command:_cmake_command_help'
'-L-[List cache variables]::_values "options" "[non-advanced cache variables]" "A[advanced cache variables]" "H[non-advanced cached variables with help]" "AH[advanced cache variables with help]"' '-L-[List cache variables]::_values "options" "[non-advanced cache variables]" "A[advanced cache variables]" "H[non-advanced cached variables with help]" "AH[advanced cache variables with help]"'
'--fresh[Configure a fresh build tree, removing any existing cache file]' '--fresh[Configure a fresh build tree, removing any existing cache file]'
'--build[Build a CMake-generated project binary tree]::project directory:_path_files -/' '--build[Build a CMake-generated project binary tree]:project directory:_path_files -/'
'--install[Install a CMake-generated project binary tree]:project directory:_path_files -/' '--install[Install a CMake-generated project binary tree]:project directory:_path_files -/'
'--open[Open generated project in the associated application]:project directory:_path_files -/' '--open[Open generated project in the associated application]:project directory:_path_files -/'
@ -149,11 +149,11 @@ _cmake_generator_options() {
# -------------- # --------------
(( $+functions[_cmake_presets] )) || (( $+functions[_cmake_presets] )) ||
_cmake_presets() { _cmake_presets() {
local invoke=(${(Q)words}) local invoke; invoke=(${(Q)words})
invoke[$CURRENT]=() invoke[$CURRENT]=()
# TODO: remove all arguments -* except -S # TODO: remove all arguments -* except -S
local list_presets=(${(f)"$(${invoke} --list-presets 2>/dev/null | local list_presets; list_presets=(${(f)"$(${invoke} --list-presets 2>/dev/null |
sed -n -e 's,^[[:space:]]*"\([^"]*\)"[[:space:]]*-[[:space:]]*\(.*\),\1:\2,p' \ sed -n -e 's,^[[:space:]]*"\([^"]*\)"[[:space:]]*-[[:space:]]*\(.*\),\1:\2,p' \
-e 's,^[[:space:]]*"\([^"]*\)"[[:space:]]*$,\1,p')"}) -e 's,^[[:space:]]*"\([^"]*\)"[[:space:]]*$,\1,p')"})
@ -165,16 +165,24 @@ _cmake_presets() {
# -------------- # --------------
(( $+functions[_cmake_targets] )) || (( $+functions[_cmake_targets] )) ||
_cmake_targets() { _cmake_targets() {
local dir="$1" local -a targets
local -a targets=() if [ -f $1/Makefile ]
if [[ -f "${dir}/Makefile" && $+commands[make] ]]; then then
# `make help` doesn't work for Makefiles in general, but for CMake generated Makefiles it does. # `make help` doesn't work for Makefiles in general, but for CMake generated Makefiles it does.
targets=(${(f)"$(make -f $dir/Makefile help 2>/dev/null | awk '/^\.\.\./ { print $2 }')"}) i=1
elif [[ -f "${dir}/build.ninja" && $+commands[ninja] ]]; then for target in $(make -f $1/Makefile help | \grep -e "\.\.\." | sed "s/\.\.\. //" | sed "s/ (the default.*//") ; do
targets[$i]=$target
(( i = $i + 1 ))
done
elif [ -f $1/build.ninja ]
then
# `ninja help` doesn't seem to be the list of targets we're interested in # `ninja help` doesn't seem to be the list of targets we're interested in
targets=(${(f)"$(ninja -C $dir -t targets all 2>/dev/null | awk -F: '{print $1}' )"}) i=1
for target in $(ninja -C $1 -t targets all 2&>/dev/null | awk -F: '{print $1}') ; do
targets[$i]="$target"
(( i++ ))
done
fi fi
_describe 'build targets' targets _describe 'build targets' targets
} }
@ -187,53 +195,44 @@ _cmake_suggest_installdirs() {
} }
_cmake_on_build() { _cmake_on_build() {
local build_extras=( local build_extras;build_extras=(
'--[Native build tool options]' '--[Native build tool options]'
'--target[specify build target]' '--target[specify build target]'
'--clean-first[build target clean first]' '--clean-first[build target clean first]'
'--config[For multi-configuration tools]' '--config[For multi-configuration tools]'
'--parallel[maximum number of build processes]' '--parallel[maximum number of build processes]'
'--use-stderr' '--use-stderr')
)
local -a undescribed_build_extras local -a undescribed_build_extras
local i=1 i=1
for be in $build_extras ; do for be in $build_extras ; do
undescribed_build_extras[$i]=$(echo $be | sed "s/\[.*//") undescribed_build_extras[$i]=$(echo $be | sed "s/\[.*//")
(( i++ )) (( i++ ))
done done
inbuild=false
local in_build=false dashdashposition=-1
local dash_dash_position=-1
local build_at=$CURRENT
for ((i = (($CURRENT - 1)); i > 1 ; i--)); do for ((i = (($CURRENT - 1)); i > 1 ; i--)); do
if [[ $words[$i] == --build ]]; then if [[ $words[$i] == --build ]] ; then
in_build=true inbuild=true
build_at=$i buildat=$i
(( difference = $CURRENT - $i )) (( difference = $CURRENT - $i ))
elif [[ $words[$i] == -- ]]; then elif [[ $words[$i] == -- ]] ; then
dash_dash_position=$i dashdashposition=$i
fi fi
done done
# check if build mode has been left # check if build mode has been left
local out_of_build=false outofbuild=false
for ((i = (($CURRENT - 1)); i > (($build_at + 1)); i--)); do for ((i = (($CURRENT - 1)); i > (($buildat + 1)); i--)); do
# don't check the word after --build (should be a directory) # don't check the word after --build (should be a directory)
if [[ ${undescribed_build_extras[(r)$words[$i]]} == $words[$i] ]]; then if [[ ${undescribed_build_extras[(r)$words[$i]]} == $words[$i] ]] ; then continue ; fi
continue if [[ $words[(($i - 1))] == --target ]] ; then continue ; fi
fi if [[ $words[(($i - 1))] == --config ]] ; then continue ; fi
if [[ $words[(($i - 1))] == --target ]]; then continue ; fi
if [[ $words[(($i - 1))] == --config ]]; then continue ; fi
if [[ $words[(($i - 1))] == --parallel ]] ; then continue ; fi if [[ $words[(($i - 1))] == --parallel ]] ; then continue ; fi
out_of_build=true outofbuild=true
done done
if (( $dashdashposition > 0 )) ; then
if (( $dash_dash_position > 0 )) ; then _cmake_generator_options $words[(($buildat + 1))] $dashdashposition && return 0
_cmake_generator_options $words[(($build_at + 1))] $dash_dash_position && return 0
fi fi
if [[ "$inbuild" == false || "$difference" -eq 1 ]] ; then
if [[ "$in_build" == false || "$difference" -eq 1 ]] ; then
# either there is no --build or completing the directory after --build # either there is no --build or completing the directory after --build
_arguments -C -s \ _arguments -C -s \
- build_opts \ - build_opts \
@ -242,14 +241,14 @@ _cmake_on_build() {
"$cmake_suggest_build[@]" && return 0 "$cmake_suggest_build[@]" && return 0
elif [[ $words[(($CURRENT - 1))] == --target ]] ; then elif [[ $words[(($CURRENT - 1))] == --target ]] ; then
# after --build <dir> --target, suggest targets # after --build <dir> --target, suggest targets
_cmake_targets $words[(($build_at + 1))] && return 0 _cmake_targets $words[(($buildat + 1))] && return 0
elif [[ $words[(($CURRENT - 1))] == --config ]] ; then elif [[ $words[(($CURRENT - 1))] == --config ]] ; then
# after --build <dir> --config, no idea # after --build <dir> --config, no idea
return 0 return 0
elif [[ $words[(($CURRENT - 1))] == --parallel ]] ; then elif [[ $words[(($CURRENT - 1))] == --parallel ]] ; then
# after --build <dir> --parallel # after --build <dir> --parallel
return 0 return 0
elif [ "$out_of_build" = true ] ; then elif [ "$outofbuild" = true ] ; then
# after --build <dir> --<not a --build option>, suggest other cmake_build_options (like -Wno-dev) # after --build <dir> --<not a --build option>, suggest other cmake_build_options (like -Wno-dev)
_arguments "$cmake_build_options[@]" && return 0 _arguments "$cmake_build_options[@]" && return 0
else else
@ -259,49 +258,43 @@ _cmake_on_build() {
} }
_cmake_on_install() { _cmake_on_install() {
local build_extras=( local build_extras;build_extras=(
'--[Native build tool options]' '--[Native build tool options]'
'--prefix[Override the installation prefix, CMAKE_INSTALL_PREFIX]' '--prefix[Override the installation prefix, CMAKE_INSTALL_PREFIX]'
'--config[For multi-configuration generators(e.g. Visual Studio)]' '--config[For multi-configuration generators(e.g. Visual Studio)]'
'--component[Component-based install]' '--component[Component-based install]'
'--strip[Strip before installing.]' '--strip[Strip before installing.]'
) )
local -a undescribed_build_extras local -a undescribed_build_extras
local i=1 i=1
for be in $build_extras ; do for be in $build_extras ; do
undescribed_build_extras[$i]=$(echo $be | sed "s/\[.*//") undescribed_build_extras[$i]=$(echo $be | sed "s/\[.*//")
(( i++ )) (( i++ ))
done done
inbuild=false
local in_build=false dashdashposition=-1
local dash_dash_position=-1
local build_at=$CURRENT
for ((i = (($CURRENT - 1)); i > 1 ; i--)); do for ((i = (($CURRENT - 1)); i > 1 ; i--)); do
if [[ $words[$i] == --install ]]; then if [[ $words[$i] == --install ]] ; then
in_build=true inbuild=true
build_at=$i buildat=$i
(( difference = $CURRENT - $i )) (( difference = $CURRENT - $i ))
elif [[ $words[$i] == -- ]]; then elif [[ $words[$i] == -- ]] ; then
dash_dash_position=$i dashdashposition=$i
fi fi
done done
outofbuild=false
local out_of_build=false for ((i = (($CURRENT - 1)); i > (($buildat + 1)); i--)); do
for ((i = (($CURRENT - 1)); i > (($build_at + 1)); i--)); do
# don't check the word after --install (should be a directory) # don't check the word after --install (should be a directory)
if [[ ${undescribed_build_extras[(r)$words[$i]]} == $words[$i] ]] ; then continue ; fi if [[ ${undescribed_build_extras[(r)$words[$i]]} == $words[$i] ]] ; then continue ; fi
if [[ $words[(($i - 1))] == --prefix ]]; then continue ; fi if [[ $words[(($i - 1))] == --prefix ]] ; then continue ; fi
if [[ $words[(($i - 1))] == --config ]]; then continue ; fi if [[ $words[(($i - 1))] == --config ]] ; then continue ; fi
if [[ $words[(($i - 1))] == --component ]]; then continue ; fi if [[ $words[(($i - 1))] == --component ]] ; then continue ; fi
out_of_build=true outofbuild=true
done done
if (( $dashdashposition > 0 )) ; then
if (( $dash_dash_position > 0 )) ; then _cmake_generator_options $words[(($buildat + 1))] $dashdashposition && return 0
_cmake_generator_options $words[(($build_at + 1))] $dash_dash_position && return 0
fi fi
if [[ "$inbuild" == false || "$difference" -eq 1 ]] ; then
if [[ "$in_build" == false || "$difference" -eq 1 ]] ; then
# either there is no --install or completing the directory after --install # either there is no --install or completing the directory after --install
_arguments -C -s \ _arguments -C -s \
- build_opts \ - build_opts \
@ -317,7 +310,7 @@ _cmake_on_install() {
elif [[ $words[(($CURRENT - 1))] == --component ]] ; then elif [[ $words[(($CURRENT - 1))] == --component ]] ; then
# after --build <dir> --component, no idea # after --build <dir> --component, no idea
return 0 return 0
elif [ "$out_of_build" = true ] ; then elif [ "$outofbuild" = true ] ; then
# after --build <dir> --<not a --build option>, suggest other cmake_build_options (like -Wno-dev) # after --build <dir> --<not a --build option>, suggest other cmake_build_options (like -Wno-dev)
_arguments "$cmake_build_options[@]" && return 0 _arguments "$cmake_build_options[@]" && return 0
else else
@ -348,16 +341,19 @@ local -a cmake_help_actions=(
'(- 1)--help-variable-list[List variables with help available and exit]' '(- 1)--help-variable-list[List variables with help available and exit]'
'(- 1)--help-variables[Print cmake-variables manual and exit]' '(- 1)--help-variables[Print cmake-variables manual and exit]'
) )
_cmake_help() {
_arguments -C -s - help "$cmake_help_actions[@]"
}
# ----------------- # -----------------
# _cmake_list_names # _cmake_list_names
# ----------------- # -----------------
(( $+functions[_cmake_list_names] )) || (( $+functions[_cmake_list_names] )) ||
_cmake_list_names() { _cmake_list_names() {
local command="$@[1]" local command; command="$@[1]"
local desc="$@[2]" local desc; desc="$@[2]"
local opts=($@[3]) local opts; opts=($@[3])
local list_names=(${(f)"$($service $command 2> /dev/null)"}) local list_names; list_names=(${(f)"$($service $command 2> /dev/null)"})
# Older CMake (< 3.0) writes out the version # Older CMake (< 3.0) writes out the version
list_names=(${^list_names##cmake version*}) list_names=(${^list_names##cmake version*})
@ -386,7 +382,7 @@ _cmake_define_property() {
# ---------------------------- # ----------------------------
(( $+functions[_cmake_define_property_names] )) || (( $+functions[_cmake_define_property_names] )) ||
_cmake_define_property_names() { _cmake_define_property_names() {
local alternatives=( local alternatives; alternatives=(
'common-property-names:common property name:_cmake_define_common_property_names -qS=' 'common-property-names:common property name:_cmake_define_common_property_names -qS='
) )
local -A cmake_langs local -A cmake_langs
@ -406,9 +402,8 @@ _cmake_define_property_names() {
# --------------------------------- # ---------------------------------
(( $+functions[_cmake_define_lang_property_names] )) || (( $+functions[_cmake_define_lang_property_names] )) ||
_cmake_define_lang_property_names() { _cmake_define_lang_property_names() {
local cmake_lang="$@[-2]" local cmake_lang="$@[-2]" cmake_lang_desc="$@[-1]"
local cmake_lang_desc="$@[-1]" local properties; properties=(
local -a properties=(
"CMAKE_${cmake_lang}_COMPILER:${cmake_lang_desc} compiler" "CMAKE_${cmake_lang}_COMPILER:${cmake_lang_desc} compiler"
"CMAKE_${cmake_lang}_COMPILER_LAUNCHER:${cmake_lang_desc} compiler launcher (e.g. ccache)" "CMAKE_${cmake_lang}_COMPILER_LAUNCHER:${cmake_lang_desc} compiler launcher (e.g. ccache)"
"CMAKE_${cmake_lang}_FLAGS:${cmake_lang_desc} compiler flags for all builds" "CMAKE_${cmake_lang}_FLAGS:${cmake_lang_desc} compiler flags for all builds"
@ -429,7 +424,7 @@ _cmake_define_lang_property_names() {
# ----------------------------------- # -----------------------------------
(( $+functions[_cmake_define_common_property_names] )) || (( $+functions[_cmake_define_common_property_names] )) ||
_cmake_define_common_property_names() { _cmake_define_common_property_names() {
local -a properties=( local properties; properties=(
'CMAKE_MODULE_PATH:Search path for CMake modules (FindPROJECT.cmake)' 'CMAKE_MODULE_PATH:Search path for CMake modules (FindPROJECT.cmake)'
'CMAKE_PREFIX_PATH:Search path for installations (PROJECTConfig.cmake)' 'CMAKE_PREFIX_PATH:Search path for installations (PROJECTConfig.cmake)'
'CMAKE_BUILD_TYPE:Specifies the build type for make based generators' 'CMAKE_BUILD_TYPE:Specifies the build type for make based generators'
@ -443,87 +438,51 @@ _cmake_define_common_property_names() {
'CMAKE_UNITY_BUILD:Batch include source files' 'CMAKE_UNITY_BUILD:Batch include source files'
) )
_describe -t 'common-property-names' 'common property name' properties "$@" _describe -t 'common-property-names' 'common property name' properties $@
} }
local _cmake_build_types=('Debug' 'Release' 'RelWithDebInfo' 'MinSizeRel')
local _cmake_c_standards=(90 99 11)
local _cmake_cxx_standards=(98 11 14 17 20)
# ---------------------------- # ----------------------------
# _cmake_define_property_values # _cmake_define_property_values
# ---------------------------- # ----------------------------
(( $+functions[_cmake_define_property_values] )) || (( $+functions[_cmake_define_property_values] )) ||
_cmake_define_property_values() { _cmake_define_property_values() {
local ret=1 local ret=1
local build_types=('Debug' 'Release' 'RelWithDebInfo' 'MinSizeRel')
local c_standards=(90 99 11 17 23)
local cxx_standards=(98 11 14 17 20 23)
setopt localoptions extendedglob setopt localoptions extendedglob
case $@[-1] in case $@[-1] in
(CMAKE_BUILD_TYPE) (CMAKE_BUILD_TYPE) _wanted build-types expl 'build type' _values 'build type' ${_cmake_build_types[@]} && ret=0;;
_wanted build-types expl 'build type' _values 'build type' ${build_types[@]} && ret=0 (BUILD_SHARED_LIBS) _wanted booleans expl 'boolean' _cmake_booleans && ret=0;;
;; (CMAKE_CXX_STANDARD) _wanted cxx-standards expl 'cxx standard' _values 'cxx standard' ${_cmake_cxx_standards[@]} && ret=0;;
(BUILD_SHARED_LIBS) (CMAKE_C_STANDARD) _wanted c-standards expl 'c standard' _values 'c standard' ${_cmake_c_standards[@]} && ret=0;;
_wanted booleans expl 'boolean' _cmake_booleans && ret=0 (CMAKE_TOOLCHAIN_FILE) _wanted toolchain-files expl 'file' _cmake_toolchain_files && ret=0;;
;; (CMAKE_COLOR_MAKEFILE) _wanted booleans expl 'boolean' _cmake_booleans && ret=0;;
(CMAKE_CXX_STANDARD) (CMAKE_RULE_MESSAGES) _wanted booleans expl 'boolean' _cmake_booleans && ret=0;;
_wanted cxx-standards expl 'cxx standard' _values 'cxx standard' ${cxx_standards[@]} && ret=0 (CMAKE_VERBOSE_MAKEFILE) _wanted booleans expl 'boolean' _cmake_booleans && ret=0;;
;; (CMAKE_UNITY_BUILD) _wanted booleans expl 'boolean' _cmake_booleans && ret=0;;
(CMAKE_C_STANDARD) (CMAKE_INSTALL_PREFIX) _files -/ && ret=0;;
_wanted c-standards expl 'c standard' _values 'c standard' ${c_standards[@]} && ret=0 (CMAKE_EXPORT_COMPILE_COMMANDS) _wanted booleans expl 'boolean' _cmake_booleans && ret=0;;
;; (CMAKE_*_COMPILER) _wanted compilers expl 'compiler' _cmake_compilers && ret=0;;
(CMAKE_TOOLCHAIN_FILE) (CMAKE_*_COMPILER_LAUNCHER) _wanted compilers expl 'compiler launcher' _cmake_launchers && ret=0;;
_wanted toolchain-files expl 'file' _cmake_toolchain_files && ret=0 (CMAKE_*_FLAGS(|_?*)) _message -e compiler-flags 'compiler flags' && _dispatch $service -value-,CPPFLAGS,-default- && ret=0;;
;; (CMAKE_*_STANDARD_REQUIRED) _wanted booleans expl 'boolean' _cmake_booleans && ret=0;;
(CMAKE_COLOR_MAKEFILE) (CMAKE_*_EXTENSIONS) _wanted booleans expl 'boolean' _cmake_booleans && ret=0;;
_wanted booleans expl 'boolean' _cmake_booleans && ret=0 (*) _files && ret=0;;
;;
(CMAKE_RULE_MESSAGES)
_wanted booleans expl 'boolean' _cmake_booleans && ret=0
;;
(CMAKE_VERBOSE_MAKEFILE)
_wanted booleans expl 'boolean' _cmake_booleans && ret=0
;;
(CMAKE_UNITY_BUILD)
_wanted booleans expl 'boolean' _cmake_booleans && ret=0
;;
(CMAKE_INSTALL_PREFIX)
_files -/ && ret=0
;;
(CMAKE_EXPORT_COMPILE_COMMANDS)
_wanted booleans expl 'boolean' _cmake_booleans && ret=0
;;
(CMAKE_*_COMPILER)
_wanted compilers expl 'compiler' _cmake_compilers && ret=0
;;
(CMAKE_*_COMPILER_LAUNCHER)
_wanted compilers expl 'compiler launcher' _cmake_launchers && ret=0
;;
(CMAKE_*_FLAGS(|_?*))
_message -e compiler-flags 'compiler flags' && _dispatch $service -value-,CPPFLAGS,-default- && ret=0
;;
(CMAKE_*_STANDARD_REQUIRED)
_wanted booleans expl 'boolean' _cmake_booleans && ret=0
;;
(CMAKE_*_EXTENSIONS)
_wanted booleans expl 'boolean' _cmake_booleans && ret=0
;;
(*)
_files && ret=0
;;
esac esac
return ret return ret
} }
local -a _cmake_generator_list=(${(f)"$(cmake --help | awk '/^Generators/{flag=1} flag && /^[* ] [^ ]/ {sub(/^[* ] /, ""); sub(/=.*$/, ""); sub(/\[arch\]/, ""); sub(/ *$/, ""); print}')"})
# ----------------- # -----------------
# _cmake_generators # _cmake_generators
# ----------------- # -----------------
(( $+functions[_cmake_generators] )) || (( $+functions[_cmake_generators] )) ||
_cmake_generators() { _cmake_generators() {
local -a generators=( _describe -t generators 'generator' _cmake_generator_list
${(f)"$(cmake --help | awk '/^Generators/{flag=1} flag && /^[* ] [^ ]/ {sub(/^[* ] /, ""); sub(/=.*$/, ""); sub(/\[arch\]/, ""); sub(/ *$/, ""); print}')"}
)
_describe -t generators 'generator' generators
} }
# ---------------------- # ----------------------
@ -560,46 +519,45 @@ _cmake_launchers() {
_command_names -e _command_names -e
} }
(( $+functions[_cmake_commands] )) || local -a _cmake_commands=(
_cmake_commands() { 'capabilities:Report capabilities built into cmake in JSON format' \
local -a commands=( 'cat:concat the files and print them to the standard output' \
'capabilities:Report capabilities built into cmake in JSON format' 'chdir:run command in a given directory' \
'cat:concat the files and print them to the standard output' 'compare_files:check if file1 is same as file2' \
'chdir:run command in a given directory' 'copy:copy files to destination (either file or directory)' \
'compare_files:check if file1 is same as file2' 'copy_directory:copy content of <dir>... directories to destination directory' \
'copy:copy files to destination (either file or directory)' 'copy_if_different:copy files if it has changed' \
'copy_directory:copy content of <dir>... directories to destination directory' 'echo:displays arguments as text' \
'copy_if_different:copy files if it has changed' 'echo_append:displays arguments as text but no new line' \
'echo:displays arguments as text' 'env:run command in a modified environment' \
'echo_append:displays arguments as text but no new line' 'environment:display the current environment' \
'env:run command in a modified environment' 'make_directory:create parent and <dir> directories' \
'environment:display the current environment' 'md5sum:create MD5 checksum of files' \
'make_directory:create parent and <dir> directories' 'sha1sum:create SHA1 checksum of files' \
'md5sum:create MD5 checksum of files' 'sha224sum:create SHA224 checksum of files' \
'sha1sum:create SHA1 checksum of files' 'sha256sum:create SHA256 checksum of files' \
'sha224sum:create SHA224 checksum of files' 'sha384sum:create SHA384 checksum of files' \
'sha256sum:create SHA256 checksum of files' 'sha512sum:create SHA512 checksum of files' \
'sha384sum:create SHA384 checksum of files' 'remove:remove the file(s), use -f to force it' \
'sha512sum:create SHA512 checksum of files' 'remove_directory:remove directories and their contents' \
'remove:remove the file(s), use -f to force it' 'rename:rename a file or directory (on one volume)' \
'remove_directory:remove directories and their contents' 'rm:remove files or directories' \
'rename:rename a file or directory (on one volume)' 'server:start cmake in server mode' \
'rm:remove files or directories' 'sleep:sleep for given number of seconds' \
'server:start cmake in server mode' 'tar:create or extract a tar or zip archive' \
'sleep:sleep for given number of seconds' 'time:run command and display elapsed time' \
'tar:create or extract a tar or zip archive' 'touch:touch a <file>' \
'time:run command and display elapsed time' 'touch_nocreate:touch a <file> but do not create it' \
'touch:touch a <file>' 'create_symlink:create a symbolic link new -> old' \
'touch_nocreate:touch a <file> but do not create it' 'create_hardlink:create a hard link new -> old' \
'create_symlink:create a symbolic link new -> old' 'true:do nothing with an exit code of 0' \
'create_hardlink:create a hard link new -> old' 'false:do nothing with an exit code of 1'
'true:do nothing with an exit code of 0' )
'false:do nothing with an exit code of 1' _cmake_command() {
) _arguments -C \
'-E[CMake command mode]:command:(("${_cmake_commands[@]}"))'
_describe -t commands 'command' commands
} }
local cmake_suggest_build;cmake_suggest_build=( local cmake_suggest_build;cmake_suggest_build=(
'--build[build]:build dir:_cmake_suggest_builddirs' '--build[build]:build dir:_cmake_suggest_builddirs'
) )
@ -615,17 +573,21 @@ elif [ $CURRENT -eq 2 ] ; then
- help \ - help \
"$cmake_help_actions[@]" \ "$cmake_help_actions[@]" \
- command \ - command \
'-E[CMake command mode]:command:_cmake_commands' \ '-E[CMake command mode]:command:( )' \
- build_opts \ - build_opts \
"$cmake_build_options[@]" \ "$cmake_build_options[@]" \
- build_cmds \ - build_cmds \
"$cmake_suggest_build[@]" \ "$cmake_suggest_build[@]" \
- install_cmds \ - install_cmds \
"$cmake_suggest_install[@]" && return 0 "$cmake_suggest_install[@]" && return 0
elif [[ $words[2] = --help* ]] ; then
_cmake_help
elif [[ $words[2] == --build ]] ; then elif [[ $words[2] == --build ]] ; then
_cmake_on_build _cmake_on_build
elif [[ $words[2] == --install ]] ; then elif [[ $words[2] == --install ]] ; then
_cmake_on_install _cmake_on_install
elif [[ $words[2] == -E ]]; then
_cmake_command
else else
_arguments "$cmake_build_options[@]" _arguments "$cmake_build_options[@]"
fi fi

View File

@ -151,9 +151,9 @@ _conan_cache() {
local ret=1 local ret=1
_arguments -C \ _arguments -C \
'(- *)'{-h,--help}'[show help message and exit]' \ '(- *)'{-h,--help}'[show help message and exit]' \
'1: :(clean path)' \ '1: :(clean path)' \
'*:: :->args' '*:: :->args'
case $state in case $state in
(args) (args)

View File

@ -48,7 +48,7 @@ _arguments \
'--waitip=[Wait for an address to assigned before forking to the background]: :(4 6)' \ '--waitip=[Wait for an address to assigned before forking to the background]: :(4 6)' \
\*{-x,--exit}'[This will signal an existing dhcpcd process running on the interface to exit]: :_net_interfaces' \ \*{-x,--exit}'[This will signal an existing dhcpcd process running on the interface to exit]: :_net_interfaces' \
'(-y --reboot)'{-y,--reboot}'[Allow reboot seconds before moving to the discover phase if we have an old lease to use]:seconds' \ '(-y --reboot)'{-y,--reboot}'[Allow reboot seconds before moving to the discover phase if we have an old lease to use]:seconds' \
'1:network interface:_net_interfaces' '1:network interface:_net_interfaces'
# Local Variables: # Local Variables:
# mode: Shell-Script # mode: Shell-Script

View File

@ -727,8 +727,8 @@ _flutter_custom_devices() {
_arguments -C \ _arguments -C \
'(- *)'{-h,--help}'[Print this usage information]' \ '(- *)'{-h,--help}'[Print this usage information]' \
'1: :_flutter_custom_devices_subcommands' \ '1: :_flutter_custom_devices_subcommands' \
'*:: :->args' \ '*:: :->args' \
&& ret=0 && ret=0
case $state in case $state in

View File

@ -40,34 +40,29 @@
# #
# ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------
_gist() { local curcontext="$curcontext" state line ret=1
local ret=1 typeset -A opt_args
_arguments \ _arguments -C \
'(--login)--login[Authenticate gist on this computer.]' \ '(--login)--login[Authenticate gist on this computer.]' \
'(-f --filename)'{-f,--filename}'[Sets the filename and syntax type.]:NAME' \ '(-f --filename)'{-f,--filename}'[Sets the filename and syntax type.]:NAME' \
'(-t --type)'{-t,--type}'[Sets the file extension and syntax type.]:EXT' \ '(-t --type)'{-t,--type}'[Sets the file extension and syntax type.]:EXT' \
'(-p --private --no-private)'{-p,--private}'[Makes your gist private.]' \ '(-p --private --no-private)'{-p,--private}'[Makes your gist private.]' \
'(--no-private -p --private)--no-private[Makes your gist no private.]' \ '(--no-private -p --private)--no-private[Makes your gist no private.]' \
'(-d --description)'{-d,--description}'[Adds a description to your gist.]:DESCRIPTION' \ '(-d --description)'{-d,--description}'[Adds a description to your gist.]:DESCRIPTION' \
'(-s --shorten)'{-s,--shorten}'[Shorten the gist URL using git.io.]' \ '(-s --shorten)'{-s,--shorten}'[Shorten the gist URL using git.io.]' \
'(-u --update)'{-u,--update}'[Update an existing gist.]:URL ID:_gist_ids' \ '(-u --update)'{-u,--update}'[Update an existing gist.]:URL ID:user_gists' \
'(-c --copy)'{-c,--copy}'[Copy the resulting URL to the clipboard]' \ '(-c --copy)'{-c,--copy}'[Copy the resulting URL to the clipboard]' \
'(-e --embed)'{-e,--embed}'[Copy the embed code for the gist to the clipboard]' \ '(-e --embed)'{-e,--embed}'[Copy the embed code for the gist to the clipboard]' \
'(-o --open --no-open)'{-o,--open}'[Open the resulting URL in a browser]' \ '(-o --open --no-open)'{-o,--open}'[Open the resulting URL in a browser]' \
'(--no-open -o --open)--no-open[No open the resulting URL in a browser]' \ '(--no-open -o --open)--no-open[No open the resulting URL in a browser]' \
'--skip-empty[Skip gisting empty files]' \ '(-P --paste)'{-P,--paste}'[Paste from the clipboard to gist]' \
'(-P --paste)'{-P,--paste}'[Paste from the clipboard to gist]' \ '(-R --raw)'{-R,--raw}'[Display raw URL of the new gist]' \
'(-R --raw)'{-R,--raw}'[Display raw URL of the new gist]' \ '(-l --list)'{-l,--list}'[List all gists for user ]::user' \
'(-l --list)'{-l,--list}'[List all gists for user ]::user' \ '(-h --help)'{-h,--help}'[print options help]' \
'--delete[Delete a gist]:id:_gist_ids' \ '(-v --version)'{-v,--version}'[print version]' \
'(- *)'{-h,--help}'[print options help]' \ '(-r --read)'{-r,--read}'[Read a gist and print out the contents]:user gists:_gist_read_gists' \
'(-v --version)'{-v,--version}'[print version]' \ '*: :_files' && ret=0
'(-r --read)'{-r,--read}'[Read a gist and print out the contents]:user gists:_gist_ids' \
'*: :_files' && ret=0
return ret
}
_gist_cache_policy() { _gist_cache_policy() {
# rebuild if cache is more than a day old # rebuild if cache is more than a day old
@ -76,7 +71,7 @@ _gist_cache_policy() {
(( $#oldp )) (( $#oldp ))
} }
_gist_ids() { _gist_read_gists() {
local update_policy ret=1 local update_policy ret=1
zstyle -s ":completion:${curcontext}:" cache-policy update_policy zstyle -s ":completion:${curcontext}:" cache-policy update_policy
if [[ -z "$update_policy" ]]; then if [[ -z "$update_policy" ]]; then
@ -84,33 +79,43 @@ _gist_ids() {
fi fi
# stores the gists of the logged in user in the format ID[Description] # stores the gists of the logged in user in the format ID[Description]
local -a gist_list _list=()
_cached_gists="user_gists"
# retrieve/Write gists from/to cache # retrieve/Write gists from/to cache
if _cache_invalid gist_cached_list || ! _retrieve_cache gist_cached_list; then if _cache_invalid $_cached_gists || ! _retrieve_cache $_cached_gists; then
if (( $+commands[ruby] )); then _gists=$(gist -l)
gist_list=(${(f)"$(gist -l | ruby -ne 'puts "#{$1}:#{$2}" if $_ =~ %r{/([^/ ]+)\s+(.+)}')"})
elif (( $+commands[perl])); then
gist_list=(${(f)"$(gist -l | perl -wln -e 'm{/([^/ ]+)\s+(.+)} and print qq($1:$2)')"})
fi
if [[ $? -eq 0 ]]; then if [ $? -eq 0 ]; then
_store_cache gist_cached_list gist_list _store_cache $_cached_gists _gists
else else
# some error occurred, the user is probably not logged in # some error occurred, the user is probably not logged in
# set _gists to an empty string so that no completion is attempted # set _gists to an empty string so that no completion is attempted
gist_list=() _gists=""
fi fi
else
_retrieve_cache $_cached_gists
fi fi
if [[ $#gist_list ]]; then if [ -n "$_gists" ]; then
_describe -t gist_ids 'gist_ids' gist_list echo "$_gists" | while read -r line; do
# Splitting the gist -l output
url="$(echo "$line" | cut -d " " -f 1 | cut -d "/" -f 4)"
# gists w/o descriptions can have only one column in the output, those
# have their description set to an empty string
description="$(echo "$line" | awk '{if(NF > 1){$1=""; print $0}}')"
_list+=( "${url}[${description}]" )
done
_values "gists" $_list
ret=0
fi fi
return ret return ret
} }
_gist "$@" return ret
# Local Variables: # Local Variables:
# mode: Shell-Script # mode: Shell-Script

View File

@ -40,357 +40,397 @@
# #
# ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------
_git-flow () {
local curcontext="$curcontext" state line
typeset -A opt_args
_arguments -C \ _git-flow ()
':command:->command' \ {
'*::options:->options' local curcontext="$curcontext" state line
typeset -A opt_args
case $state in _arguments -C \
(command) ':command:->command' \
local -a subcommands '*::options:->options'
subcommands=(
'init:Initialize a new git repo with support for the branching model.'
'feature:Manage your feature branches.'
'release:Manage your release branches.'
'hotfix:Manage your hotfix branches.'
'support:Manage your support branches.'
'version:Shows version information.'
)
_describe -t commands 'git flow' subcommands
;;
(options) case $state in
case $line[1] in (command)
(init)
_arguments \
-f'[Force setting of gitflow branches, even if already configured]' \
-d'[Use default branch naming conventions and prefixes]'
;;
(version)
;;
(hotfix)
__git-flow-hotfix
;;
(release)
__git-flow-release
;;
(feature)
__git-flow-feature
;;
(support)
__git-flow-support
;;
esac local -a subcommands
;; subcommands=(
esac 'init:Initialize a new git repo with support for the branching model.'
'feature:Manage your feature branches.'
'release:Manage your release branches.'
'hotfix:Manage your hotfix branches.'
'support:Manage your support branches.'
'version:Shows version information.'
)
_describe -t commands 'git flow' subcommands
;;
(options)
case $line[1] in
(init)
_arguments \
-f'[Force setting of gitflow branches, even if already configured]' \
-d'[Use default branch naming conventions and prefixes]'
;;
(version)
;;
(hotfix)
__git-flow-hotfix
;;
(release)
__git-flow-release
;;
(feature)
__git-flow-feature
;;
(support)
__git-flow-support
;;
esac
;;
esac
} }
__git-flow-release () { __git-flow-release ()
local curcontext="$curcontext" state line {
typeset -A opt_args local curcontext="$curcontext" state line
typeset -A opt_args
_arguments -C \ _arguments -C \
':command:->command' \ ':command:->command' \
'*::options:->options' '*::options:->options'
case $state in case $state in
(command) (command)
local -a subcommands
subcommands=(
'start:Start a new release branch.'
'finish:Finish a release branch.'
'list:List all your release branches. (Alias to `git flow release`)'
'publish:Publish this release branch to origin.`)'
'track:Track a release branch from origin.`)'
)
_describe -t commands 'git flow release' subcommands
_arguments \
-v'[Verbose (more) output]'
;;
(options) local -a subcommands
case $line[1] in subcommands=(
(start) 'start:Start a new release branch.'
_arguments \ 'finish:Finish a release branch.'
-F'[Fetch from origin before performing finish]'\ 'list:List all your release branches. (Alias to `git flow release`)'
':version:__git_flow_version_list' 'publish:Publish this release branch to origin.`)'
;; 'track:Track a release branch from origin.`)'
(finish) )
_arguments \ _describe -t commands 'git flow release' subcommands
-F'[Fetch from origin before performing finish]' \ _arguments \
-s'[Sign the release tag cryptographically]'\ -v'[Verbose (more) output]'
-u'[Use the given GPG-key for the digital signature (implies -s)]'\ ;;
-m'[Use the given tag message]'\
-n'[Don'\''t tag this release]'\ (options)
-p'[Push to $ORIGIN after performing finish]'\ case $line[1] in
-k'[Keep branch after performing finish]'\
':version:__git_flow_version_list' (start)
;; _arguments \
(publish) -F'[Fetch from origin before performing finish]'\
_arguments \ ':version:__git_flow_version_list'
':version:__git_flow_version_list' ;;
;;
(track) (finish)
_arguments \ _arguments \
':version:__git_flow_version_list' -F'[Fetch from origin before performing finish]' \
;; -s'[Sign the release tag cryptographically]'\
*) -u'[Use the given GPG-key for the digital signature (implies -s)]'\
_arguments \ -m'[Use the given tag message]'\
-v'[Verbose (more) output]' -n'[Don'\''t tag this release]'\
;; -p'[Push to $ORIGIN after performing finish]'\
esac -k'[Keep branch after performing finish]'\
;; ':version:__git_flow_version_list'
esac ;;
(publish)
_arguments \
':version:__git_flow_version_list'
;;
(track)
_arguments \
':version:__git_flow_version_list'
;;
*)
_arguments \
-v'[Verbose (more) output]'
;;
esac
;;
esac
} }
__git-flow-hotfix () { __git-flow-hotfix ()
local curcontext="$curcontext" state line {
typeset -A opt_args local curcontext="$curcontext" state line
typeset -A opt_args
_arguments -C \ _arguments -C \
':command:->command' \ ':command:->command' \
'*::options:->options' '*::options:->options'
case $state in case $state in
(command) (command)
local -a subcommands
subcommands=(
'start:Start a new hotfix branch.'
'finish:Finish a hotfix branch.'
'list:List all your hotfix branches. (Alias to `git flow hotfix`)'
'publish:Publish this hotfix branch to origin`)'
)
_describe -t commands 'git flow hotfix' subcommands
_arguments \
-v'[Verbose (more) output]'
;;
(options) local -a subcommands
case $line[1] in subcommands=(
(start) 'start:Start a new hotfix branch.'
_arguments \ 'finish:Finish a hotfix branch.'
-F'[Fetch from origin before performing finish]'\ 'list:List all your hotfix branches. (Alias to `git flow hotfix`)'
':hotfix:__git_flow_version_list'\ 'publish:Publish this hotfix branch to origin`)'
':branch-name:__git_flow_branch_names' )
;; _describe -t commands 'git flow hotfix' subcommands
_arguments \
-v'[Verbose (more) output]'
;;
(finish) (options)
_arguments \ case $line[1] in
-F'[Fetch from origin before performing finish]' \
-s'[Sign the release tag cryptographically]'\
-u'[Use the given GPG-key for the digital signature (implies -s)]'\
-m'[Use the given tag message]'\
-p'[Push to $ORIGIN after performing finish]'\
':hotfix:__git_flow_hotfix_list'
;;
(publish) (start)
_arguments \ _arguments \
':hotfix:__git_flow_hotfix_list' -F'[Fetch from origin before performing finish]'\
;; ':hotfix:__git_flow_version_list'\
':branch-name:__git_branch_names'
;;
*) (finish)
_arguments \ _arguments \
-v'[Verbose (more) output]' -F'[Fetch from origin before performing finish]' \
;; -s'[Sign the release tag cryptographically]'\
esac -u'[Use the given GPG-key for the digital signature (implies -s)]'\
;; -m'[Use the given tag message]'\
esac -p'[Push to $ORIGIN after performing finish]'\
':hotfix:__git_flow_hotfix_list'
;;
(publish)
_arguments \
':hotfix:__git_flow_hotfix_list'
;;
*)
_arguments \
-v'[Verbose (more) output]'
;;
esac
;;
esac
} }
__git-flow-feature () { __git-flow-feature ()
local curcontext="$curcontext" state line {
typeset -A opt_args local curcontext="$curcontext" state line
typeset -A opt_args
_arguments -C \ _arguments -C \
':command:->command' \ ':command:->command' \
'*::options:->options' '*::options:->options'
case $state in case $state in
(command) (command)
local -a subcommands
subcommands=( local -a subcommands
'start:Start a new feature branch.' subcommands=(
'finish:Finish a feature branch.' 'start:Start a new feature branch.'
'list:List all your feature branches. (Alias to `git flow feature`)' 'finish:Finish a feature branch.'
'publish:Publish this feature branch to origin.' 'list:List all your feature branches. (Alias to `git flow feature`)'
'track:Track a feature branch from origin.' 'publish:Publish this feature branch to origin.'
'diff:Show a diff of changes since this feature branched off.' 'track:Track a feature branch from origin.'
'rebase:Rebase a feature branch on top of develop.' 'diff:Show a diff of changes since this feature branched off.'
'rebase:Rebase a feature branch on top of develop.'
'checkout:Check out (switch to) the given feature branch.' 'checkout:Check out (switch to) the given feature branch.'
'pull:Pull a feature branch from a remote peer.' 'pull:Pull a feature branch from a remote peer.'
) )
_describe -t commands 'git flow feature' subcommands _describe -t commands 'git flow feature' subcommands
_arguments \ _arguments \
-v'[Verbose (more) output]' -v'[Verbose (more) output]'
;; ;;
(options) (options)
case $line[1] in case $line[1] in
(start)
_arguments \
-F'[Fetch from origin before performing finish]'\
':feature:__git_flow_feature_list'\
':branch-name:__git_flow_branch_names'
;;
(finish) (start)
_arguments \ _arguments \
-F'[Fetch from origin before performing finish]' \ -F'[Fetch from origin before performing finish]'\
-r'[Finish branch by rebasing first]'\ ':feature:__git_flow_feature_list'\
-k'[Keep branch after performing finish]'\ ':branch-name:__git_branch_names'
-D'[Force delete feature branch after finish]'\ ;;
':feature:__git_flow_feature_list'
;;
(publish) (finish)
_arguments \ _arguments \
':feature:__git_flow_feature_list'\ -F'[Fetch from origin before performing finish]' \
;; -r'[Finish branch by rebasing first]'\
-k'[Keep branch after performing finish]'\
-D'[Force delete feature branch after finish]'\
':feature:__git_flow_feature_list'
;;
(track) (publish)
_arguments \ _arguments \
':feature:__git_flow_feature_list'\ ':feature:__git_flow_feature_list'\
;; ;;
(diff) (track)
_arguments \ _arguments \
':branch:__git_flow_branch_names'\ ':feature:__git_flow_feature_list'\
;; ;;
(rebase) (diff)
_arguments \ _arguments \
-i'[Do an interactive rebase]' \ ':branch:__git_branch_names'\
':branch:__git_flow_branch_names' ;;
;;
(checkout) (rebase)
_arguments \ _arguments \
':branch:__git_flow_feature_list'\ -i'[Do an interactive rebase]' \
;; ':branch:__git_branch_names'
;;
(pull) (checkout)
_arguments \ _arguments \
':remote:__git_flow_remote'\ ':branch:__git_flow_feature_list'\
':branch:__git_flow_branch_names' ;;
;;
*) (pull)
_arguments \ _arguments \
-v'[Verbose (more) output]' ':remote:__git_remotes'\
;; ':branch:__git_branch_names'
esac ;;
;;
esac *)
_arguments \
-v'[Verbose (more) output]'
;;
esac
;;
esac
} }
__git-flow-support() { __git-flow-support ()
local curcontext="$curcontext" state line {
typeset -A opt_args local curcontext="$curcontext" state line
typeset -A opt_args
_arguments -C \ _arguments -C \
':command:->command' \ ':command:->command' \
'*::options:->options' '*::options:->options'
case $state in case $state in
(command) (command)
local -a subcommands local -a subcommands
subcommands=( subcommands=(
'start:Start a new support branch.' 'start:Start a new support branch.'
'list:List all your support branches. (Alias to `git flow support`)' 'list:List all your support branches. (Alias to `git flow support`)'
) )
_describe -t commands 'git flow support' subcommands _describe -t commands 'git flow support' subcommands
_arguments \ _arguments \
-v'[Verbose (more) output]' -v'[Verbose (more) output]'
;; ;;
(options) (options)
case $line[1] in case $line[1] in
(start) (start)
_arguments \ _arguments \
-F'[Fetch from origin before performing finish]'\ -F'[Fetch from origin before performing finish]'\
':feature:__git_flow_support_list'\ ':feature:__git_flow_support_list'\
':branch-name:__git_flow_branch_names' ':branch-name:__git_branch_names'
;; ;;
*) *)
_arguments \ _arguments \
-v'[Verbose (more) output]' -v'[Verbose (more) output]'
;; ;;
esac esac
;; ;;
esac esac
} }
__git_flow_version_list() { __git_flow_version_list ()
local expl {
local -a versions=(${${(f)"$(_call_program versions git flow release list 2> /dev/null | tr -d ' |*')"}}) local expl
__git_flow_command_successful || return declare -a versions
_wanted versions expl 'version' compadd $versions versions=(${${(f)"$(_call_program versions git flow release list 2> /dev/null | tr -d ' |*')"}})
__git_command_successful || return
_wanted versions expl 'version' compadd $versions
} }
__git_flow_feature_list() { __git_flow_feature_list ()
local expl {
local -a features=(${${(f)"$(_call_program features git flow feature list 2> /dev/null | tr -d ' |*')"}}) local expl
__git_flow_command_successful || return declare -a features
_wanted features expl 'feature' compadd $features features=(${${(f)"$(_call_program features git flow feature list 2> /dev/null | tr -d ' |*')"}})
__git_command_successful || return
_wanted features expl 'feature' compadd $features
} }
__git_flow_remote() { __git_remotes () {
local expl gitdir remotes local expl gitdir remotes
gitdir=$(_call_program gitdir git rev-parse --git-dir 2>/dev/null) gitdir=$(_call_program gitdir git rev-parse --git-dir 2>/dev/null)
__git_flow_command_successful || return __git_command_successful || return
remotes=(${${(f)"$(_call_program remotes git config --get-regexp '"^remote\..*\.url$"')"}//#(#b)remote.(*).url */$match[1]}) remotes=(${${(f)"$(_call_program remotes git config --get-regexp '"^remote\..*\.url$"')"}//#(#b)remote.(*).url */$match[1]})
__git_flow_command_successful || return __git_command_successful || return
# TODO: Should combine the two instead of either or. # TODO: Should combine the two instead of either or.
if (( $#remotes > 0 )); then if (( $#remotes > 0 )); then
_wanted remotes expl remote compadd $* - $remotes _wanted remotes expl remote compadd $* - $remotes
else else
_wanted remotes expl remote _files $* - -W "($gitdir/remotes)" -g "$gitdir/remotes/*" _wanted remotes expl remote _files $* - -W "($gitdir/remotes)" -g "$gitdir/remotes/*"
fi fi
} }
__git_flow_hotfix_list() { __git_flow_hotfix_list ()
local expl {
local -a hotfixes=(${${(f)"$(_call_program hotfixes git flow hotfix list 2> /dev/null | tr -d ' |*')"}}) local expl
__git_flow_command_successful || return declare -a hotfixes
_wanted hotfixes expl 'hotfix' compadd $hotfixes hotfixes=(${${(f)"$(_call_program hotfixes git flow hotfix list 2> /dev/null | tr -d ' |*')"}})
__git_command_successful || return
_wanted hotfixes expl 'hotfix' compadd $hotfixes
} }
__git_flow_support_list() { __git_flow_support_list ()
local expl {
local -a support=(${${(f)"$(_call_program support git flow support list 2> /dev/null | tr -d ' |*')"}}) local expl
__git_flow_command_successful || return declare -a support
_wanted hotfixes expl 'support' compadd $support support=(${${(f)"$(_call_program support git flow support list 2> /dev/null | tr -d ' |*')"}})
__git_command_successful || return
_wanted hotfixes expl 'support' compadd $support
} }
__git_flow_branch_names() {
local expl
local -a branch_names=(${${(f)"$(_call_program branchrefs git for-each-ref --format='"%(refname)"' refs/heads 2>/dev/null)"}#refs/heads/})
__git_flow_command_successful || return
_wanted branch-names expl branch-name compadd $* - $branch_names __git_branch_names () {
local expl
declare -a branch_names
branch_names=(${${(f)"$(_call_program branchrefs git for-each-ref --format='"%(refname)"' refs/heads 2>/dev/null)"}#refs/heads/})
__git_command_successful || return
_wanted branch-names expl branch-name compadd $* - $branch_names
} }
__git_flow_command_successful() { __git_command_successful () {
if (( ${#pipestatus:#0} > 0 )); then if (( ${#pipestatus:#0} > 0 )); then
_message 'not a git repository' _message 'not a git repository'
return 1 return 1
fi fi
return 0 return 0
} }
_git-flow "$@" _git-flow "$@"

View File

@ -13,16 +13,7 @@
# #
# ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------
_arguments -s \ _arguments -s '(- *)'{-h,--help}'[display this help and exit]' \
'(- *)'{-h,--help}'[display this help and exit]' \
'(- *)'{-v,--version}'[display version information and exit]' \ '(- *)'{-v,--version}'[display version information and exit]' \
{-t,--traditional}'[use traditional greeting]' \ {-t,--traditional}'[use traditional greeting]' \
{-g,--greeting=}'[use TEXT as the greeting message]:TEXT' {-g,--greeting=}'[use TEXT as the greeting message]:TEXT'
# Local Variables:
# mode: Shell-Script
# sh-indentation: 2
# indent-tabs-mode: nil
# sh-basic-offset: 2
# End:
# vim: ft=zsh sw=2 ts=2 et

View File

@ -284,11 +284,3 @@ while (( $#state )); do
done done
return ret return ret
# Local Variables:
# mode: Shell-Script
# sh-indentation: 2
# indent-tabs-mode: nil
# sh-basic-offset: 2
# End:
# vim: ft=zsh sw=2 ts=2 et

View File

@ -84,11 +84,3 @@ _kitchen_instances() {
} }
_kitchen "$@" _kitchen "$@"
# Local Variables:
# mode: Shell-Script
# sh-indentation: 2
# indent-tabs-mode: nil
# sh-basic-offset: 2
# End:
# vim: ft=zsh sw=2 ts=2 et

View File

@ -230,7 +230,7 @@ _language_codes() {
case $command in case $command in
ISO-639-1) ISO-639-1)
_language_codes_${${command//-/_}:l} "${@[1,-2]}" && ret=0 _language_codes_${${command//-/_}:l} "${@[1,-2]}" && ret=0
;; ;;
*) *)
_message "unknown command: $command" _message "unknown command: $command"

View File

@ -154,11 +154,3 @@ case $state in
esac esac
return ret return ret
# Local Variables:
# mode: Shell-Script
# sh-indentation: 2
# indent-tabs-mode: nil
# sh-basic-offset: 2
# End:
# vim: ft=zsh sw=2 ts=2 et

346
src/_mix
View File

@ -45,198 +45,196 @@
local -a _1st_arguments local -a _1st_arguments
_1st_arguments=( _1st_arguments=(
'app.start:Starts all registered apps' 'app.start:Starts all registered apps'
'app.tree:Prints the application tree' 'app.tree:Prints the application tree'
'archive:Lists installed archives' 'archive:Lists installed archives'
'archive.build:Archives this project into a .ez file' 'archive.build:Archives this project into a .ez file'
'archive.install:Installs an archive locally' 'archive.install:Installs an archive locally'
'archive.uninstall:Uninstalls archives' 'archive.uninstall:Uninstalls archives'
'clean:Deletes generated application files' 'clean:Deletes generated application files'
'cmd:Executes the given command' 'cmd:Executes the given command'
'compile:Compiles source files' 'compile:Compiles source files'
'deps:Lists dependencies and their status' 'deps:Lists dependencies and their status'
"deps.clean:Deletes the given dependencies' files" "deps.clean:Deletes the given dependencies' files"
'deps.compile:Compiles dependencies' 'deps.compile:Compiles dependencies'
'deps.get:Gets all out of date dependencies' 'deps.get:Gets all out of date dependencies'
'deps.tree:Prints the dependency tree' 'deps.tree:Prints the dependency tree'
'deps.unlock:Unlocks the given dependencies' 'deps.unlock:Unlocks the given dependencies'
'deps.update:Updates the given dependencies' 'deps.update:Updates the given dependencies'
'do:Executes the tasks separated by comma' 'do:Executes the tasks separated by comma'
'ecto:Prints Ecto help information' 'ecto:Prints Ecto help information'
'ecto.create:Creates the repository storage' 'ecto.create:Creates the repository storage'
'ecto.drop:Drops the repository storage' 'ecto.drop:Drops the repository storage'
'ecto.dump:Dumps the repository database structure' 'ecto.dump:Dumps the repository database structure'
'ecto.gen.migration:Generates a new migration for the repo' 'ecto.gen.migration:Generates a new migration for the repo'
'ecto.gen.repo:Generates a new repository' 'ecto.gen.repo:Generates a new repository'
'ecto.load:Loads previously dumped database structure' 'ecto.load:Loads previously dumped database structure'
'ecto.migrate:Runs the repository migrations' 'ecto.migrate:Runs the repository migrations'
'ecto.migrations:Displays the repository migration status' 'ecto.migrations:Displays the repository migration status'
'ecto.rollback:Rolls back the repository migrations' 'ecto.rollback:Rolls back the repository migrations'
'escript:Lists installed escripts' 'escript:Lists installed escripts'
'escript.build:Builds an escript for the project' 'escript.build:Builds an escript for the project'
'escript.install:Installs an escript locally' 'escript.install:Installs an escript locally'
'escript.uninstall:Uninstalls escripts' 'escript.uninstall:Uninstalls escripts'
'gettext.extract:Extracts translations from source code' 'gettext.extract:Extracts translations from source code'
'gettext.merge:Merge template files into translation files' 'gettext.merge:Merge template files into translation files'
'help:Prints help information for tasks' 'help:Prints help information for tasks'
'hex:Prints Hex help information' 'hex:Prints Hex help information'
'hex.build:Builds a new package version locally' 'hex.build:Builds a new package version locally'
'hex.config:Reads, updates or deletes Hex config' 'hex.config:Reads, updates or deletes Hex config'
'hex.docs:Fetch or open documentation of a package' 'hex.docs:Fetch or open documentation of a package'
'hex.info:Prints Hex information' 'hex.info:Prints Hex information'
'hex.key:Manages Hex API key' 'hex.key:Manages Hex API key'
'hex.outdated:Shows outdated Hex deps for the current project' 'hex.outdated:Shows outdated Hex deps for the current project'
'hex.owner:Manages Hex package ownership' 'hex.owner:Manages Hex package ownership'
'hex.public_keys:Manages Hex public keys' 'hex.public_keys:Manages Hex public keys'
'hex.publish:Publishes a new package version' 'hex.publish:Publishes a new package version'
'hex.retire:Retires a package version' 'hex.retire:Retires a package version'
'hex.search:Searches for package names' 'hex.search:Searches for package names'
'hex.user:Registers or manages Hex user' 'hex.user:Registers or manages Hex user'
'loadconfig:Loads and persists the given configuration' 'loadconfig:Loads and persists the given configuration'
'local:Lists local tasks' 'local:Lists local tasks'
'local.hex:Installs Hex locally' 'local.hex:Installs Hex locally'
'local.phoenix:Updates Phoenix locally' 'local.phoenix:Updates Phoenix locally'
'local.phx:Updates the Phoenix project generator locally' 'local.phx:Updates the Phoenix project generator locally'
'local.public_keys:Manages public keys' 'local.public_keys:Manages public keys'
'local.rebar:Installs Rebar locally' 'local.rebar:Installs Rebar locally'
'new:Creates a new Elixir project' 'new:Creates a new Elixir project'
'phoenix.gen.html:Generates controller, model and views for an HTML based resource' 'phoenix.gen.html:Generates controller, model and views for an HTML based resource'
'phoenix.server:Starts applications and their servers' 'phoenix.server:Starts applications and their servers'
'phx.digest:Digests and compresses static files' 'phx.digest:Digests and compresses static files'
'phx.digest.clean:Removes old versions of static assets.' 'phx.digest.clean:Removes old versions of static assets.'
'phx.gen.auth:Generates a flexible, pre-built authentication system' 'phx.gen.auth:Generates a flexible, pre-built authentication system'
'phx.gen.channel:Generates a Phoenix channel' 'phx.gen.channel:Generates a Phoenix channel'
'phx.gen.context:Generates a context with functions around an Ecto schema' 'phx.gen.context:Generates a context with functions around an Ecto schema'
'phx.gen.html:Generates controller, views, and context for an HTML resource' 'phx.gen.html:Generates controller, views, and context for an HTML resource'
'phx.gen.live:Generates controller, context and helper for a LiveView resource' 'phx.gen.live:Generates controller, context and helper for a LiveView resource'
'phx.gen.json:Generates controller, views, and context for a JSON resource' 'phx.gen.json:Generates controller, views, and context for a JSON resource'
'phx.gen.presence:Generates a Presence tracker' 'phx.gen.presence:Generates a Presence tracker'
'phx.gen.schema:Generates an Ecto schema and migration file' 'phx.gen.schema:Generates an Ecto schema and migration file'
'phx.gen.secret:Generates a secret' 'phx.gen.secret:Generates a secret'
'phx.new:Creates a new Phoenix application' 'phx.new:Creates a new Phoenix application'
'phx.new.ecto:Creates a new Ecto project within an umbrella project' 'phx.new.ecto:Creates a new Ecto project within an umbrella project'
'phx.new.web:Creates a new Phoenix web project within an umbrella project' 'phx.new.web:Creates a new Phoenix web project within an umbrella project'
'phx.routes:Prints all routes' 'phx.routes:Prints all routes'
'phx.server:Starts applications and their servers' 'phx.server:Starts applications and their servers'
'profile.fprof:Profiles the given file or expression with fprof' 'profile.fprof:Profiles the given file or expression with fprof'
'run:Runs the given file or expression' 'run:Runs the given file or expression'
"test:Runs a project's tests" "test:Runs a project's tests"
'xref:Performs cross reference checks' 'xref:Performs cross reference checks'
'--help:Describe available tasks' '--help:Describe available tasks'
'--version:Prints the Elixir version information' '--version:Prints the Elixir version information'
) )
__task_list () { __task_list ()
local expl {
declare -a tasks local expl
declare -a tasks
tasks=( tasks=(
'app.start' 'app.start'
'app.tree' 'app.tree'
'archive' 'archive'
'archive.build' 'archive.build'
'archive.install' 'archive.install'
'archive.uninstall' 'archive.uninstall'
'clean' 'clean'
'cmd' 'cmd'
'compile' 'compile'
'deps' 'deps'
'deps.clean' 'deps.clean'
'deps.compile' 'deps.compile'
'deps.get' 'deps.get'
'deps.tree' 'deps.tree'
'deps.unlock' 'deps.unlock'
'deps.update' 'deps.update'
'do' 'do'
'ecto' 'ecto'
'ecto.create' 'ecto.create'
'ecto.drop' 'ecto.drop'
'ecto.dump' 'ecto.dump'
'ecto.gen.migration' 'ecto.gen.migration'
'ecto.gen.repo' 'ecto.gen.repo'
'ecto.load' 'ecto.load'
'ecto.migrate' 'ecto.migrate'
'ecto.migrations' 'ecto.migrations'
'ecto.rollback' 'ecto.rollback'
'escript' 'escript'
'escript.build' 'escript.build'
'escript.install' 'escript.install'
'escript.uninstall' 'escript.uninstall'
'gettext.extract' 'gettext.extract'
'gettext.merge' 'gettext.merge'
'format' 'format'
'help' 'help'
'hex' 'hex'
'hex.build' 'hex.build'
'hex.config' 'hex.config'
'hex.docs' 'hex.docs'
'hex.info' 'hex.info'
'hex.key' 'hex.key'
'hex.outdated' 'hex.outdated'
'hex.owner' 'hex.owner'
'hex.public_keys' 'hex.public_keys'
'hex.publish' 'hex.publish'
'hex.retire' 'hex.retire'
'hex.search' 'hex.search'
'hex.user' 'hex.user'
'loadconfig' 'loadconfig'
'local' 'local'
'local.hex' 'local.hex'
'local.public_keys' 'local.public_keys'
'local.rebar' 'local.rebar'
'new' 'new'
'phoenix.gen.html' 'phoenix.gen.html'
'phoenix.server' 'phoenix.server'
'phx.digest' 'phx.digest'
'phx.digest.clean' 'phx.digest.clean'
'phx.gen.auth' 'phx.gen.auth'
'phx.gen.channel' 'phx.gen.channel'
'phx.gen.context' 'phx.gen.context'
'phx.gen.html' 'phx.gen.html'
'phx.gen.live' 'phx.gen.live'
'phx.gen.json' 'phx.gen.json'
'phx.gen.presence' 'phx.gen.presence'
'phx.gen.schema' 'phx.gen.schema'
'phx.gen.secret' 'phx.gen.secret'
'phx.routes' 'phx.routes'
'phx.server' 'phx.server'
'profile.fprof' 'profile.fprof'
'run' 'run'
'test' 'test'
'xref' 'xref'
) )
_wanted tasks expl 'help' compadd $tasks _wanted tasks expl 'help' compadd $tasks
} }
local expl local expl
local curcontext="$curcontext" state line local curcontext="$curcontext" state line
typeset -A opt_args typeset -A opt_args
_arguments -C \ _arguments -C \
':command:->command' \ ':command:->command' \
'*::options:->options' '*::options:->options'
case $state in case $state in
(command) (command)
_describe -t commands "mix subcommand" _1st_arguments _describe -t commands "mix subcommand" _1st_arguments
;; return
;;
(options) (options)
case $line[1] in case $line[1] in
(help) (help)
_arguments ':feature:__task_list' _arguments ':feature:__task_list'
;; return
;;
(test|format|run) (test|format|run)
_arguments ':PATH:_files' _arguments ':PATH:_files'
;; return
;;
esac esac
;; ;;
esac esac
# Local Variables:
# mode: Shell-Script
# sh-indentation: 2
# indent-tabs-mode: nil
# sh-basic-offset: 2
# End:
# vim: ft=zsh sw=2 ts=2 et

View File

@ -106,11 +106,3 @@ _describe 'command' instances
# Reference: # Reference:
# https://zsh.sourceforge.net/Doc/Release/Completion-System.html # https://zsh.sourceforge.net/Doc/Release/Completion-System.html
# https://github.com/zsh-users/zsh-completions/blob/master/zsh-completions-howto.org # https://github.com/zsh-users/zsh-completions/blob/master/zsh-completions-howto.org
# Local Variables:
# mode: Shell-Script
# sh-indentation: 2
# indent-tabs-mode: nil
# sh-basic-offset: 2
# End:
# vim: ft=zsh sw=2 ts=2 et

View File

@ -104,11 +104,11 @@ _mvn() {
if [[ $maven_version == 'maven4' ]]; then if [[ $maven_version == 'maven4' ]]; then
opts+=( opts+=(
"($excl_opts -canf --cache-artifact-not-found)"{-canf,--cache-artifact-not-found}'[defines caching behaviour for not found artifacts]: :(false true)' "($excl_opts -canf --cache-artifact-not-found)"{-canf,--cache-artifact-not-found}'[defines caching behaviour for not found artifacts]: :(false true)'
"($excl_opts -fos --fail-on-severity)"{-fos,--fail-on-severity}'[configure which severity of logging should cause the build to fail]: :(WARN ERROR)' "($excl_opts -fos --fail-on-severity)"{-fos,--fail-on-severity}'[configure which severity of logging should cause the build to fail]: :(WARN ERROR)'
"($excl_opts -itr --ignore-transitive-repositories)"{-itr,--ignore-transitive-repositories}'[if set, Maven will ignore remote repositories introduced by transitive dependencies]' "($excl_opts -itr --ignore-transitive-repositories)"{-itr,--ignore-transitive-repositories}'[if set, Maven will ignore remote repositories introduced by transitive dependencies]'
"($excl_opts --non-interactive)"'--non-interactive[run in non-interactive mode. Alias for --batch-mode]' "($excl_opts --non-interactive)"'--non-interactive[run in non-interactive mode. Alias for --batch-mode]'
"($excl_opts -r --resume)"{-r,--resume}'[resume reactor from the last failed project, using the resume.properties file in the build directory]' "($excl_opts -r --resume)"{-r,--resume}'[resume reactor from the last failed project, using the resume.properties file in the build directory]'
) )
fi fi

View File

@ -144,11 +144,3 @@ local options=(
) )
_arguments $options "*::func_name:($func_names)" _arguments $options "*::func_name:($func_names)"
# Local Variables:
# mode: Shell-Script
# sh-indentation: 2
# indent-tabs-mode: nil
# sh-basic-offset: 2
# End:
# vim: ft=zsh sw=2 ts=2 et

View File

@ -12,280 +12,278 @@
# * Markus Richter ( https://github.com/mqus , <mqus@disroot.org>) # * Markus Richter ( https://github.com/mqus , <mqus@disroot.org>)
# #
# ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------
_nft(){ _nft(){
local -a rules states prev args families options descriptors local -a rules states prev args families options descriptors
local state="start" line nextstate cmd_obj cmd_subcmd cmd_fam cmd_tab cmd_chain #curcontext="$curcontext" local state="start" line nextstate cmd_obj cmd_subcmd cmd_fam cmd_tab cmd_chain #curcontext="$curcontext"
options=( options=(
'(-)'{-h,--help}'[show help]' '(-)'{-h,--help}'[show help]' \
'(-)'{-v,--version}'[print version information]' '(-)'{-v,--version}'[print version information]' \
"(-i --interactive)"{-i,--interactive}'[read input from interactive CLI]: :->end' "(-i --interactive)"{-i,--interactive}'[read input from interactive CLI]: :->end' \
"(-f --file)"{-f,--file}'[read input from <filename>]:nftables rule file:_files' "(-f --file)"{-f,--file}'[read input from <filename>]:nftables rule file:_files' \
'(-c --check -n --numeric -N)'{-c,--check}"[check command's validity without actually applying the changes]" '(-c --check -n --numeric -N)'{-c,--check}"[check command's validity without actually applying the changes]" \
'(-j --json)'{-j,--json}'[format output in json]' '(-j --json)'{-j,--json}'[format output in json]' \
'(-c --check -N)*'{-n,--numeric}'[can be specified up to 3 times, Shows 1:network addresses(default behaviour), 2:internet services (port numbers) and 3:protocols, user IDs, and group IDs numerically]' '(-c --check -N)*'{-n,--numeric}'[can be specified up to 3 times, Shows 1:network addresses(default behaviour), 2:internet services (port numbers) and 3:protocols, user IDs, and group IDs numerically]' \
'(-s --stateless)'{-s,--stateless}'[omit stateful information of ruleset]' '(-s --stateless)'{-s,--stateless}'[omit stateful information of ruleset]' \
'(-N -n --numeric -c --check)'-N'[translate IP addresses to names]' '(-N -n --numeric -c --check)'-N'[translate IP addresses to names]' \
'(-a --handle)'{-a,--handle}'[output rule handle]' '(-a --handle)'{-a,--handle}'[output rule handle]' \
'(-e --echo)'{-e,--echo}'[echo what has been added, inserted or replaced]' '(-e --echo)'{-e,--echo}'[echo what has been added, inserted or replaced]' \
{-I,--includepath}'[add specified directory to the paths searched for include files]:include directory [/usr/share]:include directory:_directories' {-I,--includepath}'[add specified directory to the paths searched for include files]:include directory [/usr/share]:include directory:_directories'
) )
# start a state machine. The state is modified by _arguments if the # start a state machine. The state is modified by _arguments if the
# current argument (descriptors) cannot be completed. Each state has to define is successive state and the # current argument (descriptors) cannot be completed. Each state has to define is successive state and the
# 'descriptors' for _arguments, which essentially tells _arguments how to complete # 'descriptors' for _arguments, which essentially tells _arguments how to complete
local _i=0 local _i=0
while true;do while true;do
(( _i+=1 )) (( _i+=1 ))
#Guard for endless loops #Guard for endless loops
[[ $_i -gt 100 ]] && return 1 [[ $_i -gt 100 ]] && return 1
descriptors=() descriptors=()
nextstate="end" nextstate="end"
case $state in case $state in
(start) (start)
##if line is empty (at the start) or ends with semicolon, autocomplete subcommands, ##if line is empty (at the start) or ends with semicolon, autocomplete subcommands,
# else if we are after a space,complete a semicolon (end the current nft command) and start anew # else if we are after a space,complete a semicolon (end the current nft command) and start anew
if [[ $line[1] = "" || $line[1] =~ ';$' ]] ; then if [[ $line[1] = "" || $line[1] =~ ';$' ]] ; then
descriptors=( ":: :_nft_subcommands" ) descriptors=( ":: :_nft_subcommands" )
nextstate="category" nextstate="category"
else else
if [[ $words =~ ' $' ]]; then if [[ $words =~ ' $' ]]; then
descriptors=(':: :(\;)') descriptors=(':: :(\;)')
else else
descriptors=(':argument: ') descriptors=(':argument: ')
fi fi
nextstate="start"
fi
;;
(category)
case $line[1] in
(add | list | flush | delete | create | rename | insert | replace | reset)
descriptors=( ":: :_nft_${line[1]}" )
nextstate=$line[1]
;;
(monitor)
descriptors=( ":: : _nft_mon_filter" )
nextstate="mon1"
;;
(export)
descriptors=( ":: :(ruleset)" ":: :_nft_out_format" )
nextstate="preend"
;;
(describe)
descriptors=( ":expression: ")
nextstate="start" #x restart
;;
(*)
return 1;
;;
esac
#descriptors=( "(ruleset)" )
#nextstate="end"
;;
(mon1)
case $line[1] in
(new | destroy)
# descriptors=( ":: :_nft_mon_keywords" ":: :_nft_out_format")
descriptors=( ":: : _nft_mon_keywords")
nextstate="mon1"
;;
(tables | chains | sets | rules | elements | ruleset)
descriptors=( ":: : _nft_out_format")
nextstate="preend"
;;
esac
;;
#all completions for create and insert match with the completions of add
(create | insert)
state="add"
;|
#all completions for reset and flush match with the completions of list
(reset | flush)
state="list"
;|
#(add(^table)/create(^table)/delete/flush(^ruleset)/insert/list(^ruleset)/rename/replace)[family]table
(reset | delete | insert | rename | replace | add | create | flush | list)
if [[ $state = "add" && $line[1] = "table" ]]; then
descriptors=( ":: :_nft_families" ":table name:")
nextstate="start" #x restart
elif [[ $state = "list" && ( $line[1] = "ruleset" || $line[1] = "tables" ) ]]; then
descriptors=( ":: :_nft_families")
nextstate="start" #x restart
elif [[ $state = "delete" && $line[1] = "table" ]]; then
descriptors=(": : _nft_table all-handle")
nextstate="tcomplete-delete-table"
else
cmd_obj=$line[1]
cmd_subcmd=$state
descriptors=(": : _nft_table all")
nextstate="tcomplete"
fi
;;
(tcomplete-delete-table)
# if only a family was completed, complete the table name.
case $line[1] in
(arp | bridge | inet | ip | ip6 | netdev)
descriptors=(": : _nft_table ${line[1]}-handle")
cmd_fam=$line[1]
;;
# if 'handle' was completed, complete the handle number.
(handle)
descriptors=(": : _nft_table_handle_all " )
;;
# else, complete nothing and go to the next state. default family is 'ip'
(*)
descriptors=()
cmd_fam="ip"
;;
esac
nextstate="delete-table"
;;
(tcomplete)
# if only a family was completed, complete the table name.
case $line[1] in
(arp | bridge | inet | ip | ip6 | netdev)
descriptors=(": : _nft_table ${line[1]}")
cmd_fam=$line[1]
;;
# else, complete nothing and go to the next state. default family is 'ip'
(*)
descriptors=()
cmd_fam="ip"
;;
esac
nextstate="$cmd_subcmd-$cmd_obj"
;;
(list-table)
descriptors=(":: :(\;)")
nextstate="start"
;;
(delete-table)
#if family AND handle were input, complete handle number for given family.
if [[ $line[1] == "handle" ]]; then
descriptors=(":table handle: _nft_table_handle $cmd_fam" )
else
descriptors=()
fi
nextstate="start"
;;
(delete-chain | delete-set | delete-quota | delete-counter | delete-ct\\ helper)
cmd_tab=$line[1]
descriptors=(": : _nft_object $cmd_fam $cmd_tab $cmd_obj true")
nextstate="delete-obj-handle"
;;
(delete-obj-handle)
if [[ $line[1] == "handle" ]]; then
descriptors=(": : _nft_object_handle $cmd_fam $cmd_tab $cmd_obj")
else
descriptors=(": :(\;)")
fi
nextstate="start"
;;
(add-chain)
descriptors=(":chain name:")
nextstate="start"
;;
(rename-chain)
cmd_tab=$line[1]
descriptors=(": : _nft_object $cmd_fam $cmd_tab chain false")
nextstate="add-chain"
;;
(replace-rule | delete-rule)
cmd_tab=$line[1]
descriptors=(": : _nft_object $cmd_fam $cmd_tab chain false")
nextstate="repdel-rule"
;;
(repdel-rule)
cmd_chain=$line[1]
descriptors=(": :(handle)" ": : _nft_rule_handle $cmd_fam $cmd_tab ${line[1]}")
if [[ $cmd_subcmd = "replace" ]];then
nextstate="rule-stmt"
else
nextstate="start"
fi
;;
(add-rule)
cmd_tab=$line[1]
descriptors=(": : _nft_object $cmd_fam $cmd_tab chain false")
nextstate="add-rule-2"
;;
(add-rule-2)
cmd_chain=$line[1]
descriptors=(": :(handle index position)")
nextstate="add-rule-3"
;;
(add-rule-3)
case $line[1] in
(index | position)
descriptors=(":${line[1]}:")
;;
(handle)
descriptors=(": : _nft_rule_handle $cmd_fam $cmd_tab $cmd_chain")
;;
(*)
descriptors=()
;;
esac
nextstate="rule-stmt"
;;
(rule-stmt)
#TODO
# _nft_rule $cmd_fam $cmd_tab $cmd_chain\
# && return 0;
descriptors=(":expression: ")
nextstate="start"
;;
(list-set | list-map | delete-map | list-chain | list-flowtable | delete-flowtable | list-ct\\ helper | list-counter | list-quota | list-meter)
cmd_tab=$line[1]
descriptors=(": : _nft_object $cmd_fam $cmd_tab $cmd_obj false")
nextstate="start" nextstate="start"
;; fi
(add-element | delete-element) ;;
cmd_tab=$line[1] (category)
descriptors=(": : _nft_object $cmd_fam $cmd_tab '\(map\|set\)' false") case $line[1] in
nextstate="start" (add | list | flush | delete | create | rename | insert | replace | reset)
;; descriptors=( ":: :_nft_${line[1]}" )
#TODO: nextstate=$line[1]
#(add-set | add-map) ;;
#(add-flowtable) (monitor)
#("add-ct\ helper") descriptors=( ":: : _nft_mon_filter" )
#(add-counter) nextstate="mon1"
#(add-quota) ;;
(export)
(*) descriptors=( ":: :(ruleset)" ":: :_nft_out_format" )
return 1; nextstate="preend"
;; ;;
(describe)
descriptors=( ":expression: ")
nextstate="start" #x restart
;;
(*)
return 1;
;;
esac esac
_arguments -C -s \
"${options[@]}" \
"${descriptors[@]}" \
"*:: :->$nextstate" \
&& return 0;
done #descriptors=( "(ruleset)" )
#nextstate="end"
;;
(mon1)
case $line[1] in
(new | destroy)
# descriptors=( ":: :_nft_mon_keywords" ":: :_nft_out_format")
descriptors=( ":: : _nft_mon_keywords")
nextstate="mon1"
;;
(tables | chains | sets | rules | elements | ruleset)
descriptors=( ":: : _nft_out_format")
nextstate="preend"
;;
esac
;;
#all completions for create and insert match with the completions of add
(create | insert)
state="add"
;|
#all completions for reset and flush match with the completions of list
(reset | flush)
state="list"
;|
#(add(^table)/create(^table)/delete/flush(^ruleset)/insert/list(^ruleset)/rename/replace)[family]table
(reset | delete | insert | rename | replace | add | create | flush | list)
if [[ $state = "add" && $line[1] = "table" ]]; then
descriptors=( ":: :_nft_families" ":table name:")
nextstate="start" #x restart
elif [[ $state = "list" && ( $line[1] = "ruleset" || $line[1] = "tables" ) ]]; then
descriptors=( ":: :_nft_families")
nextstate="start" #x restart
elif [[ $state = "delete" && $line[1] = "table" ]]; then
descriptors=(": : _nft_table all-handle")
nextstate="tcomplete-delete-table"
else
cmd_obj=$line[1]
cmd_subcmd=$state
descriptors=(": : _nft_table all")
nextstate="tcomplete"
fi
;;
(tcomplete-delete-table)
# if only a family was completed, complete the table name.
case $line[1] in
(arp | bridge | inet | ip | ip6 | netdev)
descriptors=(": : _nft_table ${line[1]}-handle")
cmd_fam=$line[1]
;;
# if 'handle' was completed, complete the handle number.
(handle)
descriptors=(": : _nft_table_handle_all " )
;;
# else, complete nothing and go to the next state. default family is 'ip'
(*)
descriptors=()
cmd_fam="ip"
;;
esac
nextstate="delete-table"
;;
(tcomplete)
# if only a family was completed, complete the table name.
case $line[1] in
(arp | bridge | inet | ip | ip6 | netdev)
descriptors=(": : _nft_table ${line[1]}")
cmd_fam=$line[1]
;;
# else, complete nothing and go to the next state. default family is 'ip'
(*)
descriptors=()
cmd_fam="ip"
;;
esac
nextstate="$cmd_subcmd-$cmd_obj"
;;
(list-table)
descriptors=(":: :(\;)")
nextstate="start"
;;
(delete-table)
#if family AND handle were input, complete handle number for given family.
if [[ $line[1] == "handle" ]]; then
descriptors=(":table handle: _nft_table_handle $cmd_fam" )
else
descriptors=()
fi
nextstate="start"
;;
(delete-chain | delete-set | delete-quota | delete-counter | delete-ct\\ helper)
cmd_tab=$line[1]
descriptors=(": : _nft_object $cmd_fam $cmd_tab $cmd_obj true")
nextstate="delete-obj-handle"
;;
(delete-obj-handle)
if [[ $line[1] == "handle" ]]; then
descriptors=(": : _nft_object_handle $cmd_fam $cmd_tab $cmd_obj")
else
descriptors=(": :(\;)")
fi
nextstate="start"
;;
(add-chain)
descriptors=(":chain name:")
nextstate="start"
;;
(rename-chain)
cmd_tab=$line[1]
descriptors=(": : _nft_object $cmd_fam $cmd_tab chain false")
nextstate="add-chain"
;;
(replace-rule | delete-rule)
cmd_tab=$line[1]
descriptors=(": : _nft_object $cmd_fam $cmd_tab chain false")
nextstate="repdel-rule"
;;
(repdel-rule)
cmd_chain=$line[1]
descriptors=(": :(handle)" ": : _nft_rule_handle $cmd_fam $cmd_tab ${line[1]}")
if [[ $cmd_subcmd = "replace" ]];then
nextstate="rule-stmt"
else
nextstate="start"
fi
;;
(add-rule)
cmd_tab=$line[1]
descriptors=(": : _nft_object $cmd_fam $cmd_tab chain false")
nextstate="add-rule-2"
;;
(add-rule-2)
cmd_chain=$line[1]
descriptors=(": :(handle index position)")
nextstate="add-rule-3"
;;
(add-rule-3)
case $line[1] in
(index | position)
descriptors=(":${line[1]}:")
;;
(handle)
descriptors=(": : _nft_rule_handle $cmd_fam $cmd_tab $cmd_chain")
;;
(*)
descriptors=()
;;
esac
nextstate="rule-stmt"
;;
(rule-stmt)
#TODO
# _nft_rule $cmd_fam $cmd_tab $cmd_chain\
# && return 0;
descriptors=(":expression: ")
nextstate="start"
;;
(list-set | list-map | delete-map | list-chain | list-flowtable | delete-flowtable | list-ct\\ helper | list-counter | list-quota | list-meter)
cmd_tab=$line[1]
descriptors=(": : _nft_object $cmd_fam $cmd_tab $cmd_obj false")
nextstate="start"
;;
(add-element | delete-element)
cmd_tab=$line[1]
descriptors=(": : _nft_object $cmd_fam $cmd_tab '\(map\|set\)' false")
nextstate="start"
;;
#TODO:
#(add-set | add-map)
#(add-flowtable)
#("add-ct\ helper")
#(add-counter)
#(add-quota)
(*)
return 1;
;;
esac
_arguments -C -s \
"${options[@]}" \
"${descriptors[@]}" \
"*:: :->$nextstate" \
&& return 0;
done
} # end _nft } # end _nft
_nft_subcommands(){ _nft_subcommands(){
local commands=( local commands=(
'add:add a table, chain, rule, set, map, or object' 'add:add a table, chain, rule, set, map, or object'
'list:list a ruleset, table, chain, set, map, or object' 'list:list a ruleset, table, chain, set, map, or object'
'flush:flush (delete everything from) a ruleset, table, chain, set, or map' 'flush:flush (delete everything from) a ruleset, table, chain, set, or map'
'export:print the ruleset in a machine readable format (json or xml)' 'export:print the ruleset in a machine readable format (json or xml)'
'delete:delete a table, chain, rule, set, element, map, or object' 'delete:delete a table, chain, rule, set, element, map, or object'
'create:similar to add but returns an error for existing chain' 'create:similar to add but returns an error for existing chain'
'rename:rename the specified chain' 'rename:rename the specified chain'
'insert:similar to the add command, but the rule is prepended to the beginning of the chain or before the rule at the given position' 'insert:similar to the add command, but the rule is prepended to the beginning of the chain or before the rule at the given position'
'replace:similar to the add command, but replaces the specified rule' 'replace:similar to the add command, but replaces the specified rule'
'reset:list-and-reset stateful object' 'reset:list-and-reset stateful object'
'monitor:listen to Netlink events' 'monitor:listen to Netlink events'
'describe:show information about the type of an expression and its data type' 'describe:show information about the type of an expression and its data type'
) )
_describe -t commands 'nft subcommand' commands "$@" _describe -t commands 'nft subcommand' commands "$@"
} }
_nft_mon_filter(){ _nft_mon_filter(){
local monitor_filters=( local monitor_filters=(
'new:show only events of created objects' 'new:show only events of created objects'

View File

@ -1112,22 +1112,22 @@ _openssl_genpkey() {
done done
_arguments \ _arguments \
'(- *)-help[print help message]' \ '(- *)-help[print help message]' \
'-out[output private key file]:file:_files' \ '-out[output private key file]:file:_files' \
'-outpubkey[output public key file]:file:_files' \ '-outpubkey[output public key file]:file:_files' \
'-outform[output format]:format:(DER PEM)' \ '-outform[output format]:format:(DER PEM)' \
'-verbose[output "status dots" while generating keys]' \ '-verbose[output "status dots" while generating keys]' \
'-quiet[do not output "status dots" while generating keys]' \ '-quiet[do not output "status dots" while generating keys]' \
'-pass[output file password source]:source:_openssl_pass_phrase_options' \ '-pass[output file password source]:source:_openssl_pass_phrase_options' \
$cipher_flags[@] \ $cipher_flags[@] \
'-algorithm[public key algorithm]:alg:(($builtin_algorithms))' \ '-algorithm[public key algorithm]:alg:(($builtin_algorithms))' \
'-pkeyopt[public key algorithm option]:option' \ '-pkeyopt[public key algorithm option]:option' \
'-genparam[generate a set of parameters instead of a private key]' \ '-genparam[generate a set of parameters instead of a private key]' \
'-paramfile[file to supply public key parameters]:file:_files' \ '-paramfile[file to supply public key parameters]:file:_files' \
'-text[print an (unencrypted) text representation of private and public keys and parameters]' \ '-text[print an (unencrypted) text representation of private and public keys and parameters]' \
$openssl_random_state_options[@] \ $openssl_random_state_options[@] \
$openssl_provider_options[@] \ $openssl_provider_options[@] \
'-config[configuration file]:file:_files' '-config[configuration file]:file:_files'
} }
_openssl_genrsa() { _openssl_genrsa() {
@ -1441,17 +1441,17 @@ _openssl_pkcs12() {
_openssl_pkcs7() { _openssl_pkcs7() {
_arguments \ _arguments \
'(- *)-help[print help message]' \ '(- *)-help[print help message]' \
'-inform[input format]:format:(DER PEM)' \ '-inform[input format]:format:(DER PEM)' \
'-outform[output format]:format:(DER PEM)' \ '-outform[output format]:format:(DER PEM)' \
'-in[input file name]:file:_files' \ '-in[input file name]:file:_files' \
'-out[output file name]:file:_files' \ '-out[output file name]:file:_files' \
'-print[print out the full PKCS7 object]' \ '-print[print out the full PKCS7 object]' \
'-print_certs[print out any certificates or CRLs contained in the file]' \ '-print_certs[print out any certificates or CRLs contained in the file]' \
'-quiet[print out just the PEM-encoded certificates without any other output]' \ '-quiet[print out just the PEM-encoded certificates without any other output]' \
'-text[print out certificate details in full]' \ '-text[print out certificate details in full]' \
'-noout[do not output the encoded version of the PKCS#7 structure]' \ '-noout[do not output the encoded version of the PKCS#7 structure]' \
$openssl_provider_options[@] $openssl_provider_options[@]
} }
_openssl_pkcs8() { _openssl_pkcs8() {
@ -1460,51 +1460,51 @@ _openssl_pkcs8() {
) )
_arguments \ _arguments \
'(- *)-help[print help message]' \ '(- *)-help[print help message]' \
'-topk8[read a private key and write a PkCS#8 format key]' \ '-topk8[read a private key and write a PkCS#8 format key]' \
'-inform[input format]:format:(DER PEM)' \ '-inform[input format]:format:(DER PEM)' \
'-outform[output format]:format:(DER PEM)' \ '-outform[output format]:format:(DER PEM)' \
'-traditional[traditional format]' \ '-traditional[traditional format]' \
'-in[input file name]:file:_files' \ '-in[input file name]:file:_files' \
'-passin[input password source]:source:_openssl_pass_phrase_options' \ '-passin[input password source]:source:_openssl_pass_phrase_options' \
'-passout[output password source]:source:_openssl_pass_phrase_options' \ '-passout[output password source]:source:_openssl_pass_phrase_options' \
'-out[output file name]:files:_files' \ '-out[output file name]:files:_files' \
'-iter[number of iterations to create PKCS#8 containers]:count' \ '-iter[number of iterations to create PKCS#8 containers]:count' \
'-noiter[use 1 as iteration count]' \ '-noiter[use 1 as iteration count]' \
'-nocrypt[output unencrypted PrivateKeyInfo structure]' \ '-nocrypt[output unencrypted PrivateKeyInfo structure]' \
'-v2[algorithm for PKCS#5 v2.0]:alg:_openssl_cipher_algorithms' \ '-v2[algorithm for PKCS#5 v2.0]:alg:_openssl_cipher_algorithms' \
'-v2prf[PRF algorithm to use with PKCS#5 v2.0]:alg:(($prf_algorithms))' \ '-v2prf[PRF algorithm to use with PKCS#5 v2.0]:alg:(($prf_algorithms))' \
'-v1[algorithm for PKCS#5 v1.5 or PKCS#12]:alg:_openssl_cipher_algorithms' \ '-v1[algorithm for PKCS#5 v1.5 or PKCS#12]:alg:_openssl_cipher_algorithms' \
'-scrypt[use the script algorithm for private key encryption]' \ '-scrypt[use the script algorithm for private key encryption]' \
'-scrypt_N[scrypt "N" parameter]:n' \ '-scrypt_N[scrypt "N" parameter]:n' \
'-scrypt_r[scrypt "r" parameter]:r' \ '-scrypt_r[scrypt "r" parameter]:r' \
'-scrypt_p[scrypt "p" parameter]:p' \ '-scrypt_p[scrypt "p" parameter]:p' \
'-saltlen[length of the salt to use for the PBE algorithm]:length' \ '-saltlen[length of the salt to use for the PBE algorithm]:length' \
$openssl_random_state_options[@] \ $openssl_random_state_options[@] \
$openssl_provider_options[@] $openssl_provider_options[@]
} }
_openssl_pkey() { _openssl_pkey() {
_arguments \ _arguments \
'(- *)-help[print help message]' \ '(- *)-help[print help message]' \
$openssl_provider_options[@] \ $openssl_provider_options[@] \
'-check[check the consistency of a key pair for both public and private components]' \ '-check[check the consistency of a key pair for both public and private components]' \
'-pubcheck[check the correctness of either a public key or the public components of a key pair]' \ '-pubcheck[check the correctness of either a public key or the public components of a key pair]' \
'-in[input file or URI]:file_or_uri:_files' \ '-in[input file or URI]:file_or_uri:_files' \
'-inform[key input format]:format:(DER PEM P12 ENGINE)' \ '-inform[key input format]:format:(DER PEM P12 ENGINE)' \
'-passin[password source for the key input]:source:_openssl_pass_phrase_options' \ '-passin[password source for the key input]:source:_openssl_pass_phrase_options' \
'-pubin[read public key instead of private key]' \ '-pubin[read public key instead of private key]' \
'-out[output file name]' \ '-out[output file name]' \
'-outform[key output format]:format:(DER PEM)' \ '-outform[key output format]:format:(DER PEM)' \
'-cipher[cipher to encrypt the PEM encoded private key]:cipher:_openssl_ciphers' \ '-cipher[cipher to encrypt the PEM encoded private key]:cipher:_openssl_ciphers' \
'-passout[password source for the output file]:source:_openssl_pass_phrase_options' \ '-passout[password source for the output file]:source:_openssl_pass_phrase_options' \
'-traditional[use older "traditional" format]' \ '-traditional[use older "traditional" format]' \
'-pubout[output the public components]' \ '-pubout[output the public components]' \
'-noout[do not output the key in encoded form]' \ '-noout[do not output the key in encoded form]' \
'-text[output the various key components in plain text]' \ '-text[output the various key components in plain text]' \
'-text_pub[output only the public key components in text form]' \ '-text_pub[output only the public key components in text form]' \
'-ec_conv_form[specify how the points on the elliptic-curve curve are converted into octet strings]:type:(compressed uncompressed hybrid)' \ '-ec_conv_form[specify how the points on the elliptic-curve curve are converted into octet strings]:type:(compressed uncompressed hybrid)' \
'-ec_param_enc[specify how the elliptic curve parameters are encoded]:type:(named_curve explicit)' '-ec_param_enc[specify how the elliptic curve parameters are encoded]:type:(named_curve explicit)'
} }
_openssl_pkeyparam() { _openssl_pkeyparam() {
@ -1721,8 +1721,8 @@ _openssl_s_client() {
local tls_start_protocols=(smtp pop3 imap ftp xmpp xmpp-server irc postgres mysql lmtp nntp sieve ldap) local tls_start_protocols=(smtp pop3 imap ftp xmpp xmpp-server irc postgres mysql lmtp nntp sieve ldap)
_arguments \ _arguments \
'(- *)-help[print help message]' \ '(- *)-help[print help message]' \
'-ssl_config[section of the configuration file to configure the SSL_CTX object]:section' \ '-ssl_config[section of the configuration file to configure the SSL_CTX object]:section' \
'-connect[host and optional port to connect to]:host_port' \ '-connect[host and optional port to connect to]:host_port' \
'-host[host to connect to]:host' \ '-host[host to connect to]:host' \
'-port[port to connect to]:port' \ '-port[port to connect to]:port' \
@ -1835,129 +1835,129 @@ _openssl_s_client() {
_openssl_s_server() { _openssl_s_server() {
_arguments \ _arguments \
'(- *)-help[print help message]' \ '(- *)-help[print help message]' \
'-port[TCP port to listen on for connections(default: 4433)]:port' \ '-port[TCP port to listen on for connections(default: 4433)]:port' \
'-accept[optional TCP host and port to listen on for connections(default: *:4433)]:host_port' \ '-accept[optional TCP host and port to listen on for connections(default: *:4433)]:host_port' \
'-unix[Unix domain socket path]:path:_files' \ '-unix[Unix domain socket path]:path:_files' \
'(-4 -6)-4[use IPv4 only]' \ '(-4 -6)-4[use IPv4 only]' \
'(-4 -6)-6[use IPv6 only]' \ '(-4 -6)-6[use IPv6 only]' \
'-unlink[for -unix, unlink any existing socket first]' \ '-unlink[for -unix, unlink any existing socket first]' \
'-context[SSL context ID]:id' \ '-context[SSL context ID]:id' \
'(-verify -Verify)'{-verify,-Verify}'[verify depth]:depth' \ '(-verify -Verify)'{-verify,-Verify}'[verify depth]:depth' \
'-cert[certificate file]:file:_files' \ '-cert[certificate file]:file:_files' \
'-cert2[certificate file to use for servername(default: server2.pem)]:file:_files' \ '-cert2[certificate file to use for servername(default: server2.pem)]:file:_files' \
'-certform[server certificate file format]:format:(DER PEM P12)' \ '-certform[server certificate file format]:format:(DER PEM P12)' \
'-cert_chain[file or URI of untrusted certificates to build the certificate chain]:file_or_uri:_files' \ '-cert_chain[file or URI of untrusted certificates to build the certificate chain]:file_or_uri:_files' \
'-build_chain[application should build the server certificate chain]' \ '-build_chain[application should build the server certificate chain]' \
'-serverinfo[file containing one or more blocks of PEM data]:file:_files' \ '-serverinfo[file containing one or more blocks of PEM data]:file:_files' \
'-key[private key file or URI]:file_or_uri:_files' \ '-key[private key file or URI]:file_or_uri:_files' \
'-key2[private key file or URI to use for servername]:file_or_uri:_files' \ '-key2[private key file or URI to use for servername]:file_or_uri:_files' \
'-keyform[key format]:format:(DER PEM P12 ENGINE)' \ '-keyform[key format]:format:(DER PEM P12 ENGINE)' \
'-pass[private key and certificate file password source]:source:_openssl_pass_phrase_options' \ '-pass[private key and certificate file password source]:source:_openssl_pass_phrase_options' \
'-dcert[additional certificate file]:file:_files' \ '-dcert[additional certificate file]:file:_files' \
'-dkey[additional private key file or URI]:file_or_uri:_files' \ '-dkey[additional private key file or URI]:file_or_uri:_files' \
'-dcert_chain[file or URI of untrusted certificates to build the server certificate chain]:file_or_uri:_files' \ '-dcert_chain[file or URI of untrusted certificates to build the server certificate chain]:file_or_uri:_files' \
'-dcertform[format of the additional certificate file]:format:(DER PEM P12)' \ '-dcertform[format of the additional certificate file]:format:(DER PEM P12)' \
'-dkeyform[format of the additional private key]:format:(DER PEM P12 ENGINE)' \ '-dkeyform[format of the additional private key]:format:(DER PEM P12 ENGINE)' \
'-dpass[passphrase for the additional private key and certificate]:pass:_openssl_pass_phrase_options' \ '-dpass[passphrase for the additional private key and certificate]:pass:_openssl_pass_phrase_options' \
'-nbio_test[test non blocking I/O]' \ '-nbio_test[test non blocking I/O]' \
'-crlf[translate a line feed from the terminal into CR+LF]' \ '-crlf[translate a line feed from the terminal into CR+LF]' \
'-debug[print extensive debugging information including a hex dump of all traffic]' \ '-debug[print extensive debugging information including a hex dump of all traffic]' \
'-security_debug[print output from SSL/TLS security framework]' \ '-security_debug[print output from SSL/TLS security framework]' \
'-security_debug_verbose[print more output from SSL/TLS security framework]' \ '-security_debug_verbose[print more output from SSL/TLS security framework]' \
'-msg[show all protocol messages with hex dump]' \ '-msg[show all protocol messages with hex dump]' \
'-msgfile[file to send output of -msg or -trace to]:file:_files' \ '-msgfile[file to send output of -msg or -trace to]:file:_files' \
'-state[print the SSL session states]' \ '-state[print the SSL session states]' \
'-CRL[CRL file]:file:_files' \ '-CRL[CRL file]:file:_files' \
'-CRLform[CRL file format]:format:(DER PEM)' \ '-CRLform[CRL file format]:format:(DER PEM)' \
'-crl_download[download CRLs from distribution points]' \ '-crl_download[download CRLs from distribution points]' \
'-verifyCAfile[file in PEM format CA containing trusted certificates to verify client certificates]:file:_files' \ '-verifyCAfile[file in PEM format CA containing trusted certificates to verify client certificates]:file:_files' \
'-verifyCApath[directory containing trusted certificates to verify client certificates]:dir:_files -/' \ '-verifyCApath[directory containing trusted certificates to verify client certificates]:dir:_files -/' \
'-verifyCAstore[URI of a store containing trusted certificates to verify client certificates]:uri:_urls' \ '-verifyCAstore[URI of a store containing trusted certificates to verify client certificates]:uri:_urls' \
'-chainCAfile[file in PEM format containing trusted certificates to build the server certificate chain]:file:_files' \ '-chainCAfile[file in PEM format containing trusted certificates to build the server certificate chain]:file:_files' \
'-chainCApath[directory containing trusted certificates for building server certificate chain]:dir:_files -/' \ '-chainCApath[directory containing trusted certificates for building server certificate chain]:dir:_files -/' \
'-chainCAstore[URI of a store containing trusted certificates for building server certificate chain]:uri:_urls' \ '-chainCAstore[URI of a store containing trusted certificates for building server certificate chain]:uri:_urls' \
'-nocert[no certificate is used]' \ '-nocert[no certificate is used]' \
'-quiet[inhibit printing of session and certificate information]' \ '-quiet[inhibit printing of session and certificate information]' \
'-no_resume_ephemeral[disable caching and tickets if ephemeral (EC)DH is used]' \ '-no_resume_ephemeral[disable caching and tickets if ephemeral (EC)DH is used]' \
'-tlsextdebug[print a hex dump of any TLS extensions received from the server]' \ '-tlsextdebug[print a hex dump of any TLS extensions received from the server]' \
'-www[send a status message back to the client when it connects]' \ '-www[send a status message back to the client when it connects]' \
'(-WWW -HTTP)'{-WWW,-HTTP}'[emulate a simple web server]' \ '(-WWW -HTTP)'{-WWW,-HTTP}'[emulate a simple web server]' \
'-http_server_binmode[acting as web-server open files in binary mode]' \ '-http_server_binmode[acting as web-server open files in binary mode]' \
'-no_ca_names[disable TLS Extension CA Names]' \ '-no_ca_names[disable TLS Extension CA Names]' \
'-ignore_unexpected_eof[peer does not need to send the close_notify alert]' \ '-ignore_unexpected_eof[peer does not need to send the close_notify alert]' \
'-servername[servername for HostName TLS extension]' \ '-servername[servername for HostName TLS extension]' \
'-servername_fatal[send fatal alert on servername mismatch]' \ '-servername_fatal[send fatal alert on servername mismatch]' \
'-id_prefix[generate SSL/TLS session IDs prefixed by this ID]:id' \ '-id_prefix[generate SSL/TLS session IDs prefixed by this ID]:id' \
'-keymatexport[export keying material using label]:label' \ '-keymatexport[export keying material using label]:label' \
'-keymatexportlen[export the given number of bytes of keying material(default: 20)]:length' \ '-keymatexportlen[export the given number of bytes of keying material(default: 20)]:length' \
'-no_cache[disable session cache]' \ '-no_cache[disable session cache]' \
'-ext_cache[disable internal cache]' \ '-ext_cache[disable internal cache]' \
'-verify_return_error[close the connection when verification errors occur]' \ '-verify_return_error[close the connection when verification errors occur]' \
'-verify_quiet[no verify output except verify errors]' \ '-verify_quiet[no verify output except verify errors]' \
'(-no_ign_eof -ign_eof)-ign_eof[ignore input EOF]' \ '(-no_ign_eof -ign_eof)-ign_eof[ignore input EOF]' \
'(-no_ign_eof -ign_eof)-no_ign_eof[do not ignore input EOF]' \ '(-no_ign_eof -ign_eof)-no_ign_eof[do not ignore input EOF]' \
'-no_ems[disable Extended master secret negotiation]' \ '-no_ems[disable Extended master secret negotiation]' \
'-status[enable certificate status request support]' \ '-status[enable certificate status request support]' \
'-status_verbose[enable certificate status request support and verbose output of OCSP response]' \ '-status_verbose[enable certificate status request support and verbose output of OCSP response]' \
'-status_timeout[set the timeout for OCSP reponse to the given seconds]:seconds' \ '-status_timeout[set the timeout for OCSP reponse to the given seconds]:seconds' \
'-proxy[HTTP(S) proxy server]:proxy' \ '-proxy[HTTP(S) proxy server]:proxy' \
'-no_proxy[list of IP addresses and/or DNS names not to use an HTTP(S) proxy for]:addresses' \ '-no_proxy[list of IP addresses and/or DNS names not to use an HTTP(S) proxy for]:addresses' \
'-status_url[set a fallback responder URL]:url:_urls' \ '-status_url[set a fallback responder URL]:url:_urls' \
'-status_file[status file]:file:_files' \ '-status_file[status file]:file:_files' \
'-ssl_config[configure SSL_CTX using the given configure value]:config' \ '-ssl_config[configure SSL_CTX using the given configure value]:config' \
'-trace[show verbose trace output of protocol messages]' \ '-trace[show verbose trace output of protocol messages]' \
'-brief[provide a brief summary of connection parameters]' \ '-brief[provide a brief summary of connection parameters]' \
'-rev[simple echo server that sends back received text reserved]' \ '-rev[simple echo server that sends back received text reserved]' \
'-async[switch on asynchronous mode]' \ '-async[switch on asynchronous mode]' \
'-max_send_frag[maximum size of data fragment to send]:size' \ '-max_send_frag[maximum size of data fragment to send]:size' \
'-split_send_frag[size used to split data for encrypt pipelines]:size' \ '-split_send_frag[size used to split data for encrypt pipelines]:size' \
'-max_pipelines[maximum number of encrypt/decrypt pipelines]:number' \ '-max_pipelines[maximum number of encrypt/decrypt pipelines]:number' \
'-naccept[server will exit after receiving the specified number of connections(default: unlimited)]:number' \ '-naccept[server will exit after receiving the specified number of connections(default: unlimited)]:number' \
'-read_buf[default read buffer size for connections]:size' \ '-read_buf[default read buffer size for connections]:size' \
'-no_tx_cert_comp[disable support for sending TLSv1.3 compressed certificates]' \ '-no_tx_cert_comp[disable support for sending TLSv1.3 compressed certificates]' \
'-no_rx_cert_comp[disable support for receiving TLSv1.3 compressed certificates]' \ '-no_rx_cert_comp[disable support for receiving TLSv1.3 compressed certificates]' \
'-no_comp[disable negotiation of TLS compression]' \ '-no_comp[disable negotiation of TLS compression]' \
'-num_tickets[control the number of tickets that will be sent to the client after a full handshake in TLSv1.3]' \ '-num_tickets[control the number of tickets that will be sent to the client after a full handshake in TLSv1.3]' \
'-dhparam[DH parameter file to use]:file:_files' \ '-dhparam[DH parameter file to use]:file:_files' \
'-nbio[turn on non blocking I/O]' \ '-nbio[turn on non blocking I/O]' \
'-timeout[enable timeout]' \ '-timeout[enable timeout]' \
'-mtu[set link-layer MTU]:size' \ '-mtu[set link-layer MTU]:size' \
'-psk_identity[PSK identify when using a PSK cipher suite]:id' \ '-psk_identity[PSK identify when using a PSK cipher suite]:id' \
'-psk_hint[PSK identity hint when using a PSK cipher suite]:hint' \ '-psk_hint[PSK identity hint when using a PSK cipher suite]:hint' \
'-psk[PSK key when using a PSK cipher suite]:key' \ '-psk[PSK key when using a PSK cipher suite]:key' \
'-psk_session[file contains pem encoded SSL_SESSION data]:file:_files' \ '-psk_session[file contains pem encoded SSL_SESSION data]:file:_files' \
'-srpvfile[verifier file for SRP]:file:_files' \ '-srpvfile[verifier file for SRP]:file:_files' \
'-listen[listen on a UDP port for incoming connections]' \ '-listen[listen on a UDP port for incoming connections]' \
'-sctp[use SCTP for the transport protocol instead of UDP in DTLS]' \ '-sctp[use SCTP for the transport protocol instead of UDP in DTLS]' \
'-sctp_label_bug[allow communication with older broken implementations]' \ '-sctp_label_bug[allow communication with older broken implementations]' \
'-use_srtp[offer SRTP key management with a colon-separated profile list]:list' \ '-use_srtp[offer SRTP key management with a colon-separated profile list]:list' \
'-no_dhe[no DH parameters will be loaded]' \ '-no_dhe[no DH parameters will be loaded]' \
'-alpn[enable the Application-Layer Protocol Negotiation extension]:protocol' \ '-alpn[enable the Application-Layer Protocol Negotiation extension]:protocol' \
'-nextprotoneg[enable the Next Protocol Negotiation extension]:protocol' \ '-nextprotoneg[enable the Next Protocol Negotiation extension]:protocol' \
'-ktls[enable kernel TLS for sending and receiving]' \ '-ktls[enable kernel TLS for sending and receiving]' \
'-sendfile[SSL_sendfile will be used instead of BIO_write to send response]' \ '-sendfile[SSL_sendfile will be used instead of BIO_write to send response]' \
'-zerocopy_sendfile[SSL_sendfile will use the zerocopy TX mode]' \ '-zerocopy_sendfile[SSL_sendfile will use the zerocopy TX mode]' \
'-keylogfile[append TLS secrets to the specified keylog file]:file:_files' \ '-keylogfile[append TLS secrets to the specified keylog file]:file:_files' \
'-max_early_data[change the default maximum early data bytes for new sessions and incoming early data]:size' \ '-max_early_data[change the default maximum early data bytes for new sessions and incoming early data]:size' \
'-recv_max_early_data[hard limit on the maximum number of early data bytes that will be accepted]:bytes' \ '-recv_max_early_data[hard limit on the maximum number of early data bytes that will be accepted]:bytes' \
'-early_data[accept early data where possible]' \ '-early_data[accept early data where possible]' \
'-stateless[require TLSv1.3 cookies]' \ '-stateless[require TLSv1.3 cookies]' \
'(-anti_replay -no_anti_replay)-anti_replay[switch replay protection on]' \ '(-anti_replay -no_anti_replay)-anti_replay[switch replay protection on]' \
'(-anti_replay -no_anti_replay)-no_anti_replay[switch replay protection off]' \ '(-anti_replay -no_anti_replay)-no_anti_replay[switch replay protection off]' \
'-tfo[enable acceptance of TCP fast Open connections]' \ '-tfo[enable acceptance of TCP fast Open connections]' \
'-cert_comp[pre-compresses certificates that will be sent during the handshake]' \ '-cert_comp[pre-compresses certificates that will be sent during the handshake]' \
'-nameopt[how the subject or issuer names are displayed]:how:_openssl_name_display_options' \ '-nameopt[how the subject or issuer names are displayed]:how:_openssl_name_display_options' \
$openssl_tls_flags[@] \ $openssl_tls_flags[@] \
$openssl_dtls_flags[@] \ $openssl_dtls_flags[@] \
$openssl_supported_commands_flags[@] \ $openssl_supported_commands_flags[@] \
$openssl_extended_verification_flags[@] \ $openssl_extended_verification_flags[@] \
$openssl_trusted_certificate_options[@] \ $openssl_trusted_certificate_options[@] \
$openssl_random_state_options[@] \ $openssl_random_state_options[@] \
$openssl_provider_options[@] \ $openssl_provider_options[@] \
$openssl_verification_options[@] \ $openssl_verification_options[@] \
'-enable_server_rpk[enable support for sending raw public keys to the client]' \ '-enable_server_rpk[enable support for sending raw public keys to the client]' \
'-enable_client_rpk[enable support for receiving raw public keys from the client]' '-enable_client_rpk[enable support for receiving raw public keys from the client]'
} }
_openssl_s_time() { _openssl_s_time() {

View File

@ -225,7 +225,7 @@ _openvpn3_command() {
_describe -t commands 'openvpn3 commands' openvpn3_cmds _describe -t commands 'openvpn3 commands' openvpn3_cmds
else else
local curcontext="$curcontext" local curcontext="$curcontext"
local cmd="${${openvpn3_cmds[(r)$words[1]:*]%%:*}}" cmd="${${openvpn3_cmds[(r)$words[1]:*]%%:*}}"
if (($#cmd)); then if (($#cmd)); then
if (( $+functions[_openvpn3_$cmd] )); then if (( $+functions[_openvpn3_$cmd] )); then
_openvpn3_$cmd _openvpn3_$cmd

View File

@ -208,13 +208,13 @@ _scala() {
;; ;;
(*) (*)
case $service in case $service in
(scala) (scala)
_arguments $scala_options $common_options "*::filename:_files" && ret=0 _arguments $scala_options $common_options "*::filename:_files" && ret=0
;; ;;
(scalac) (scalac)
_arguments $common_options "*::filename:_files" && ret=0 _arguments $common_options "*::filename:_files" && ret=0
;; ;;
esac esac
;; ;;
esac esac

View File

@ -121,10 +121,10 @@ _setcap_capabilities() {
_setcap "$@" _setcap "$@"
# Local Variables: # Local variables:
# mode: Shell-Script # mode: Shell-Script
# sh-indentation: 2 # sh-indentation: 2
# indent-tabs-mode: nil # indent-tabs-mode: nil
# sh-basic-offset: 2 # sh-basic-offset: 2
# End: # End:
# vim: ft=zsh sw=2 ts=2 et # ex: sw=2 ts=2 et filetype=sh

View File

@ -93,8 +93,8 @@ _tmuxp() {
&& ret=0 && ret=0
;; ;;
(shell) (shell)
local sessions="$(__tmuxp_tmux_sessions)" local sessions="$(__tmux_sessions)"
local windows="$(__tmuxp_tmux_windows)" local windows="$(__tmux_windows)"
_arguments \ _arguments \
'(- *)'{-h,--help}'[show help message and exit]' \ '(- *)'{-h,--help}'[show help message and exit]' \
'-S[pass-through for tmux -S]: :_files' \ '-S[pass-through for tmux -S]: :_files' \
@ -179,13 +179,15 @@ __tmuxp_import() {
esac esac
} }
__tmuxp_tmux_sessions() { __tmux_sessions () {
local tmux_sessions=($(_call_program tmux_sessions 'tmux ls -F "#{session_name}"')) local tmux_sessions
tmux_sessions=($(_call_program tmux_sessions 'tmux ls -F "#{session_name}"'))
echo $tmux_sessions echo $tmux_sessions
} }
__tmuxp_tmux_windows() { __tmux_windows () {
local tmux_windows=($(_call_program tmux_sessions 'tmux ls -F "#{window_name}"')) local tmux_windows
tmux_windows=($(_call_program tmux_sessions 'tmux ls -F "#{window_name}"'))
echo $tmux_windows echo $tmux_windows
} }

View File

@ -23,11 +23,3 @@ local modes=('up\:"bring a wireguard interface up"'\
# 2: Complete interface with all .conf files in /etc/wireguard without the filename extension. # 2: Complete interface with all .conf files in /etc/wireguard without the filename extension.
_arguments "1:mode:((${modes}))"\ _arguments "1:mode:((${modes}))"\
'2:interface:_path_files -W /etc/wireguard -g "*.conf(^/:r)"' '2:interface:_path_files -W /etc/wireguard -g "*.conf(^/:r)"'
# Local Variables:
# mode: Shell-Script
# sh-indentation: 2
# indent-tabs-mode: nil
# sh-basic-offset: 2
# End:
# vim: ft=zsh sw=2 ts=2 et