You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							109 lines
						
					
					
						
							2.5 KiB
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							109 lines
						
					
					
						
							2.5 KiB
						
					
					
				
								package command
							 | 
						|
								
							 | 
						|
								import (
							 | 
						|
									"fmt"
							 | 
						|
									"github.com/posener/complete"
							 | 
						|
									completeinstall "github.com/posener/complete/cmd/install"
							 | 
						|
									flag "github.com/seaweedfs/seaweedfs/weed/util/fla9"
							 | 
						|
									"runtime"
							 | 
						|
								)
							 | 
						|
								
							 | 
						|
								func AutocompleteMain(commands []*Command) bool {
							 | 
						|
									subCommands := make(map[string]complete.Command)
							 | 
						|
									helpSubCommands := make(map[string]complete.Command)
							 | 
						|
									for _, cmd := range commands {
							 | 
						|
										flags := make(map[string]complete.Predictor)
							 | 
						|
										cmd.Flag.VisitAll(func(flag *flag.Flag) {
							 | 
						|
											flags["-"+flag.Name] = complete.PredictAnything
							 | 
						|
										})
							 | 
						|
								
							 | 
						|
										subCommands[cmd.Name()] = complete.Command{
							 | 
						|
											Flags: flags,
							 | 
						|
										}
							 | 
						|
										helpSubCommands[cmd.Name()] = complete.Command{}
							 | 
						|
									}
							 | 
						|
									subCommands["help"] = complete.Command{Sub: helpSubCommands}
							 | 
						|
								
							 | 
						|
									globalFlags := make(map[string]complete.Predictor)
							 | 
						|
									flag.VisitAll(func(flag *flag.Flag) {
							 | 
						|
										globalFlags["-"+flag.Name] = complete.PredictAnything
							 | 
						|
									})
							 | 
						|
								
							 | 
						|
									weedCmd := complete.Command{
							 | 
						|
										Sub:         subCommands,
							 | 
						|
										Flags:       globalFlags,
							 | 
						|
										GlobalFlags: complete.Flags{"-h": complete.PredictNothing},
							 | 
						|
									}
							 | 
						|
									cmp := complete.New("weed", weedCmd)
							 | 
						|
								
							 | 
						|
									return cmp.Complete()
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								func installAutoCompletion() bool {
							 | 
						|
									if runtime.GOOS == "windows" {
							 | 
						|
										fmt.Println("Windows is not supported")
							 | 
						|
										return false
							 | 
						|
									}
							 | 
						|
								
							 | 
						|
									err := completeinstall.Install("weed")
							 | 
						|
									if err != nil {
							 | 
						|
										fmt.Printf("install failed! %s\n", err)
							 | 
						|
										return false
							 | 
						|
									}
							 | 
						|
									fmt.Printf("autocompletion is enabled. Please restart your shell.\n")
							 | 
						|
									return true
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								func uninstallAutoCompletion() bool {
							 | 
						|
									if runtime.GOOS == "windows" {
							 | 
						|
										fmt.Println("Windows is not supported")
							 | 
						|
										return false
							 | 
						|
									}
							 | 
						|
								
							 | 
						|
									err := completeinstall.Uninstall("weed")
							 | 
						|
									if err != nil {
							 | 
						|
										fmt.Printf("uninstall failed! %s\n", err)
							 | 
						|
										return false
							 | 
						|
									}
							 | 
						|
									fmt.Printf("autocompletion is disabled. Please restart your shell.\n")
							 | 
						|
									return true
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								var cmdAutocomplete = &Command{
							 | 
						|
									Run:       runAutocomplete,
							 | 
						|
									UsageLine: "autocomplete",
							 | 
						|
									Short:     "install autocomplete",
							 | 
						|
									Long: `weed autocomplete is installed in the shell.
							 | 
						|
								
							 | 
						|
								    Supported shells are bash, zsh, and fish.
							 | 
						|
								    Windows is not supported.
							 | 
						|
								
							 | 
						|
								`,
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								func runAutocomplete(cmd *Command, args []string) bool {
							 | 
						|
									if len(args) != 0 {
							 | 
						|
										cmd.Usage()
							 | 
						|
									}
							 | 
						|
								
							 | 
						|
									return installAutoCompletion()
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								var cmdUnautocomplete = &Command{
							 | 
						|
									Run:       runUnautocomplete,
							 | 
						|
									UsageLine: "autocomplete.uninstall",
							 | 
						|
									Short:     "uninstall autocomplete",
							 | 
						|
									Long: `weed autocomplete is uninstalled in the shell.
							 | 
						|
								
							 | 
						|
								    Windows is not supported.
							 | 
						|
								
							 | 
						|
								`,
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								func runUnautocomplete(cmd *Command, args []string) bool {
							 | 
						|
									if len(args) != 0 {
							 | 
						|
										cmd.Usage()
							 | 
						|
									}
							 | 
						|
								
							 | 
						|
									return uninstallAutoCompletion()
							 | 
						|
								}
							 |