#compdef git-hub-browse #autoload # # Completes git-hub-browse. # # Authors: # Sorin Ionescu # if ! is-true "$(git rev-parse --is-inside-work-tree 2> /dev/null)"; then return 1 fi local state expl remotes remote branches_or_tags branches tags files ret=1 _arguments -C -s -S \ '1::args:->remote' \ '2::args:->branch-or-tag' \ '3::args:->file' && ret=0 case "$state" in (remote) remotes=($(git config --get-regexp 'remote.*.url' | cut -d. -f2)) _describe -t branch 'remotes' remotes && ret=0 ;; (branch-or-tag) remote="$words[(($CURRENT - 1))]" branches_or_tags=($( git ls-remote --heads --tags "$remote" 2>/dev/null | cut -f2 )) branches=(HEAD ${${(M)branches_or_tags[@]##refs/heads/?##}##refs/heads/}) tags=(${${(M)branches_or_tags[@]##refs/tags/?##}##refs/tags/}) _describe -t branch 'branches' branches && ret=0 _describe -t tag 'tags' tags && ret=0 ;; (file) files=(${(0)"$(_call_program files git ls-files -z --exclude-standard 2>/dev/null)"}) _wanted file expl 'file' _multi_parts - / files && ret=0 ;; esac return $ret