package main import ( "fmt" "os" "strings" ) /* handles shell autocomplete */ // used for shell auto completion var ARGNAME string = "wit-test" // todo: get this from $0 ? func (args) doBashAuto() { argv.doBashHelp() switch argv.BashAuto[0] { case "list": fmt.Println("--all --mine --favorites --private") case "debian": fmt.Println("--dry-run") case "upgrade": fmt.Println("--dry-run") case "build": fmt.Println("--verbose") case "install": fmt.Println("--verbose") case "repomap-clone": fmt.Println("--repomap") default: if strings.HasSuffix(argv.BashAuto[0], ARGNAME) { // list the subcommands here fmt.Println("--bash list build debian install repomap-clone upgrade") } } 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.argpp.WriteHelp(os.Stderr) // return } fmt.Fprintln(os.Stderr, "") fmt.Fprintln(os.Stderr, "list: show every package on mirrors.wit.com") fmt.Fprintln(os.Stderr, "build: go build every package that identifies as a binary") fmt.Fprintln(os.Stderr, "install: go install every package into ~/go/bin") fmt.Fprintln(os.Stderr, "repomap-clone: go-clone every package from a gowebd repomap") 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) }