package main import ( "fmt" "os" "os/user" ) /* handles shell autocomplete */ // used for shell auto completion // var ARGNAME string = "forge" // todo: get this from $0 ? func (args) doBashAuto() { argv.doBashHelp() switch argv.BashAuto[0] { case "checkout": usr, _ := user.Current() fmt.Println("user devel master " + usr.Username) case "commit": fmt.Println("--all") case "config": fmt.Println("add fix list delete") case "list": fmt.Println("--all --mine --favorites --private") case "pull": fmt.Println("--all --mine --favorites --private") case "patch": fmt.Println("--list --submit --show") case "dirty": fmt.Println("--show-files") case "user": fmt.Println("--force") case "devel": fmt.Println("--force") case "master": fmt.Println("--force") default: if argv.BashAuto[0] == ARGNAME { // list the subcommands here fmt.Println("--bash quick") } } os.Exit(0) } // prints help to STDERR // TODO: move everything below this to go-args func (args) doBashHelp() { if argv.BashAuto[1] != "''" { // if this is not blank, then the user has typed something return } if argv.BashAuto[0] != ARGNAME { // if this is not the name of the command, the user already started doing something return } if argv.BashAuto[0] == ARGNAME { me.pp.WriteHelp(os.Stderr) return } fmt.Fprintln(os.Stderr, "") fmt.Fprintln(os.Stderr, "hello world") fmt.Fprintln(os.Stderr, "") } // complete -F forge --bash forge func (args) doBash() { fmt.Println("# add this in your bashrc:") fmt.Println("") fmt.Println("# todo: add this to go-arg as a 'hidden' go-arg option --bash") fmt.Println("#") fmt.Println("# todo: make this output work/parse with:") fmt.Println("# complete -C " + ARGNAME + " --bash go") fmt.Println("") fmt.Println("_" + ARGNAME + "_complete()") fmt.Println("{") fmt.Println(" # sets local to this func vars") fmt.Println(" local cur prev all") fmt.Println(" cur=${COMP_WORDS[COMP_CWORD]}") fmt.Println(" prev=${COMP_WORDS[COMP_CWORD-1]}") fmt.Println(" all=${COMP_WORDS[@]}") fmt.Println("") fmt.Println(" # this is where we generate the go-arg output") fmt.Println(" GOARGS=$(" + ARGNAME + " --auto-complete $prev \\'$cur\\' $all)") fmt.Println("") fmt.Println(" # this compares the command line input from the user") fmt.Println(" # to whatever strings we output") fmt.Println(" COMPREPLY=( $(compgen -W \"$GOARGS\" -- $cur) ) # THIS WORKS") fmt.Println(" return 0") fmt.Println("}") fmt.Println("complete -F _" + ARGNAME + "_complete " + ARGNAME) fmt.Println("") fmt.Println("# copy and paste the above into your bash shell should work") os.Exit(0) }