diff --git a/bashrc b/bashrc index aa00ef5..b64cfd1 100644 --- a/bashrc +++ b/bashrc @@ -1,5 +1,6 @@ # vim: set noexpandtab :miv # alias gcd="source git-cd" +alias g="source cd-improved" alias hello='echo "Hello :)"' alias w='watch -t -d -n 1' alias setclip='xclip -selection c' diff --git a/bin/cd-improved b/bin/cd-improved new file mode 100644 index 0000000..e6f33fc --- /dev/null +++ b/bin/cd-improved @@ -0,0 +1,21 @@ +#!/bin/sh + +root="$(git rev-parse --show-toplevel 2>/dev/null)" + +if [ -z "$root" ] +then + cd $@ +else + if [ -z "$1" ] + then + cd "$root" + else + if [ $(echo "$1" | grep '^/') ] + then cd "$root"$@ + else cd $@ + fi + fi +fi + +git rev-parse --show-toplevel >/dev/null 2>&1 \ + && prompt gitlong || prompt normal diff --git a/completion/bash/g b/completion/bash/g new file mode 100644 index 0000000..db310e0 --- /dev/null +++ b/completion/bash/g @@ -0,0 +1,16 @@ +_g_completion() { + root=$(git rev-parse --show-toplevel 2>/dev/null) + if [ "$root" ] + then + if echo "$2" | grep '^\/' > /dev/null + then + dirname=$(dirname "$2foo") + regex=$(echo $root | sed 's/\//\\\//g') + for dir in $(find $root$dirname -maxdepth 1 -mindepth 1 -type d | sed s'/^'"$regex"'//g' | grep '^'"$2") + do COMPREPLY+=("$dir/") + done + fi + fi +} + +complete -F _g_completion -o bashdefault -o dirnames g