aboutsummaryrefslogtreecommitdiff
path: root/zsh-completion
diff options
context:
space:
mode:
Diffstat (limited to 'zsh-completion')
-rw-r--r--zsh-completion/_rc-service51
1 files changed, 28 insertions, 23 deletions
diff --git a/zsh-completion/_rc-service b/zsh-completion/_rc-service
index 25c6b4c5..b9976131 100644
--- a/zsh-completion/_rc-service
+++ b/zsh-completion/_rc-service
@@ -1,27 +1,32 @@
#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
+_rc_services() {
+ if [[ -n "${opt_args[(i)-l|--list]}" ]]; then
+ _nothing
+ else
+ _values 'service' $(rc-service -l)
+ fi
+}
+
+_rc_actions() {
+ local service="${line[1]}"
+
+ if [[ -n "${opt_args[(i)-e|--exists|-r|--resolve]}" ]] || ! $(rc-service -e $service) ; then
+ _nothing
+ else
+ _values 'action' stop start restart describe zap
+ fi
+
+}
+
+_arguments -C -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]' \
+ '1:service:_rc_services' \
+ '2:action:_rc_actions'
# vim: set et sw=2 ts=2 ft=zsh: