From cd4e1f9867776f245d8fb0938ec4999cd8e28d41 Mon Sep 17 00:00:00 2001 From: Jeff Carr Date: Mon, 8 Sep 2025 16:18:45 -0500 Subject: [PATCH] use common bash function --- argv.go | 50 ++++++++++++++++++++++++ argvAutocomplete.go | 93 --------------------------------------------- main.go | 3 +- 3 files changed, 52 insertions(+), 94 deletions(-) delete mode 100644 argvAutocomplete.go diff --git a/argv.go b/argv.go index bea917b..25e9a3c 100644 --- a/argv.go +++ b/argv.go @@ -9,6 +9,10 @@ package main */ import ( + "fmt" + "os" + "strings" + "go.wit.com/lib/debugger" "go.wit.com/lib/gui/logsettings" "go.wit.com/log" @@ -61,3 +65,49 @@ func init() { func (args) Version() string { return ARGNAME + " " + VERSION + " Built on " + BUILDTIME } + +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, "") +} diff --git a/argvAutocomplete.go b/argvAutocomplete.go deleted file mode 100644 index bbedb83..0000000 --- a/argvAutocomplete.go +++ /dev/null @@ -1,93 +0,0 @@ -// Copyright 2017-2025 WIT.COM Inc. All rights reserved. -// Use of this source code is governed by the GPL 3.0 - -package main - -import ( - "fmt" - "os" - "strings" -) - -/* - handles shell autocomplete -*/ - -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("# Put the below in the file: ~/.local/share/bash-completion/completions/" + ARGNAME) - 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) -} diff --git a/main.go b/main.go index 8d7085d..a61a9ee 100644 --- a/main.go +++ b/main.go @@ -14,6 +14,7 @@ import ( "go.wit.com/dev/alexflint/arg" "go.wit.com/gui" + "go.wit.com/lib/fhelp" "go.wit.com/log" ) @@ -41,7 +42,7 @@ func main() { } if argv.Bash { - argv.doBash() + fhelp.DoBash(ARGNAME) os.Exit(0) } if len(argv.BashAuto) != 0 {