| # Bash completion script for homesick |
| # |
| # The homebrew bash completion script was used as inspiration. |
| # Originally from https://github.com/liborw/homesick-completion |
| |
| _homesick_complete() |
| { |
| local cur="${COMP_WORDS[COMP_CWORD]}" |
| local options="--skip --force --pretend --quiet" |
| local actions="cd clone commit destroy diff generate help list open pull push rc show_path status symlink track unlink version" |
| local repos=$(\ls ~/.homesick/repos) |
| |
| # Subcommand list |
| [[ ${COMP_CWORD} -eq 1 ]] && { |
| COMPREPLY=( $(compgen -W "${options} ${actions}" -- ${cur}) ) |
| return |
| } |
| |
| # Find the first non-switch word |
| local prev_index=1 |
| local prev="${COMP_WORDS[prev_index]}" |
| while [[ $prev == -* ]]; do |
| prev_index=$((++prev_index)) |
| prev="${COMP_WORDS[prev_index]}" |
| done |
| |
| # Find the number of non-"--" commands |
| local num=0 |
| for word in ${COMP_WORDS[@]} |
| do |
| if [[ $word != -* ]]; then |
| num=$((++num)) |
| fi |
| done |
| |
| case "$prev" in |
| # Commands that take a castle |
| cd|commit|destroy|diff|open|pull|push|rc|show_path|status|symlink|unlink) |
| COMPREPLY=( $(compgen -W "${repos}" -- ${cur}) ) |
| return |
| ;; |
| # Commands that take command |
| help) |
| COMPREPLY=( $(compgen -W "${actions}" -- ${cur}) ) |
| return |
| ;; |
| # Track command take file and repo |
| track) |
| if [[ "$num" -eq 2 ]]; then |
| COMPREPLY=( $(compgen -X -f ${cur}) ) |
| elif [[ "$num" -ge 3 ]]; then |
| COMPREPLY=( $(compgen -W "${repos}" -- ${cur}) ) |
| fi |
| return |
| ;; |
| esac |
| } |
| |
| complete -o bashdefault -o default -F _homesick_complete homesick |
| |