44 lines
956 B
Bash
44 lines
956 B
Bash
# goto completion -*- shell-script -*-
|
|
|
|
_comp_cmd_goto() {
|
|
local cur prev words cword comp_args
|
|
_comp_initialize -- "$@" || return
|
|
|
|
# echo "[$cur] [$prev] [${words[@]}] [$cword] [$comp_args]"
|
|
|
|
local -A opts=([-e]="" [-l]="" [-t]="")
|
|
|
|
local i
|
|
for i in "${!words[@]}"; do
|
|
[[ ${words[i]} && $i -ne $cword ]] && unset -v "opts[${words[i]}]"
|
|
case "${words[i]}" in
|
|
-e)
|
|
unset -v 'opts[-l]' 'opts[-t]'
|
|
;;
|
|
-l)
|
|
unset -v 'opts[-e]' 'opts[-t]'
|
|
;;
|
|
-t)
|
|
unset -v 'opts[-e]' 'opts[-l]'
|
|
;;
|
|
esac
|
|
done
|
|
|
|
if [[ $cur == -* ]]; then
|
|
_comp_compgen -- -W '"${!opts[@]}"'
|
|
return
|
|
fi
|
|
|
|
case $prev in
|
|
-e)
|
|
[[ -v 'opts[-e]' ]] && __goto_comp_keys
|
|
return
|
|
;;
|
|
esac
|
|
|
|
# do goto keys only if we did not have -[elt]
|
|
[[ ${words[*]} == *\ -* ]] || __goto_comp_keys
|
|
} &&
|
|
complete -F _comp_cmd_goto goto
|
|
|
|
# ex: filetype=sh |