mirror of
https://github.com/TheLocehiliosan/yadm
synced 2024-10-27 20:34:27 +00:00
9d21376f88
Including tweaks to conditional statements I think the original conditionals would always be false. That prevents using completions which rely on identifying the penultimate and antepenultimate portions of typed commandline.
92 lines
2.5 KiB
Plaintext
92 lines
2.5 KiB
Plaintext
# test if git completion is missing, but loader exists, attempt to load
|
|
if ! declare -F _git > /dev/null && declare -F _completion_loader > /dev/null; then
|
|
_completion_loader git
|
|
fi
|
|
|
|
# only operate if git completion is present
|
|
if declare -F _git > /dev/null; then
|
|
|
|
_yadm() {
|
|
|
|
local current=${COMP_WORDS[COMP_CWORD]}
|
|
local penultimate
|
|
if [ "$((COMP_CWORD-1))" -ge "0" ]; then
|
|
penultimate=${COMP_WORDS[COMP_CWORD-1]}
|
|
fi
|
|
local antepenultimate
|
|
if [ "$((COMP_CWORD-2))" -ge "0" ]; then
|
|
antepenultimate=${COMP_WORDS[COMP_CWORD-2]}
|
|
fi
|
|
|
|
local GIT_DIR
|
|
# shellcheck disable=SC2034
|
|
GIT_DIR="$(yadm introspect repo 2>/dev/null)"
|
|
|
|
case "$penultimate" in
|
|
bootstrap)
|
|
COMPREPLY=()
|
|
return 0
|
|
;;
|
|
config)
|
|
COMPREPLY=( $(compgen -W "$(yadm introspect configs 2>/dev/null)") )
|
|
return 0
|
|
;;
|
|
decrypt)
|
|
COMPREPLY=( $(compgen -W "-l" -- "$current") )
|
|
return 0
|
|
;;
|
|
init)
|
|
COMPREPLY=( $(compgen -W "-f -w" -- "$current") )
|
|
return 0
|
|
;;
|
|
introspect)
|
|
COMPREPLY=( $(compgen -W "commands configs repo switches" -- "$current") )
|
|
return 0
|
|
;;
|
|
help)
|
|
COMPREPLY=() # no specific help yet
|
|
return 0
|
|
;;
|
|
list)
|
|
COMPREPLY=( $(compgen -W "-a" -- "$current") )
|
|
return 0
|
|
;;
|
|
esac
|
|
|
|
case "$antepenultimate" in
|
|
clone)
|
|
COMPREPLY=( $(compgen -W "-f -w --bootstrap --no-bootstrap" -- "$current") )
|
|
return 0
|
|
;;
|
|
esac
|
|
|
|
# this condition is so files are completed properly for --yadm-xxx options
|
|
if [[ ! "$penultimate" =~ ^- ]]; then
|
|
# TODO: somehow solve the problem with [--yadm-xxx option] being
|
|
# incompatible with what git expects, namely [--arg=option]
|
|
_git
|
|
fi
|
|
if [[ "$current" =~ ^- ]]; then
|
|
local matching
|
|
matching=$(compgen -W "$(yadm introspect switches 2>/dev/null)" -- "$current")
|
|
__gitcompappend "$matching"
|
|
fi
|
|
|
|
if [ "$COMP_CWORD" == 1 ] || [[ "$antepenultimate" =~ ^- ]] ; then
|
|
local matching
|
|
matching=$(compgen -W "$(yadm introspect commands 2>/dev/null)" -- "$current")
|
|
__gitcompappend "$matching"
|
|
fi
|
|
|
|
# remove duplicates found in COMPREPLY (a native bash way could be better)
|
|
if [ -n "${COMPREPLY[*]}" ]; then
|
|
COMPREPLY=($(echo "${COMPREPLY[@]}" | sort -u))
|
|
fi
|
|
|
|
}
|
|
|
|
complete -o bashdefault -o default -F _yadm yadm 2>/dev/null \
|
|
|| complete -o default -F _yadm yadm
|
|
|
|
fi
|