From fce9170f75d9bcc10699ff738948591bf637f28b Mon Sep 17 00:00:00 2001 From: Jeff Carr Date: Thu, 9 Oct 2025 01:03:37 -0500 Subject: zsh stuff --- Makefile | 16 +++++++++++----- shell.go | 43 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 54 insertions(+), 5 deletions(-) diff --git a/Makefile b/Makefile index f27bc29..2f87593 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,8 @@ -# git remote add github git@github.com:wit-go/gui-debugger.git +all: auto.pb.go goimports vet + @echo This GO code passes the compile checks -all: generate goimports vet - @echo common init code for common packages +auto.pb.go: auto.proto + make generate generate: clean go mod init @@ -22,5 +23,10 @@ clean: -rm -f go.* go-mod-clean purge -auto.pb.go: auto.proto - autogenpb --proto auto.proto +# fixes your numbers if you move things around +# THIS TOTALLY BREAKS THE POINT OF PROTOBUF +# To work around that breaking, you must change the version +# also, all the wrapping code must support this. which it doesn't +proto-renumber: clean + autogenpb --renumber --proto auto.proto + make goimports vet diff --git a/shell.go b/shell.go index 212c935..2602513 100644 --- a/shell.go +++ b/shell.go @@ -4,8 +4,16 @@ package prep import ( "fmt" + "io/ioutil" + "os" + "strings" ) +func makeCompletionText(argname string) string { + sh := getParentProcessName() + return fmt.Sprintf("# shell might be %s", sh) +} + func makeBashCompletionText(argname string) string { var out string @@ -74,6 +82,41 @@ func makeBashCompletionText2(argname string) string { 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 -- cgit v1.2.3