function __git_checkout -a var # is numeric if [ "$var" -eq "$var" ] 2>/dev/null # number set length (count $arr) if [ $var -gt $length ] echo 'Number is large.' return end set toplevel (git rev-parse --show-toplevel) set myarg $arr[$var] git checkout $myarg # to allow gco from subdirs, use: # git checkout $toplevel/$myarg else # not a number git checkout $var end end function __gco # number set res (string split "-" -- (string trim $argv)) # for branch names with hyphens, use: # set res (string trim $argv) set first $res[1] set length (count $res) set last "" # > if [ $length -gt 1 ] set last $res[2] else # just one #set myarg $arr[$res] #git checkout $myarg __git_checkout $res return end # last exists if [ $last != '' ] # first < last if [ $first -lt $last ] for i in (seq $first 1 $last) __git_checkout $i end else echo 'Argument is not valid.' end else __git_checkout $first end end function gco # TODO: space like, `gco 1 2 3` set length (count $argv) if [ $length -eq 2 ] # more than 1 set fst (echo $argv[1] | string sub -l 1) # if first string is -, it is option if [ $fst = '-' ] git checkout $argv return end end set res (string split " " -- (string trim $argv)) for i in $res #echo $i __gco $i end end