Work on hydra completion
Now supports both syntaxes Currently, doesn't tab complete service options but does show help
This commit is contained in:
parent
a7cc3123ac
commit
180d8cd21b
1 changed files with 90 additions and 12 deletions
|
@ -84,7 +84,12 @@ min_max_charset(){
|
||||||
}
|
}
|
||||||
|
|
||||||
service_help(){
|
service_help(){
|
||||||
_message -r "${hydra -U $previousArg}"
|
if [ "$1" = "new" ]; then
|
||||||
|
service="$( echo "${tokens[-1]}" | cut -d':' -f1)"
|
||||||
|
_message -r "$(hydra -U $service)"
|
||||||
|
else
|
||||||
|
_message -r "$(hydra -U $previousArg)"
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
service_list(){
|
service_list(){
|
||||||
_describe "Services" services
|
_describe "Services" services
|
||||||
|
@ -149,14 +154,87 @@ done
|
||||||
local -a line expl
|
local -a line expl
|
||||||
local -i ret=1
|
local -i ret=1
|
||||||
typeset -A opt_args
|
typeset -A opt_args
|
||||||
_arguments -C -s "${args[@]}" ':service:->hydra_service' && return
|
|
||||||
|
|
||||||
|
# Hydra has 2 syntaxes. They are:
|
||||||
|
#
|
||||||
|
# hydra [some command line options] [-s PORT] TARGET PROTOCOL [MODULE-OPTIONS]
|
||||||
|
# or
|
||||||
|
# hydra [some command line options] PROTOCOL://TARGET:PORT/MODULE-OPTIONS
|
||||||
|
#
|
||||||
|
# The protocol:// option is considered the new version but can only be used if there is 1 target
|
||||||
|
|
||||||
|
newSyntax="either"
|
||||||
|
targetNeeded="true"
|
||||||
|
|
||||||
|
# If the -M option is given, we need to use the old syntax
|
||||||
|
if (( ${tokens[(I)-M]} )); then
|
||||||
|
newSyntax="false"
|
||||||
|
targetNeeded="false"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if $(echo "$BUFFER" | grep -Eq "(${(j:|:)services}) "); then
|
||||||
|
newSyntax="false"
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
#if [ "$newSyntax" != "false" ]; then
|
||||||
|
# _arguments -C -s "${args[@]}" ':service:->hydra_service' && return
|
||||||
|
# case $state in
|
||||||
|
# hydra_service)
|
||||||
|
# if compset -P "(${(j:|:)services})://*/"; then
|
||||||
|
# service_help "new"
|
||||||
|
# elif compset -P "(${(j:|:)services})://*:"; then
|
||||||
|
# _message -r "service://host:port/options"
|
||||||
|
# elif compset -P "(${(j:|:)services})://"; then
|
||||||
|
# _hosts -S ':' && ret=0
|
||||||
|
# else
|
||||||
|
# compadd -S '://' -q -a services && ret=0
|
||||||
|
# fi
|
||||||
|
# ;;
|
||||||
|
# esac
|
||||||
|
#else
|
||||||
|
_arguments -C -s "${args[@]}" ':target:->param1' ':service:->param2' ':options:->param3' && return
|
||||||
case $state in
|
case $state in
|
||||||
hydra_service)
|
param1)
|
||||||
if compset -P "(${(j:|:)services})://"; then
|
if [ "$newSyntax" != "false" ]; then
|
||||||
_wanted servers expl 'server' _hosts && ret=0
|
if compset -P "(${(j:|:)services})://*/"; then
|
||||||
|
newSyntax="true"
|
||||||
|
service_help "new"
|
||||||
|
elif compset -P "(${(j:|:)services})://*:"; then
|
||||||
|
_message -r "service://host:port/options"
|
||||||
|
newSyntax="true"
|
||||||
|
elif compset -P "(${(j:|:)services})://"; then
|
||||||
|
_hosts -S ':'
|
||||||
|
newSyntax="true"
|
||||||
else
|
else
|
||||||
_wanted services expl $state_descr compadd -S '://' -q -a services && ret=0
|
compadd -S '://' -q -a services
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$newSyntax" != "true" ]; then
|
||||||
|
if [ "$targetNeeded" = "true" ]; then
|
||||||
|
_hosts
|
||||||
|
else
|
||||||
|
compadd -q -a services
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
param2)
|
||||||
|
if [ "$newSyntax" != "true" ]; then
|
||||||
|
if [ "$targetNeeded" = "true" ]; then
|
||||||
|
compadd -q -a services
|
||||||
|
else
|
||||||
|
service_help
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
param3)
|
||||||
|
if [ "$newSyntax" != "true" ]; then
|
||||||
|
if [ "$targetNeeded" = "true" ]; then
|
||||||
|
service_help
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
#fi
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue