yadm/completion/zsh/_yadm

202 lines
5.8 KiB
Plaintext

#compdef yadm
# This completion tries to fallback to git's completion for git commands.
# It handles two different types of fallbacks:
# - The git completion shipped with git.
# - The git completion shipped with zsh.
_yadm-alt() {
return 0
}
_yadm-bootstrap() {
return 0
}
_yadm-clone() {
_arguments \
'(--bootstrap --no-bootstrap)--bootstrap[force bootstrap, without prompt]' \
'(--bootstrap --no-bootstrap)--no-bootstrap[prevent bootstrap, without prompt]' \
'-b[branch name]:' \
'-f[force overwrite of existing repository]' \
'-w[work tree path]: :_files -/' \
'*:'
}
_yadm-config() {
# TODO: complete config names
}
_yadm-decrypt() {
_arguments \
'-l[list files]'
}
_yadm-encrypt() {
return 0
}
_yadm-enter() {
_arguments \
':command: _command_names -e' \
'*::arguments: _normal'
}
_yadm-git-crypt() {
# TODO: complete git-crypt options
}
_yadm-help() {
return 0
}
_yadm-init() {
_arguments \
'-f[force overwrite of existing repository]' \
'-w[work tree path]: :_files -/'
}
_yadm-list() {
_arguments \
'-a[list all tracked files]'
}
_yadm-perms() {
return 0
}
_yadm-transcrypt() {
integer _ret=1
_call_function _ret _transcrypt
return _ret
}
_yadm-upgrade() {
return 0
}
_yadm-version() {
return 0
}
_yadm_commands() {
local -a commands
commands=(
alt:'create links for alternates (yadm)'
bootstrap:'execute bootstrap (yadm)'
clone:'clone an existing repository (yadm)'
config:'configure an yadm setting'
decrypt:'decrypt files (yadm)'
encrypt:'encrypt files (yadm)'
enter:'run sub-shell with GIT variables set'
git-crypt:'run git-crypt commands for the yadm repository'
gitconfig:'run the git config command'
help:'display yadm help information'
init:'initialize an empty yadm repository'
list:'list files tracked by yadm'
perms:'fix perms for private files (yadm)'
transcrypt:'run transcrypt commands for the yadm repository'
upgrade:'upgrade legacy yadm paths'
version:'show yadm version'
)
integer _ret=1
if (( $+functions[_git_commands] )); then
zstyle ':completion:*:*:yadm:*' user-commands $commands
_call_function _ret _git_commands
zstyle -d ':completion:*:*:yadm:*' user-commands
else
local curcontext=${curcontext%:*:*}:git:
_tags common-commands alias-commands all-commands
while _tags; do
_requested common-commands && __git_zsh_cmd_common
_requested alias-commands && __git_zsh_cmd_alias
_requested all-commands && __git_zsh_cmd_all
let _ret || break
done
_describe "yadm commands" commands
fi
return _ret
}
_yadm() {
local curcontext=$curcontext state state_descr line
declare -A opt_args
local -a orig_words=( ${words[@]} )
local cur=${words[CURRENT]}
local prev=${words[CURRENT-1]}
let cword=CURRENT-1
_arguments -C \
'(-Y --yadm-dir)'{-Y,--yadm-dir}'[override the standard yadm directory]: :_files -/' \
'--yadm-data[override the standard yadm data directory]: :_files -/' \
'--yadm-repo[override the standard repo path]: :_files -/' \
'--yadm-config[override the standard config path]: :_files -/' \
'--yadm-encrypt[override the standard encrypt path]: :_files -/' \
'--yadm-archive[override the standard archive path]: :_files -/' \
'--yadm-bootstrap[override the standard bootstrap path]: :_files' \
'--help[display yadm help information]' \
'--version[show yadm version]' \
'(-): :->command' \
'(-)*:: :->option-or-argument' && return
local -a repo_args
(( $+opt_args[--yadm-repo] )) && repo_args+=(--yadm-repo "$opt_args[--yadm-repo]")
(( $+opt_args[--yadm-data] )) && repo_args+=(--yadm-data "$opt_args[--yadm-data]")
local -x GIT_DIR="$(_call_program gitdir yadm "${repo_args[@]}" introspect repo)"
local __git_dir="$GIT_DIR"
integer _ret=1
case $state in
(command)
_yadm_commands && _ret=0
;;
(option-or-argument)
local command=$words[1]
# First try to complete yadm commands
curcontext=${curcontext%:*:*}:yadm-$command:
if ! _call_function _ret _yadm-$command; then
# Translate gitconfig to use the regular completion for config
[[ $command = "gitconfig" ]] && command=config
# If is wasn't a valid command, try git's completion if available
if (( $+functions[__git_zsh_bash_func] )); then
words=( ${orig_words[@]} )
curcontext=${curcontext%:*:*}:git:
__git_zsh_bash_func $command
let _ret && _default && _ret=0
else
# If git's completion wasn't available, try zsh's
curcontext=${curcontext%:*:*}:git-$command:
if ! _call_function _ret _git-$command; then
if [[ $words[1] = \!* ]]; then
words[1]=${words[1]##\!}
_normal && _ret=0
elif zstyle -T :completion:$curcontext: use-fallback; then
_default && _ret=0
else
_message "unknown sub-command: $command"
fi
fi
fi
fi
;;
esac
return _ret
}
# Ignore call from _git when using git's completion
__yadm_zsh_main() {
_ret=0
}
# __git_zsh_bash_func comes from git's completion and _git_commands from zsh's
(( $+functions[__git_zsh_bash_func] + $+functions[_git_commands] )) || _git
_yadm