cmd/tailscale: add shell tab-completion

The approach is lifted from cobra: `tailscale completion bash` emits a bash
script for configuring the shell's autocomplete:

    . <( tailscale completion bash )

so that typing:

    tailscale st<TAB>

invokes:

    tailscale completion __complete -- st

RELNOTE=tailscale CLI now supports shell tab-completion

Fixes #3793

Signed-off-by: Paul Scott <paul@tailscale.com>
This commit is contained in:
Paul Scott
2024-02-29 22:56:25 +00:00
committed by Paul Scott
parent 21a0fe1b9b
commit 82394debb7
32 changed files with 2393 additions and 18 deletions

View File

@@ -0,0 +1,42 @@
//go:build gen
package main
import (
"compress/gzip"
"fmt"
"io"
"os"
)
func main() {
for _, name := range []string{"comp.bash", "comp.zsh", "comp.fish", "comp.ps1"} {
err := compress(name)
if err != nil {
fmt.Fprintln(os.Stderr, "compressing "+name+":", err)
os.Exit(1)
}
}
}
func compress(name string) error {
src, err := os.Open(name)
if err != nil {
return err
}
defer src.Close()
dst, err := os.Create(name + ".gz")
if err != nil {
return err
}
defer dst.Close()
z := gzip.NewWriter(dst)
_, err = io.Copy(z, src)
if err != nil {
return err
}
return z.Close()
}