summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZack Hobson2017-02-03 21:17:23 -0800
committerGitHub2017-02-03 21:17:23 -0800
commitf29d6db30ffaede27518b168208982d11e888880 (patch)
treedcddd6913b56e73dccbee3363c7eb4803df7f678
parent7b3d69b977a049034f30725afb3497d83f7d1095 (diff)
parent60b6dc45b667873ca050588241f3f6b4beff5ca1 (diff)
downloadhcl-f29d6db30ffaede27518b168208982d11e888880.tar.bz2
Merge pull request #69 from chet0xhenry/master
Adding Extensive Bas Tab Completion
-rw-r--r--README.markdown13
-rwxr-xr-xbin/_hcl_completions67
-rw-r--r--hcl.gemspec2
3 files changed, 73 insertions, 9 deletions
diff --git a/README.markdown b/README.markdown
index 6e24544..32fb6ed 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 $(ruby -e "print File.dirname(Gem.bin_path('hcl', 'hcl'))")/_hcl_completions
### Configuration Profiles
@@ -146,7 +143,7 @@ Here is a shell alias `myhcl` with a separate configuration from the
main `hcl` command, and another command to configure alias completion:
alias myhcl="env HCL_DIR=~/.myhcl hcl"
- complete -W "`cat ~/.myhcl/aliases`" myhcl
+ complete -F _hcl 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
diff --git a/hcl.gemspec b/hcl.gemspec
index de91fe9..076f0ca 100644
--- a/hcl.gemspec
+++ b/hcl.gemspec
@@ -9,7 +9,7 @@ Gem::Specification.new do |s|
s.email = "zack@zackhobson.com"
s.description = "HCl is a command-line client for manipulating Harvest time sheets."
s.executables = ["hcl"]
- s.files = %w[LICENSE Rakefile Gemfile bin/hcl man/hcl.1] + Dir['*.markdown'] +
+ s.files = %w[LICENSE Rakefile Gemfile bin/hcl bin/_hcl_completions man/hcl.1] + Dir['*.markdown'] +
Dir['lib/**/*.rb'] + Dir['test/**/*.rb']
s.homepage = "https://zenhob.github.io/hcl/"
s.licenses = ["MIT"]