diff --git a/zsh/go b/zsh/go new file mode 100644 index 0000000..adc5a34 --- /dev/null +++ b/zsh/go @@ -0,0 +1,35 @@ +go_commands=(go) + +_go-installed() { + which go > /dev/null 2>&1 +} + +_within-go-project() { + local check_dir=$PWD + while [ "$(dirname $check_dir)" != "/" ]; do + if [ -f "$check_dir/.gopath" ]; then + echo "$check_dir" + return + fi + check_dir="$(dirname $check_dir)" + done + false +} + +_run-with-gopath() { + local go_path + if _go-installed && go_path=$(_within-go-project); then + GOPATH="$go_path" $@ + else + $@ + fi +} + +for cmd in $go_commands; do + eval "function gopath_$cmd () { _run-with-gopath $cmd \$@}" + alias $cmd=gopath_$cmd + + if which _$cmd > /dev/null 2>&1; then + compdef _$cmd gopath_$cmd=$cmd + fi +done diff --git a/zsh/rc b/zsh/rc index 88c6124..b9ddd4f 100644 --- a/zsh/rc +++ b/zsh/rc @@ -12,6 +12,7 @@ source $DOTFILES_ZSH_DIR/vi source $DOTFILES_ZSH_DIR/completion source $DOTFILES_ZSH_DIR/prompt source $DOTFILES_ZSH_DIR/bundler +source $DOTFILES_ZSH_DIR/go source $DOTFILES_SHELL_DIR/git_prompt_info GIT_PS1_SHOWDIRTYSTATE=1