summaryrefslogtreecommitdiff
path: root/shell.go
diff options
context:
space:
mode:
Diffstat (limited to 'shell.go')
-rw-r--r--shell.go43
1 files changed, 43 insertions, 0 deletions
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/<pid>/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