--- /dev/null
+# 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
+