From 90524977ef3603b50f3744884b6906d2216e1b28 Mon Sep 17 00:00:00 2001 From: Jeff Carr Date: Sun, 12 Oct 2025 02:23:18 -0500 Subject: moved to .cache/argv/ --- bash.go | 156 ------------------------------------------ doHandlePB.go | 13 ++-- makeAutocompleteFiles.bash.go | 156 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 165 insertions(+), 160 deletions(-) delete mode 100644 bash.go create mode 100644 makeAutocompleteFiles.bash.go diff --git a/bash.go b/bash.go deleted file mode 100644 index 0cef75c..0000000 --- a/bash.go +++ /dev/null @@ -1,156 +0,0 @@ -package prep - -// initializes logging and command line options - -import ( - "fmt" - "io/ioutil" - "os" - "strings" -) - -// deprecate this -func Bash3(dest any) *Auto { - return Autocomplete(dest) -} - -// deprecate this -func Bash(dest any) *Auto { - return Autocomplete(dest) -} - -func makeCompletionText(argname string) string { - sh := getParentProcessName() - return fmt.Sprintf("# shell might be %s", sh) -} - -func makeBashCompletionText(argname string) string { - var out string - - out += fmt.Sprintf("# add this in your bashrc:\n") - out += fmt.Sprintf("\n") - out += fmt.Sprintf("# todo: add this to go-arg as a 'hidden' go-arg option --bash\n") - out += fmt.Sprintf("#\n") - out += fmt.Sprintf("# Put the below in the file: ~/.local/share/bash-completion/completions/%s\n", argname) - out += fmt.Sprintf("#\n") - out += fmt.Sprintf("# todo: make this output work/parse with:\n") - out += fmt.Sprintf("# complete -C %s --bash go\n", argname) - out += fmt.Sprintf("\n") - out += fmt.Sprintf("_%s_complete()\n", argname) - out += fmt.Sprintf("{\n") - out += fmt.Sprintf(" # sets local to this func vars\n") - out += fmt.Sprintf(" local cur prev all\n") - out += fmt.Sprintf(" cur=${COMP_WORDS[COMP_CWORD]}\n") - out += fmt.Sprintf(" prev=${COMP_WORDS[COMP_CWORD-1]}\n") - out += fmt.Sprintf(" all=${COMP_WORDS[@]}\n") - out += fmt.Sprintf("\n") - out += fmt.Sprintf(" # this is where we generate the go-arg output\n") - out += fmt.Sprintf(" GOARGS=$(%s --auto-complete $prev \\'$cur\\' $all)\n", argname) - out += fmt.Sprintf("\n") - out += fmt.Sprintf(" # this compares the command line input from the user\n") - out += fmt.Sprintf(" # to whatever strings we output\n") - out += fmt.Sprintf(" COMPREPLY=( $(compgen -W \"$GOARGS\" -- $cur) ) # THIS WORKS\n") - out += fmt.Sprintf(" return 0\n") - out += fmt.Sprintf("}\n") - out += fmt.Sprintf("complete -F _%s_complete %s\n", argname, argname) - out += fmt.Sprintf("\n") - out += fmt.Sprintf("# copy and paste the above into your bash shell should work\n") - return out -} - -func makeBashCompletionText2(argname string) string { - var out string - - out += fmt.Sprintf("# add this in your bashrc:\n") - out += fmt.Sprintf("\n") - out += fmt.Sprintf("# todo: add this to go-arg as a 'hidden' go-arg option --bash\n") - out += fmt.Sprintf("#\n") - out += fmt.Sprintf("# Put the below in the file: ~/.local/share/bash-completion/completions/%s\n", argname) - out += fmt.Sprintf("#\n") - out += fmt.Sprintf("# todo: make this output work/parse with:\n") - out += fmt.Sprintf("# complete -C %s --bash go\n", argname) - out += fmt.Sprintf("\n") - out += fmt.Sprintf("_%s_complete()\n", argname) - out += fmt.Sprintf("{\n") - out += fmt.Sprintf(" # sets local to this func vars\n") - out += fmt.Sprintf(" local cur prev all\n") - out += fmt.Sprintf(" cur=${COMP_WORDS[COMP_CWORD]}\n") - out += fmt.Sprintf(" # prev=${COMP_WORDS[COMP_CWORD-1]}\n") - out += fmt.Sprintf(" all=${COMP_WORDS[@]}\n") - out += fmt.Sprintf("\n") - out += fmt.Sprintf(" # this is where we generate the go-arg output\n") - out += fmt.Sprintf(" GOARGS=$(%s --auto-complete \\'$cur\\' $all)\n", argname) - out += fmt.Sprintf("\n") - out += fmt.Sprintf(" # this compares the command line input from the user\n") - out += fmt.Sprintf(" # to whatever strings we output\n") - out += fmt.Sprintf(" COMPREPLY=( $(compgen -W \"$GOARGS\" -- $cur) ) # THIS WORKS\n") - out += fmt.Sprintf(" return 0\n") - out += fmt.Sprintf("}\n") - out += fmt.Sprintf("complete -F _%s_complete %s\n", argname, argname) - out += fmt.Sprintf("\n") - out += fmt.Sprintf("# copy and paste the above into your bash shell should work\n") - return out -} - -func getParentProcessName() string { - ppid := os.Getppid() - // On Linux, the command name is in /proc//comm - commPath := fmt.Sprintf("/proc/%d/comm", ppid) - content, err := ioutil.ReadFile(commPath) - if err != nil { - return "unknown" - } - // The file content has a trailing newline, so trim it. - return strings.TrimSpace(string(content)) -} - -/* - - This script will be placed in a directory in your $fpath (e.g., ~/.zsh/completions/_my-app). - -#compdef my-app - -# This function will be called by Zsh to get the completions. -_my_app_completions() { - local -a suggestions - - # Here is the key part: - # We execute our Go program with the hidden flag and capture its output. - 9 # The `(f)` flag splits the output by line into an array. - 10 suggestions=( ${(f)"$(my-app --_generate_completions)"} ) - 11 - 12 # Pass the suggestions to the Zsh completion engine. - 13 _describe 'command' suggestions - 14 } - 15 - 16 # Tell Zsh to call our function when completing for my-app - 17 _my_app_completions "$@" -*/ - -// zsh: -/* -#compdef forge - -# Zsh completion function for the 'forge' command. - -_forge_completions() { - local -a words - local -i CURRENT - - # Zsh's equivalent of Bash's COMP_WORDS and COMP_CWORD - words=("${(@)words}") - CURRENT=$CURRENT - - # Generate the completion suggestions by calling the forge command. - # The output is split into an array. - local -a suggestions - suggestions=("${(@f)$(forge --auto-complete "'${words[CURRENT]}'" "${words[@]}")}") - - # Pass the suggestions to the Zsh completion system. - _describe 'completions' suggestions -} - -# Register the function to be called for the 'forge' command. -_forge_completions "$@" - -*/ diff --git a/doHandlePB.go b/doHandlePB.go index a916a9f..1a9f044 100644 --- a/doHandlePB.go +++ b/doHandlePB.go @@ -1,6 +1,7 @@ package prep -// initializes logging and command line options +// essentially .bash_history, but in a protobuf and for any shell +// stores files ./cache/argv/.pb import ( "fmt" @@ -13,13 +14,17 @@ import ( timestamppb "google.golang.org/protobuf/types/known/timestamppb" ) -// makes a bash autocomplete file for your command func (pb *Auto) doHandlePB() error { - homeDir, err := os.UserHomeDir() + return pb.readConfigPB() +} + +// makes a bash autocomplete file for your command +func (pb *Auto) readConfigPB() error { + cacheDir, err := os.UserCacheDir() if err != nil { return err } - basedir := filepath.Join(homeDir, ".cache/autocomplete") + basedir := filepath.Join(cacheDir, "argv") os.MkdirAll(basedir, os.ModePerm) fullname := filepath.Join(basedir, pb.Argname+".pb") diff --git a/makeAutocompleteFiles.bash.go b/makeAutocompleteFiles.bash.go new file mode 100644 index 0000000..0cef75c --- /dev/null +++ b/makeAutocompleteFiles.bash.go @@ -0,0 +1,156 @@ +package prep + +// initializes logging and command line options + +import ( + "fmt" + "io/ioutil" + "os" + "strings" +) + +// deprecate this +func Bash3(dest any) *Auto { + return Autocomplete(dest) +} + +// deprecate this +func Bash(dest any) *Auto { + return Autocomplete(dest) +} + +func makeCompletionText(argname string) string { + sh := getParentProcessName() + return fmt.Sprintf("# shell might be %s", sh) +} + +func makeBashCompletionText(argname string) string { + var out string + + out += fmt.Sprintf("# add this in your bashrc:\n") + out += fmt.Sprintf("\n") + out += fmt.Sprintf("# todo: add this to go-arg as a 'hidden' go-arg option --bash\n") + out += fmt.Sprintf("#\n") + out += fmt.Sprintf("# Put the below in the file: ~/.local/share/bash-completion/completions/%s\n", argname) + out += fmt.Sprintf("#\n") + out += fmt.Sprintf("# todo: make this output work/parse with:\n") + out += fmt.Sprintf("# complete -C %s --bash go\n", argname) + out += fmt.Sprintf("\n") + out += fmt.Sprintf("_%s_complete()\n", argname) + out += fmt.Sprintf("{\n") + out += fmt.Sprintf(" # sets local to this func vars\n") + out += fmt.Sprintf(" local cur prev all\n") + out += fmt.Sprintf(" cur=${COMP_WORDS[COMP_CWORD]}\n") + out += fmt.Sprintf(" prev=${COMP_WORDS[COMP_CWORD-1]}\n") + out += fmt.Sprintf(" all=${COMP_WORDS[@]}\n") + out += fmt.Sprintf("\n") + out += fmt.Sprintf(" # this is where we generate the go-arg output\n") + out += fmt.Sprintf(" GOARGS=$(%s --auto-complete $prev \\'$cur\\' $all)\n", argname) + out += fmt.Sprintf("\n") + out += fmt.Sprintf(" # this compares the command line input from the user\n") + out += fmt.Sprintf(" # to whatever strings we output\n") + out += fmt.Sprintf(" COMPREPLY=( $(compgen -W \"$GOARGS\" -- $cur) ) # THIS WORKS\n") + out += fmt.Sprintf(" return 0\n") + out += fmt.Sprintf("}\n") + out += fmt.Sprintf("complete -F _%s_complete %s\n", argname, argname) + out += fmt.Sprintf("\n") + out += fmt.Sprintf("# copy and paste the above into your bash shell should work\n") + return out +} + +func makeBashCompletionText2(argname string) string { + var out string + + out += fmt.Sprintf("# add this in your bashrc:\n") + out += fmt.Sprintf("\n") + out += fmt.Sprintf("# todo: add this to go-arg as a 'hidden' go-arg option --bash\n") + out += fmt.Sprintf("#\n") + out += fmt.Sprintf("# Put the below in the file: ~/.local/share/bash-completion/completions/%s\n", argname) + out += fmt.Sprintf("#\n") + out += fmt.Sprintf("# todo: make this output work/parse with:\n") + out += fmt.Sprintf("# complete -C %s --bash go\n", argname) + out += fmt.Sprintf("\n") + out += fmt.Sprintf("_%s_complete()\n", argname) + out += fmt.Sprintf("{\n") + out += fmt.Sprintf(" # sets local to this func vars\n") + out += fmt.Sprintf(" local cur prev all\n") + out += fmt.Sprintf(" cur=${COMP_WORDS[COMP_CWORD]}\n") + out += fmt.Sprintf(" # prev=${COMP_WORDS[COMP_CWORD-1]}\n") + out += fmt.Sprintf(" all=${COMP_WORDS[@]}\n") + out += fmt.Sprintf("\n") + out += fmt.Sprintf(" # this is where we generate the go-arg output\n") + out += fmt.Sprintf(" GOARGS=$(%s --auto-complete \\'$cur\\' $all)\n", argname) + out += fmt.Sprintf("\n") + out += fmt.Sprintf(" # this compares the command line input from the user\n") + out += fmt.Sprintf(" # to whatever strings we output\n") + out += fmt.Sprintf(" COMPREPLY=( $(compgen -W \"$GOARGS\" -- $cur) ) # THIS WORKS\n") + out += fmt.Sprintf(" return 0\n") + out += fmt.Sprintf("}\n") + out += fmt.Sprintf("complete -F _%s_complete %s\n", argname, argname) + out += fmt.Sprintf("\n") + out += fmt.Sprintf("# copy and paste the above into your bash shell should work\n") + return out +} + +func getParentProcessName() string { + ppid := os.Getppid() + // On Linux, the command name is in /proc//comm + commPath := fmt.Sprintf("/proc/%d/comm", ppid) + content, err := ioutil.ReadFile(commPath) + if err != nil { + return "unknown" + } + // The file content has a trailing newline, so trim it. + return strings.TrimSpace(string(content)) +} + +/* + + This script will be placed in a directory in your $fpath (e.g., ~/.zsh/completions/_my-app). + +#compdef my-app + +# This function will be called by Zsh to get the completions. +_my_app_completions() { + local -a suggestions + + # Here is the key part: + # We execute our Go program with the hidden flag and capture its output. + 9 # The `(f)` flag splits the output by line into an array. + 10 suggestions=( ${(f)"$(my-app --_generate_completions)"} ) + 11 + 12 # Pass the suggestions to the Zsh completion engine. + 13 _describe 'command' suggestions + 14 } + 15 + 16 # Tell Zsh to call our function when completing for my-app + 17 _my_app_completions "$@" +*/ + +// zsh: +/* +#compdef forge + +# Zsh completion function for the 'forge' command. + +_forge_completions() { + local -a words + local -i CURRENT + + # Zsh's equivalent of Bash's COMP_WORDS and COMP_CWORD + words=("${(@)words}") + CURRENT=$CURRENT + + # Generate the completion suggestions by calling the forge command. + # The output is split into an array. + local -a suggestions + suggestions=("${(@f)$(forge --auto-complete "'${words[CURRENT]}'" "${words[@]}")}") + + # Pass the suggestions to the Zsh completion system. + _describe 'completions' suggestions +} + +# Register the function to be called for the 'forge' command. +_forge_completions "$@" + +*/ -- cgit v1.2.3