Added completion for Homesick
authorNils Winkler <nils@nilswinkler.com>
Mon, 9 Sep 2013 06:48:15 +0000 (08:48 +0200)
committerNils Winkler <nils@nilswinkler.com>
Thu, 16 Jan 2014 08:44:55 +0000 (09:44 +0100)
(https://github.com/technicalpickles/homesick). Originally from
https://github.com/liborw/homesick-completion.

completion/available/homesick.completion.bash [new file with mode: 0644]

diff --git a/completion/available/homesick.completion.bash b/completion/available/homesick.completion.bash
new file mode 100644 (file)
index 0000000..d0ebbba
--- /dev/null
@@ -0,0 +1,60 @@
+# 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
+