Upstream: https://github.com/YunoHost/yunohost @ 3a5f8bac8301c450897b96cbd43a4c7d3ba750fb But (José) : transformer tout le code en bions + ploxions du xerboxion. La carte de digestion vit au labo : /yunohost-digest.json
219 lines
6.8 KiB
Django/Jinja
219 lines
6.8 KiB
Django/Jinja
#compdef yunohost
|
|
#
|
|
# -----------------------------------------------------------------------------
|
|
# Description
|
|
# -----------
|
|
# Completion script for yunohost, automatically generated from the action map
|
|
# decribed by `yunohost.yml`
|
|
# -----------------------------------------------------------------------------
|
|
|
|
local state line curcontext
|
|
|
|
# For debug purposes only
|
|
__log() {
|
|
echo $@ >> '/tmp/zsh-completion.log'
|
|
}
|
|
|
|
# First argument: The name of the completion list
|
|
# 2nd argument: The command to get it
|
|
# (( $+functions[__get_ynh_cache] )) ||
|
|
function __get_ynh_cache() {
|
|
# Checking a global cache policy is defined,
|
|
# and linkage to ynh-cache-policy
|
|
local update_policy completion_items
|
|
zstyle -s ":completion:${curcontext}:" cache-policy update_policy
|
|
if [[ -z "$update_policy" ]]; then
|
|
zstyle ":completion:${curcontext}:" cache-policy __yunohost_cache_policy
|
|
fi
|
|
# If the cache is invalid (too old), regenerate it
|
|
if _cache_invalid $1 || ! _retrieve_cache $1; then
|
|
completion_items=(`eval $2`)
|
|
_store_cache $1 completion_items
|
|
else
|
|
_retrieve_cache $1
|
|
fi
|
|
echo $completion_items
|
|
}
|
|
|
|
# (( $+functions[__yunohost_cache_policy] )) ||
|
|
__yunohost_cache_policy(){
|
|
local cache_file="$1"
|
|
# Rebuild if the yunohost executable is newer than cache
|
|
[[ "${commands[yunohost]}" -nt "${cache_file}" ]] && return
|
|
|
|
# Rebuild if cache is more than a week old
|
|
local -a oldp
|
|
# oldp=( "$1"(mM+1) ) # month
|
|
# oldp=( "$1"(Nm+7) ) # 1 week
|
|
oldp=( "$1"(Nmd+1) ) # 1 day
|
|
(( $#oldp )) && return
|
|
return 1
|
|
}
|
|
|
|
#
|
|
# Routing function, used to go through $words and find the correct subfunction
|
|
# (Suggestions welcome to improve that design... =/ )
|
|
# (( $+functions[__jump] )) ||
|
|
function __jump() {
|
|
local cmd
|
|
|
|
# Remember the subcommand name
|
|
if (( ${#@} == 0 )); then
|
|
local cmd=${words[2]}
|
|
else
|
|
cmd=$1 # < no more used?
|
|
fi
|
|
|
|
# Set the context for the subcommand
|
|
ynhcommand="${ynhcommand}_${cmd}"
|
|
# Narrow the range of words we are looking at to exclude `yunohost`
|
|
(( CURRENT-- ))
|
|
shift words
|
|
# Run the completion for the subcommand
|
|
if ! _call_function ret ${ynhcommand#:*:}; then
|
|
_default && ret=0
|
|
fi
|
|
return ret
|
|
}
|
|
|
|
#-----------------------------------------
|
|
# Command
|
|
#-----------------------------------------
|
|
#
|
|
# Principal entry point with general options and list of commands
|
|
# (( $+functions[_yunohost] )) ||
|
|
function _yunohost() {
|
|
local curcontext="${curcontext}" state line ret=1
|
|
local mode
|
|
# `ynhcommand` is where `__jump` builds the name of the completion function
|
|
ynhcommand='_yunohost'
|
|
|
|
typeset -ag common_options; common_options=(
|
|
'(-h --help)'{-h,--help}'[Show this help message and exit]:help:'
|
|
'--version[Display YunoHost packages versions]:version:'
|
|
'--output-as[Output result in another format]:output-as:(json plain none)'
|
|
'--debug[Log and print debug messages]'
|
|
'--quiet[Don'"'"'t produce any output]'
|
|
'--timeout[Number of seconds before this command will timeout because it can'"'"'t acquire the lock (meaning that another command is currently running), by default there is no timeout and the command will wait until it can get the lock]:timeout:'
|
|
)
|
|
|
|
if (( CURRENT > 2 )); then
|
|
__jump
|
|
else
|
|
local -a yunohost_categories; yunohost_categories=(
|
|
{%- for catinfo in categories %}
|
|
{%- if catinfo.help and catinfo.level == 1 %}
|
|
'{{ catinfo.name }}:{{ catinfo.help }}'
|
|
{%- endif %}
|
|
{%- endfor %}
|
|
)
|
|
_describe -V -t yunohost-commands 'yunohost category' yunohost_categories "$@"
|
|
fi
|
|
|
|
_arguments -s -C $common_options
|
|
# unset common_option
|
|
}
|
|
|
|
#-----------------------------------------
|
|
# Subcommands
|
|
#-----------------------------------------
|
|
|
|
{%- for catinfo in categories %}
|
|
{%- if catinfo.actions or catinfo.subs %}
|
|
#-----------------------------------------
|
|
# {{ catinfo.name }}
|
|
#-----------------------------------------
|
|
|
|
# (( $+functions[_yunohost_{{ catinfo.name }}] )) ||
|
|
function _yunohost_{{ catinfo.name }}() {
|
|
if (( CURRENT > 2 )); then
|
|
__jump
|
|
else
|
|
{%- if catinfo.actions %}
|
|
local -a yunohost_{{ catinfo.name }}; yunohost_{{ catinfo.name }}=(
|
|
{%- for actioninfo in catinfo.actions %}
|
|
{%- if actioninfo.help %}
|
|
'{{ actioninfo.name }}:{{ actioninfo.help }}'
|
|
{%- endif %}
|
|
{%- endfor %}
|
|
)
|
|
_describe -V -t yunohost-{{ catinfo.name }} 'yunohost {{ catinfo.name }} category' yunohost_{{ catinfo.name }} "$@"
|
|
|
|
{%- endif %}
|
|
{% if catinfo.subs %}
|
|
local -a yunohost_{{ catinfo.name }}_subcategories; yunohost_{{ catinfo.name }}_subcategories=(
|
|
{%- for subcat_name, subcat_desc in catinfo.subs.items() %}
|
|
{%- if subcat_desc %}
|
|
'{{ subcat_name }}:{{ subcat_desc }}'
|
|
{%- endif %}
|
|
{%- endfor %}
|
|
)
|
|
_describe -V -t yunohost-{{ catinfo.name }}-subcategories 'yunohost {{ catinfo.name }} subcategories' yunohost_{{ catinfo.name }}_subcategories "$@"
|
|
{%- endif %}
|
|
fi
|
|
}
|
|
|
|
{% if catinfo.actions %}
|
|
{% for actioninfo in catinfo.actions %}
|
|
# (( $+functions[_yunohost_{{ catinfo.name }}_{{ actioninfo.name }}] )) ||
|
|
{%- if actioninfo.arguments %}
|
|
function _yunohost_{{ catinfo.name }}_{{ actioninfo.name }}() {
|
|
{%- if actioninfo.cases %}
|
|
local context state state_descr line
|
|
typeset -A opt_args
|
|
{% endif %}
|
|
_arguments -s -C \
|
|
{%- for argumentinfo in actioninfo.arguments %}
|
|
{{ argumentinfo }} {% if loop.revindex != 1 %}\{% endif %}
|
|
{%- endfor %}
|
|
{%- if actioninfo.cases %}
|
|
|
|
if (($CURRENT > 2)); then
|
|
case "$state" in
|
|
{%- for case in actioninfo.cases %}
|
|
{{ case.name }})
|
|
local previous="$words[${CURRENT} - 1]"
|
|
local cmd_ret=$({{ case.shell_call }})
|
|
if (( ${#cmd_ret} != 0 )); then
|
|
local -a cmd_list=("${(s/ /)cmd_ret}")
|
|
_values '{{ case.name }}' $cmd_list
|
|
fi
|
|
;;
|
|
{%- endfor %}
|
|
esac
|
|
fi
|
|
return $?
|
|
{%- endif %}
|
|
}
|
|
|
|
{%- else %}
|
|
function _yunohost_{{ catinfo.name }}_{{ actioninfo.name }}() { }
|
|
|
|
{%- endif %}
|
|
{% endfor %}
|
|
{% endif %}
|
|
{%- endif %}
|
|
{%- endfor %}
|
|
|
|
#-----------------------------------------
|
|
# Completion functions
|
|
#-----------------------------------------
|
|
|
|
{% for funcinfo in functions %}
|
|
{%- if funcinfo.aggregated %}
|
|
|
|
# (( $+functions[{{ funcinfo.name }}] )) ||
|
|
function {{ funcinfo.name }}() {
|
|
_alternative \
|
|
{{ funcinfo.aggregated }}
|
|
}
|
|
{%- elif funcinfo.shell_call %}
|
|
|
|
# (( $+functions[{{ funcinfo.name }}] )) ||
|
|
function {{ funcinfo.name }}() {
|
|
compadd "$@" -- ${(@)$({{ funcinfo.shell_call }})}
|
|
}
|
|
{%- endif %}
|
|
{% endfor %}
|
|
|
|
_yunohost "$@" |