package main import ( "fmt" "os" ) /* handles shell autocomplete */ // used for shell auto completion // var ARGNAME string = "forge" // todo: get this from $0 ? func deleteMatch() { // f := forgedb.InitSimple() fmt.Println("go.wit.com/lib/gui/repostatus todo: need to do this") } func (args) doBashAuto() { argv.doBashHelp() switch argv.BashAuto[0] { case "checkout": fmt.Println("user devel master ") case "clean": // me.pp.WriteHelp(os.Stderr) // me.pp.WriteUsageForSubcommand(os.Stderr, me.pp.SubcommandNames()...) // me.pp.WriteHelpForSubcommand(os.Stderr, me.pp.SubcommandNames()...) me.pp.WriteHelpForSubcommand(os.Stderr, "clean") fmt.Println("delete devel force examine force git-reset user verify") case "commit": fmt.Println("--all") case "config": fmt.Println("add fix list") case "delete": deleteMatch() case "dirty": fmt.Println("--verbose") case "examine": fmt.Println("fix") case "list": fmt.Println("--all --mine --favorites --private pub") case "pull": fmt.Println("--verbose") case "patch": fmt.Println("list --submit show") case "user": fmt.Println("--force") case "devel": fmt.Println("--verbose") case "master": fmt.Println("--force") case "verify": fmt.Println("user devel master") default: if argv.BashAuto[0] == ARGNAME { // list the subcommands here fmt.Println("--bash list checkout clean commit config dirty fetch patch pull") } } 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: can this output work/parse with:") fmt.Println("# complete -C `" + ARGNAME + " --bash` " + ARGNAME) 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) }