mirror of
				https://github.com/TheLocehiliosan/yadm
				synced 2025-06-13 13:03:58 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			202 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			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
 |