mirror of
https://github.com/YunoHost/yunohost.git
synced 2024-09-03 20:06:10 +02:00
Added a python script (yunohost_completion.py) which generates a bash completion file for the yunohost command based on yunohost.yml, in data/actionsmap
Added the output of the script in data/bash-completion.d/yunohost_completion This is probably not the correct place for the script and the generation should be done at some other time and place also.
This commit is contained in:
parent
3fdae48d13
commit
3550be63f2
2 changed files with 161 additions and 0 deletions
84
data/actionsmap/yunohost_completion.py
Normal file
84
data/actionsmap/yunohost_completion.py
Normal file
|
@ -0,0 +1,84 @@
|
|||
"""
|
||||
Simple automated generation of a bash_completion file
|
||||
for yunohost command from the actionsmap.
|
||||
|
||||
Generates a bash completion file assuming the structure
|
||||
`yunohost domain action`
|
||||
adds `--help` at the end if one presses [tab] again.
|
||||
|
||||
author: Christophe Vuillot
|
||||
"""
|
||||
import yaml
|
||||
|
||||
ACTIONSMAP_FILE = 'yunohost.yml'
|
||||
BASH_COMPLETION_FILE = '../bash-completion.d/yunohost_completion'
|
||||
|
||||
with open(ACTIONSMAP_FILE, 'r') as stream:
|
||||
|
||||
# Getting the dictionary containning what actions are possible per domain
|
||||
OPTION_TREE = yaml.load(stream)
|
||||
DOMAINS = [str for str in OPTION_TREE.keys() if not str.startswith('_')]
|
||||
DOMAINS_STR = '"{}"'.format(' '.join(DOMAINS))
|
||||
ACTIONS_DICT = {}
|
||||
for domain in DOMAINS:
|
||||
ACTIONS = [str for str in OPTION_TREE[domain]['actions'].keys()
|
||||
if not str.startswith('_')]
|
||||
ACTIONS_STR = '"{}"'.format(' '.join(ACTIONS))
|
||||
ACTIONS_DICT[domain] = ACTIONS_STR
|
||||
|
||||
with open(BASH_COMPLETION_FILE, 'w') as generated_file:
|
||||
|
||||
# header of the file
|
||||
generated_file.write('#\n')
|
||||
generated_file.write('# completion for yunohost\n')
|
||||
generated_file.write('# automatically generated from the actionsmap\n')
|
||||
generated_file.write('#\n\n')
|
||||
|
||||
# Start of the completion function
|
||||
generated_file.write('_yunohost_completion()\n')
|
||||
generated_file.write('{\n')
|
||||
|
||||
# Defining local variable for previously and currently typed words
|
||||
generated_file.write('\tlocal cur prev opts narg\n')
|
||||
generated_file.write('\tCOMPREPLY=()\n\n')
|
||||
generated_file.write('\t# the number of words already typed\n')
|
||||
generated_file.write('\tnarg=${#COMP_WORDS[@]}\n\n')
|
||||
generated_file.write('\t# the current word being typed\n')
|
||||
generated_file.write('\tcur="${COMP_WORDS[COMP_CWORD]}"\n\n')
|
||||
generated_file.write('\t# the last typed word\n')
|
||||
generated_file.write('\tprev="${COMP_WORDS[COMP_CWORD-1]}"\n\n')
|
||||
|
||||
# If one is currently typing a domain then match with the domain list
|
||||
generated_file.write('\t# If one is currently typing a domain,\n')
|
||||
generated_file.write('\t# match with domains\n')
|
||||
generated_file.write('\tif [[ $narg == 2 ]]; then\n')
|
||||
generated_file.write('\t\topts={}\n'.format(DOMAINS_STR))
|
||||
generated_file.write('\tfi\n\n')
|
||||
|
||||
# If one is currently typing an action then match with the action list
|
||||
# of the previously typed domain
|
||||
generated_file.write('\t# If one already typed a domain,\n')
|
||||
generated_file.write('\t# match the actions of that domain\n')
|
||||
generated_file.write('\tif [[ $narg == 3 ]]; then\n')
|
||||
for domain in DOMAINS:
|
||||
generated_file.write('\t\tif [[ $prev == "{}" ]]; then\n'.format(domain))
|
||||
generated_file.write('\t\t\topts={}\n'.format(ACTIONS_DICT[domain]))
|
||||
generated_file.write('\t\tfi\n')
|
||||
generated_file.write('\tfi\n\n')
|
||||
|
||||
# If both domain and action have been typed or the domain
|
||||
# was not recognized propose --help (only once)
|
||||
generated_file.write('\t# If no options were found propose --help\n')
|
||||
generated_file.write('\tif [ -z "$opts" ]; then\n')
|
||||
generated_file.write('\t\tif [[ $prev != "--help" ]]; then\n')
|
||||
generated_file.write('\t\t\topts=( --help )\n')
|
||||
generated_file.write('\t\tfi\n')
|
||||
generated_file.write('\tfi\n')
|
||||
|
||||
# generate the completion list from the possible options
|
||||
generated_file.write('\tCOMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )\n')
|
||||
generated_file.write('\treturn 0\n')
|
||||
generated_file.write('}\n\n')
|
||||
|
||||
# Add the function to bash completion
|
||||
generated_file.write('complete -F _yunohost_completion yunohost')
|
77
data/bash-completion.d/yunohost_completion
Normal file
77
data/bash-completion.d/yunohost_completion
Normal file
|
@ -0,0 +1,77 @@
|
|||
#
|
||||
# completion for yunohost
|
||||
# automatically generated from the actionsmap
|
||||
#
|
||||
|
||||
_yunohost_completion()
|
||||
{
|
||||
local cur prev opts narg
|
||||
COMPREPLY=()
|
||||
|
||||
# the number of words already typed
|
||||
narg=${#COMP_WORDS[@]}
|
||||
|
||||
# the current word being typed
|
||||
cur="${COMP_WORDS[COMP_CWORD]}"
|
||||
|
||||
# the last typed word
|
||||
prev="${COMP_WORDS[COMP_CWORD-1]}"
|
||||
|
||||
# If one is currently typing a domain,
|
||||
# match with domains
|
||||
if [[ $narg == 2 ]]; then
|
||||
opts="user domain log service settings firewall backup app hook dyndns tools monitor"
|
||||
fi
|
||||
|
||||
# If one already typed a domain,
|
||||
# match the actions of that domain
|
||||
if [[ $narg == 3 ]]; then
|
||||
if [[ $prev == "user" ]]; then
|
||||
opts="info create list update delete"
|
||||
fi
|
||||
if [[ $prev == "domain" ]]; then
|
||||
opts="cert-install cert-status list remove url-available add dns-conf cert-renew"
|
||||
fi
|
||||
if [[ $prev == "log" ]]; then
|
||||
opts="list display"
|
||||
fi
|
||||
if [[ $prev == "service" ]]; then
|
||||
opts="status enable reload_or_restart log start stop remove reload add disable regen-conf restart"
|
||||
fi
|
||||
if [[ $prev == "settings" ]]; then
|
||||
opts="reset set list reset-all get"
|
||||
fi
|
||||
if [[ $prev == "firewall" ]]; then
|
||||
opts="reload allow stop list upnp disallow"
|
||||
fi
|
||||
if [[ $prev == "backup" ]]; then
|
||||
opts="info restore create list delete"
|
||||
fi
|
||||
if [[ $prev == "app" ]]; then
|
||||
opts="map checkurl install makedefault checkport listlists change-url removelist info change-label upgrade fetchlist clearaccess ssowatconf list remove register-url removeaccess setting initdb debug addaccess"
|
||||
fi
|
||||
if [[ $prev == "hook" ]]; then
|
||||
opts="info callback add exec list remove"
|
||||
fi
|
||||
if [[ $prev == "dyndns" ]]; then
|
||||
opts="subscribe update installcron removecron"
|
||||
fi
|
||||
if [[ $prev == "tools" ]]; then
|
||||
opts="upgrade ldapinit postinstall maindomain update reboot shell adminpw shutdown diagnosis port-available"
|
||||
fi
|
||||
if [[ $prev == "monitor" ]]; then
|
||||
opts="enable network show-stats update-stats disk system disable"
|
||||
fi
|
||||
fi
|
||||
|
||||
# If no options were found propose --help
|
||||
if [ -z "$opts" ]; then
|
||||
if [[ $prev != "--help" ]]; then
|
||||
opts=( --help )
|
||||
fi
|
||||
fi
|
||||
COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
|
||||
return 0
|
||||
}
|
||||
|
||||
complete -F _yunohost_completion yunohost
|
Loading…
Add table
Reference in a new issue