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>
This commit is contained in:
@@ -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 {
|
||||
cmd.Usage()
|
||||
if len(args) == 0 {
|
||||
// Default behavior: install
|
||||
return installAutoCompletion()
|
||||
}
|
||||
|
||||
return installAutoCompletion()
|
||||
if len(args) > 1 {
|
||||
cmd.Usage()
|
||||
return false
|
||||
}
|
||||
|
||||
shell := args[0]
|
||||
if shell == "install" {
|
||||
return installAutoCompletion()
|
||||
}
|
||||
|
||||
// Print the autocomplete script for the specified shell
|
||||
return printAutocompleteScript(shell)
|
||||
}
|
||||
|
||||
var cmdUnautocomplete = &Command{
|
||||
|
||||
Reference in New Issue
Block a user