]> git.phdru.name Git - dotfiles.git/blobdiff - .shellrc
.shellrc: change bash completion for aliases
[dotfiles.git] / .shellrc
index 0b880623b992fb2d89e7809b3eeb6b2a29274002..b776b4ba2cee39b26e06dc353f1273e6082af9fa 100644 (file)
--- a/.shellrc
+++ b/.shellrc
@@ -113,13 +113,40 @@ if test -n "$BASH_VERSION"; then
    done
 
    if has_completion wget; then
-      complete -F _wget wget-m wget-wrapper ww
+      _wget_completion_loader() {
+         _completion_loader wget
+         complete -F _wget wget-m wget-wrapper ww
+         unset _wget_completion_loader
+         return 124
+      }
+      complete -F _wget_completion_loader wget-m wget-wrapper ww
    fi
 
    for cmd in distribute ftp lftp r rsync \
       s scp ssh smbclient tcpdump tshark wireshark; do
          ! has_completion $cmd && complete -o default -A hostname $cmd;
    done
+
+   if has_completion rsync; then
+      _rsync_completion_loader() {
+         _completion_loader rsync
+         complete -F _rsync r
+         unset _rsync_completion_loader
+         return 124
+      }
+      complete -F _rsync_completion_loader r
+   fi
+
+   if has_completion ssh; then
+      _ssh_completion_loader() {
+         _completion_loader ssh
+         complete -F _ssh s
+         unset _ssh_completion_loader
+         return 124
+      }
+      complete -F _ssh_completion_loader s
+   fi
+
    unset has_completion
 
    complete -A job bg fg j jobs wait
@@ -177,13 +204,16 @@ if test -x /usr/bin/git >/dev/null 2>&1; then
 
    if test -n "$BASH_VERSION"; then
       # completion for global aliases in .gitconfig
-      # fixup rbi rbia rbiap rbip - delegate to git-rebase completion
 
-      _git_fixup() { _git_rebase ; }
-      _git_rbi() { _git_rebase ; }
-      _git_rbia() { _git_rebase ; }
-      _git_rbiap() { _git_rebase ; }
-      _git_rbip() { _git_rebase ; }
+      # fixup rbi rbia rbiap rbip - do refs name completion
+      _git_fixup() { __gitcomp_nl "$(__git_refs)" ; }
+      _git_rbi() { __gitcomp_nl "$(__git_refs)" ; }
+      _git_rbia() { __gitcomp_nl "$(__git_refs)" ; }
+      _git_rbiap() { __gitcomp_nl "$(__git_refs)" ; }
+      _git_rbip() { __gitcomp_nl "$(__git_refs)" ; }
+      #
+      # push-to-all-remotes - do branch name completion
+      _git_push_to_all_remotes() { __gitcomp_nl "$(__git_heads)" ; }
 
       # list remotes with URLs matching a regexp
       _list_remotes() {
@@ -196,22 +226,24 @@ if test -x /usr/bin/git >/dev/null 2>&1; then
          done
       }
 
-      # completion for cdremote - list remotes with directories as URLs
-      _cdremote_complete() {
+      # completion for cdremote and git-open - list remotes with a pattern
+      _list_remotes_completion() {
          local cur="${COMP_WORDS[COMP_CWORD]}";
-         _list_remotes '^\(/\|\.\./\)' # (/ or ../ at the beginning)
+         _list_remotes "$1"
          COMPREPLY=(`compgen -W "$GIT_REMOTES" -- "$cur"`)
          unset GIT_REMOTES
       }
 
+      # completion for cdremote - list remotes with directories as URLs
+      _cdremote_complete() {
+         _list_remotes_completion '^\(/\|\.\./\)' # (/ or ../ at the beginning)
+      }
+
       complete -F _cdremote_complete cdremote
 
       # 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"`)
-         unset GIT_REMOTES
+         _list_remotes_completion '^http\(s\)\?://'
       }
 
       complete -F _git_open git-open