Add zsh-completion support

This commit is contained in:
William Hubbs 2017-12-07 11:30:32 -06:00
parent d220fc2723
commit 6c456f9383
7 changed files with 96 additions and 2 deletions

View File

@ -14,7 +14,7 @@ MK= ${TOP}/mk
include ${TOP}/Makefile.inc
SUBDIR= bash-completion conf.d etc init.d local.d man scripts sh src \
support sysctl.d
support sysctl.d zsh-completion
# Build pkgconfig or not
MKPKGCONFIG?= yes

View File

@ -34,6 +34,7 @@ PICFLAG?= -fPIC
SYSCONFDIR?= ${PREFIX}/etc
INITDIR?= ${SYSCONFDIR}/init.d
CONFDIR?= ${SYSCONFDIR}/conf.d
CONFMODE?= 0644
LOCALDIR?= ${SYSCONFDIR}/local.d
SYSCTLDIR?= ${SYSCONFDIR}/sysctl.d
@ -67,4 +68,4 @@ DATAMODE?= 0644
DOCDIR?= ${UPREFIX}/share/doc
DOCMODE?= 0644
CONFMODE?= 0644
ZSHCOMPDIR?= ${UPREFIX}/share/zsh/site-functions

10
zsh-completion/Makefile Normal file
View File

@ -0,0 +1,10 @@
DIR= ${ZSHCOMPDIR}
CONF= _openrc \
_rc-service \
_rc-status \
_rc-update \
MK= ../mk
include ${MK}/os.mk
include ${MK}/scripts.mk

7
zsh-completion/_openrc Normal file
View File

@ -0,0 +1,7 @@
#compdef openrc
if (( CURRENT == 2 )); then
_values "runlevels" $(rc-status --list)
fi
# vim: set et sw=2 ts=2 ft=zsh:

View File

@ -0,0 +1,27 @@
#compdef rc-service
if (( CURRENT == 2 )); then
_arguments -s \
'(-e --exists)'{-e,--exists}"[tests if the service exists or not]" \
'(-l --list)'{-l,--list}'[list all available services]' \
'(-r --resolve)'{-r,--resolve}'[resolve the service name to an init script]' \
'(-C --nocolor)'{-C,--nocolor}'[Disable color output]' \
'(-v --verbose)'{-v,--verbose}'[Run verbosely]' \
'(-q --quiet)'{-q,--quiet}'[Run quietly]'
_values "service" $(rc-service --list)
else
case $words[2] in
-e|--exists|-r|--resolve)
(( CURRENT > 3 )) && return 0
_values "service" $(rc-service --list)
;;
-*)
return 0
;;
*)
_values "action" stop start restart describe zap
;;
esac
fi
# vim: set et sw=2 ts=2 ft=zsh:

18
zsh-completion/_rc-status Normal file
View File

@ -0,0 +1,18 @@
#compdef rc-status
_arguments -s \
{'(--all)-a','(-a)--all'}'[Show services at all runlevels]' \
{'(--crashed)-c','(-c)--crashed'}'[Show crashed services]' \
{'(--list)-l','(-l)--list'}'[Show list of runlevels]' \
{'(--runlevel)-r','(-r)--runlevel'}'[Show the name of the current runlevel]' \
{'(--servicelist)-s','(-s)--servicelist'}'[Show all services]' \
{'(--unused)-u','(-u)--unused'}'[Show services not assigned to any run level]' \
{'(--help)-h','(-h)--help'}'[Print this help output]' \
{'(--nocolor)-C','(-C)--nocolor'}'[Disable color output]' \
{'(--version)-V','(-V)--version'}'[Display software version]' \
{'(--verbose)-v','(-v)--verbose'}'[Run verbosely]' \
{'(--quiet)-q','(-q)--quiet'}'[Run quietly (Does not affect errors)]'
_values 'runlevels' $(rc-status --list)
# vim: set et sw=2 ts=2 ft=zsh:

31
zsh-completion/_rc-update Normal file
View File

@ -0,0 +1,31 @@
#compdef rc-update
local used_init
used_init=(${=${(M)${(f)"$(rc-update show 2>/dev/null)"}:#*|*[a-z]*}% |*})
if (( CURRENT == 2 )); then
_values "rc-update actions" \
'add[Add script to a runlevel]' \
'del[Delete script from a runlevel]' \
'show[Show scripts in a runlevel]' \
'-a[Process all runlevels]' \
'-s[Stack a runlevel instead of a service]'
elif (( CURRENT == 3 )); then
case "$words[2]" in
add)
_values "service" $(rc-service --list)
;;
del)
_values "service" $used_init
;;
show)
_values "runlevels" $(rc-status --list) \
'-v[Show all service scripts]' \
'--verbose[Show all service scripts]'
;;
esac
elif (( CURRENT == 4 )); then
_values "runlevels" $(rc-status --list)
fi
# vim: set et sw=2 ts=2 ft=zsh: