aboutsummaryrefslogtreecommitdiff
path: root/weed/command
diff options
context:
space:
mode:
authorChris Lu <chrislusf@users.noreply.github.com>2025-10-23 10:47:06 -0700
committerGitHub <noreply@github.com>2025-10-23 10:47:06 -0700
commit557aa4ec097267ff31e34a5c2fdd7b256e42d1be (patch)
tree0197c0f27415c5c98afe3b87c59fa7999991bc1d /weed/command
parentcb9a662e20f68a8b836a4147ff4f872a80018f01 (diff)
downloadseaweedfs-557aa4ec097267ff31e34a5c2fdd7b256e42d1be.tar.xz
seaweedfs-557aa4ec097267ff31e34a5c2fdd7b256e42d1be.zip
fixing auto complete (#7365)
* fixing auto complete * Update weed/command/autocomplete.go Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update weed/command/autocomplete.go Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com> --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Diffstat (limited to 'weed/command')
-rw-r--r--weed/command/autocomplete.go74
1 files changed, 69 insertions, 5 deletions
diff --git a/weed/command/autocomplete.go b/weed/command/autocomplete.go
index f63c8df41..d9e4c6b04 100644
--- a/weed/command/autocomplete.go
+++ b/weed/command/autocomplete.go
@@ -2,6 +2,8 @@ package command
import (
"fmt"
+ "os"
+ "path/filepath"
"github.com/posener/complete"
completeinstall "github.com/posener/complete/cmd/install"
flag "github.com/seaweedfs/seaweedfs/weed/util/fla9"
@@ -39,6 +41,40 @@ func AutocompleteMain(commands []*Command) bool {
return cmp.Complete()
}
+func printAutocompleteScript(shell string) bool {
+ bin, err := os.Executable()
+ if err != nil {
+ fmt.Fprintf(os.Stderr, "failed to get executable path: %s\n", err)
+ return false
+ }
+ binPath, err := filepath.Abs(bin)
+ if err != nil {
+ fmt.Fprintf(os.Stderr, "failed to get absolute path: %s\n", err)
+ return false
+ }
+
+ switch shell {
+ case "bash":
+ fmt.Printf("complete -C %q weed\n", binPath)
+ case "zsh":
+ fmt.Printf("autoload -U +X bashcompinit && bashcompinit\n")
+ fmt.Printf("complete -o nospace -C %q weed\n", binPath)
+ case "fish":
+ fmt.Printf(`function __complete_weed
+ set -lx COMP_LINE (commandline -cp)
+ test -z (commandline -ct)
+ and set COMP_LINE "$COMP_LINE "
+ %q
+end
+complete -f -c weed -a "(__complete_weed)"
+`, binPath)
+ default:
+ fmt.Fprintf(os.Stderr, "unsupported shell: %s. Supported shells: bash, zsh, fish\n", shell)
+ return false
+ }
+ return true
+}
+
func installAutoCompletion() bool {
if runtime.GOOS == "windows" {
fmt.Println("Windows is not supported")
@@ -71,9 +107,25 @@ func uninstallAutoCompletion() bool {
var cmdAutocomplete = &Command{
Run: runAutocomplete,
- UsageLine: "autocomplete",
- Short: "install autocomplete",
- Long: `weed autocomplete is installed in the shell.
+ UsageLine: "autocomplete [shell]",
+ Short: "generate or install shell autocomplete script",
+ Long: `Generate shell autocomplete script or install it to your shell configuration.
+
+Usage:
+ weed autocomplete [bash|zsh|fish] # print autocomplete script to stdout
+ weed autocomplete install # install to shell config files
+
+ When a shell name is provided, the autocomplete script is printed to stdout.
+ You can then add it to your shell configuration manually, e.g.:
+
+ # For bash:
+ weed autocomplete bash >> ~/.bashrc
+
+ # Or use eval in your shell config:
+ eval "$(weed autocomplete bash)"
+
+ When 'install' is provided (or no argument), the script is automatically
+ installed to your shell configuration files.
Supported shells are bash, zsh, and fish.
Windows is not supported.
@@ -82,11 +134,23 @@ var cmdAutocomplete = &Command{
}
func runAutocomplete(cmd *Command, args []string) bool {
- if len(args) != 0 {
+ if len(args) == 0 {
+ // Default behavior: install
+ return installAutoCompletion()
+ }
+
+ if len(args) > 1 {
cmd.Usage()
+ return false
+ }
+
+ shell := args[0]
+ if shell == "install" {
+ return installAutoCompletion()
}
- return installAutoCompletion()
+ // Print the autocomplete script for the specified shell
+ return printAutocompleteScript(shell)
}
var cmdUnautocomplete = &Command{