summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--README.markdown14
-rwxr-xr-xbin/_hcl_completions67
2 files changed, 72 insertions, 9 deletions
diff --git a/README.markdown b/README.markdown
index 6e24544..e08535e 100644
--- a/README.markdown
+++ b/README.markdown
@@ -124,15 +124,12 @@ The above starts and immediately stops a one-hour timer with the given note.
## ADVANCED USAGE
-### Bash Auto-completion of Task Aliases
+### Bash Tab Completions
-You can enable auto-completion of task aliases by adding this to your shell
-configuration (note the backticks inside the double quotes):
+You can enable auto-completion of commands, project ids, task ids and task aliases by adding this to your shell
+configuration:
- complete -W "`cat ~/.hcl/aliases`" hcl
-
-Warning: You will need to have run `hcl` at least once to create the aliases
-file. Without it, this command will fail with an error.
+ source _hcl_completions
### Configuration Profiles
@@ -143,10 +140,9 @@ once, specify an alternate configuration directory in the environment as
once.
Here is a shell alias `myhcl` with a separate configuration from the
-main `hcl` command, and another command to configure alias completion:
+main `hcl` command, tab completion will work with the alias automatically:
alias myhcl="env HCL_DIR=~/.myhcl hcl"
- complete -W "`cat ~/.myhcl/aliases`" myhcl
Adding something like the above to your bashrc will enable a new command,
`myhcl`. When using `myhcl` you can use different credentials and aliases,
diff --git a/bin/_hcl_completions b/bin/_hcl_completions
new file mode 100755
index 0000000..16f551c
--- /dev/null
+++ b/bin/_hcl_completions
@@ -0,0 +1,67 @@
+#!/bin/bash
+
+_hcl_getProjects()
+{
+ $1 tasks | perl -ne 's/ - (?!.* -).*//g; print;' | sed -e 's/\s[0-9]\+\s/ /g' | sed -e 's/\s/ /g' | sort | uniq
+}
+
+_hcl_getTasks()
+{
+ $1 tasks | grep "^$2" | sed -e 's/\s/ /g' | sort | uniq | cut -d" " -f 2-
+}
+
+_hcl()
+{
+ local count=${#COMP_WORDS[@]}
+ local script=${COMP_WORDS[0]}
+ local cur=${COMP_WORDS[COMP_CWORD]}
+ case $count in
+ 2)
+ COMPREPLY=( $(compgen -W "start resume log stop note show tasks alias unalias aliases cancel nvm oops config status" -- $cur) )
+ ;;
+ 3)
+ local namespace=${COMP_WORDS[1]}
+
+ case $namespace in
+ 'alias')
+ COMPREPLY=( $(compgen -W "" -- $cur) )
+ ;;
+ 'start'|'resume'|'log')
+ COMPREPLY=( $(compgen -W "$($script aliases | sed -e 's/,//g')" -- $cur) )
+ ;;
+ esac
+ ;;
+ 4)
+ local namespace=${COMP_WORDS[1]}
+ local task=${COMP_WORDS[2]}
+ case $namespace in
+ 'alias')
+ local IFS_OLD="$IFS";
+ local IFS=$'\n';
+ COMPREPLY=( $(compgen -W "$(_hcl_getProjects $script)" -- $cur) )
+ local IFS=$IFS_OLD;
+ if [[ ${#COMPREPLY[*]} -eq 1 ]]; then #Only one completion
+ COMPREPLY=$(echo $COMPREPLY | sed -e 's/\s.*$//g')
+ fi
+ ;;
+ esac
+ ;;
+ 5)
+ local namespace=${COMP_WORDS[1]}
+ local task=${COMP_WORDS[2]}
+ local projectid=${COMP_WORDS[3]}
+ case $namespace in
+ 'alias')
+ local IFS_OLD="$IFS";
+ local IFS=$'\n';
+ COMPREPLY=( $(compgen -W "$(_hcl_getTasks $script $projectid)" -- $cur) )
+ local IFS=$IFS_OLD;
+ if [[ ${#COMPREPLY[*]} -eq 1 ]]; then #Only one completion
+ COMPREPLY=$(echo $COMPREPLY | sed -e 's/\s.*$//g')
+ fi
+ ;;
+ esac
+ ;;
+ esac
+}
+complete -F _hcl hcl