mirror of
				https://github.com/TheLocehiliosan/yadm
				synced 2025-06-13 13:03:58 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			106 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			106 lines
		
	
	
		
			2.9 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 -x 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 -b --bootstrap --no-bootstrap" -- "$current") )
 | |
|         return 0
 | |
| 		  ;;
 | |
|     esac
 | |
| 
 | |
|     local yadm_switches=( $(yadm introspect switches 2>/dev/null) )
 | |
| 
 | |
|     # this condition is so files are completed properly for --yadm-xxx options
 | |
|     if [[ " ${yadm_switches[*]} " != *" $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_switches[*]}" -- "$current")
 | |
|       __gitcompappend "$matching"
 | |
|     fi
 | |
| 
 | |
|     # Find the index of where the sub-command argument should go.
 | |
|     local command_idx
 | |
|     for (( command_idx=1 ; command_idx < ${#COMP_WORDS[@]} ; command_idx++ )); do
 | |
|       local command_idx_arg="${COMP_WORDS[$command_idx]}"
 | |
|       if [[ " ${yadm_switches[*]} " = *" $command_idx_arg "* ]]; then
 | |
|         let command_idx++
 | |
|       elif [[ "$command_idx_arg" = -* ]]; then
 | |
|         :
 | |
|       else
 | |
|         break
 | |
|       fi
 | |
|     done
 | |
|     if [[ "$COMP_CWORD" = "$command_idx" ]]; 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
 |