You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
47 lines
1.1 KiB
47 lines
1.1 KiB
#compdef git-hub-browse |
|
#autoload |
|
|
|
# |
|
# Completes git-hub-browse. |
|
# |
|
# Authors: |
|
# Sorin Ionescu <sorin.ionescu@gmail.com> |
|
# |
|
|
|
if ! is-true "$(command 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=($(command 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=($( |
|
command 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 command git ls-files -z --exclude-standard 2> /dev/null)"}) |
|
_wanted file expl 'file' _multi_parts - / files && ret=0 |
|
;; |
|
esac |
|
|
|
return $ret
|
|
|