]> git.phdru.name Git - dotfiles.git/blobdiff - .shellrc
.shellrc: use '() {' syntax for functions
[dotfiles.git] / .shellrc
index a908dd953ad50d9ff3c1d6104ecb1031af328cbe..6a57008952d125a312c4c012a75875286fa09699 100644 (file)
--- a/.shellrc
+++ b/.shellrc
@@ -164,12 +164,53 @@ KillAll() {
 }
 
 
-x() { exit; }
-X() { startx >> .Xserver.log 2>&1; cyr; }
+# git-related
 
+# chdir to a remote's directory (if the remote is on the local FS)
+cdremote() {
+   cd "`git config --get remote.$1.url`"
+}
 
-include()
-{
+case "$SHELL" in
+   */bash)
+      # list remotes with URLs matching a regexp
+      list_remotes() {
+         GIT_REMOTES=""
+         for remote in `git remote`; do
+            if git config --get remote.$remote.url | grep -q "$1"; then
+               GIT_REMOTES="$GIT_REMOTES $remote"
+            fi
+         done
+         remote=""
+         unset remote
+      }
+
+      # define completion for cdremote - list remotes with directories as URLs
+      _cdremote_complete() {
+         local cur="${COMP_WORDS[COMP_CWORD]}";
+         list_remotes '^\(/\|\.\./\)'
+         COMPREPLY=(`compgen -W "$GIT_REMOTES" -- "$cur"`)
+         GIT_REMOTES=""
+         unset GIT_REMOTES
+      }
+
+      complete -F _cdremote_complete cdremote
+
+      # define completion for git-open - list remotes with http(s) URLs
+      _git_open() {
+         local cur="${COMP_WORDS[COMP_CWORD]}";
+         list_remotes '^http\(s\)\?://'
+         COMPREPLY=(`compgen -W "$GIT_REMOTES" -- "$cur"`)
+         GIT_REMOTES=""
+         unset GIT_REMOTES
+      }
+
+      complete -F _git_open git-open
+   ;;
+esac
+
+
+include() {
    cfg="$1"
    if [ -f "./$cfg" -a -r "./$cfg" ]; then
       echo "Reading config file \`$cfg'" 1>&2
@@ -294,3 +335,7 @@ fi
 #   eval "`pyenv init -`"
 #   eval "`pyenv virtualenv-init -`"
 #fi
+
+
+X() { startx >> .Xserver.log 2>&1; cyr; }
+x() { exit; }