mirror of
				https://gitea.com/gitea/tea.git
				synced 2025-10-31 01:05:26 +01:00 
			
		
		
		
	remove autocomplete command (#782)
Add a note in readme about adding shell completions Closes: https://gitea.com/gitea/tea/issues/781 Co-authored-by: techknowlogick <techknowlogick@noreply.gitea.com> Reviewed-on: https://gitea.com/gitea/tea/pulls/782 Reviewed-by: techknowlogick <techknowlogick@noreply.gitea.com> Co-authored-by: TheFox0x7 <thefox0x7@gmail.com> Co-committed-by: TheFox0x7 <thefox0x7@gmail.com>
This commit is contained in:
		 TheFox0x7
					TheFox0x7
				
			
				
					committed by
					
						 techknowlogick
						techknowlogick
					
				
			
			
				
	
			
			
			 techknowlogick
						techknowlogick
					
				
			
						parent
						
							a010c9bc7f
						
					
				
				
					commit
					5f35cebcf1
				
			
							
								
								
									
										19
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										19
									
								
								README.md
									
									
									
									
									
								
							| @@ -46,7 +46,6 @@ | |||||||
|    SETUP: |    SETUP: | ||||||
|      logins, login                  Log in to a Gitea server |      logins, login                  Log in to a Gitea server | ||||||
|      logout                         Log out from a Gitea server |      logout                         Log out from a Gitea server | ||||||
|      shellcompletion, autocomplete  Install shell completion for tea |  | ||||||
|      whoami                         Show current logged in user |      whoami                         Show current logged in user | ||||||
|  |  | ||||||
|  OPTIONS |  OPTIONS | ||||||
| @@ -101,6 +100,24 @@ There are different ways to get `tea`: | |||||||
|  |  | ||||||
| 5. asdf (thirdparty): [mvaldes14/asdf-tea](https://github.com/mvaldes14/asdf-tea) | 5. asdf (thirdparty): [mvaldes14/asdf-tea](https://github.com/mvaldes14/asdf-tea) | ||||||
|  |  | ||||||
|  | ### Shell completion | ||||||
|  |  | ||||||
|  | If you installed from source or the package does not provide the completions with it you can add them yourself with `tea completion <shell>` command which is not visible in help. To generate the completions run one of the following commands depending on your shell. | ||||||
|  |  | ||||||
|  | ```shell | ||||||
|  | # .bashrc | ||||||
|  | source <(tea completion bash) | ||||||
|  |  | ||||||
|  | # .zshrc | ||||||
|  | source <(tea completion zsh) | ||||||
|  |  | ||||||
|  | # fish | ||||||
|  | tea completion fish > ~/.config/fish/completions/tea.fish | ||||||
|  |  | ||||||
|  | # Powershell | ||||||
|  | Output the script to path/to/autocomplete/tea.ps1 an run it. | ||||||
|  | ``` | ||||||
|  |  | ||||||
| ## Compilation | ## Compilation | ||||||
|  |  | ||||||
| Make sure you have a current go version installed (1.13 or newer). | Make sure you have a current go version installed (1.13 or newer). | ||||||
|   | |||||||
| @@ -1,138 +0,0 @@ | |||||||
| // Copyright 2020 The Gitea Authors. All rights reserved. |  | ||||||
| // SPDX-License-Identifier: MIT |  | ||||||
|  |  | ||||||
| package cmd |  | ||||||
|  |  | ||||||
| import ( |  | ||||||
| 	"context" |  | ||||||
| 	"fmt" |  | ||||||
| 	"io" |  | ||||||
| 	"net/http" |  | ||||||
| 	"os" |  | ||||||
| 	"os/exec" |  | ||||||
|  |  | ||||||
| 	"github.com/adrg/xdg" |  | ||||||
| 	"github.com/urfave/cli/v3" |  | ||||||
| ) |  | ||||||
|  |  | ||||||
| // CmdAutocomplete manages autocompletion |  | ||||||
| var CmdAutocomplete = cli.Command{ |  | ||||||
| 	Name:        "shellcompletion", |  | ||||||
| 	Aliases:     []string{"autocomplete"}, |  | ||||||
| 	Category:    catSetup, |  | ||||||
| 	Usage:       "Install shell completion for tea", |  | ||||||
| 	Description: "Install shell completion for tea", |  | ||||||
| 	ArgsUsage:   "<shell type> (bash, zsh, powershell, fish)", |  | ||||||
| 	Flags: []cli.Flag{ |  | ||||||
| 		&cli.BoolFlag{ |  | ||||||
| 			Name:  "install", |  | ||||||
| 			Usage: "Persist in shell config instead of printing commands", |  | ||||||
| 		}, |  | ||||||
| 	}, |  | ||||||
| 	Action: runAutocompleteAdd, |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func runAutocompleteAdd(_ context.Context, cmd *cli.Command) error { |  | ||||||
| 	var remoteFile, localFile, cmds string |  | ||||||
| 	shell := cmd.Args().First() |  | ||||||
|  |  | ||||||
| 	switch shell { |  | ||||||
| 	case "zsh": |  | ||||||
| 		remoteFile = "contrib/autocomplete.zsh" |  | ||||||
| 		localFile = "autocomplete.zsh" |  | ||||||
| 		cmds = "echo 'PROG=tea _CLI_ZSH_AUTOCOMPLETE_HACK=1 source \"%s\"' >> ~/.zshrc && source ~/.zshrc" |  | ||||||
|  |  | ||||||
| 	case "bash": |  | ||||||
| 		remoteFile = "contrib/autocomplete.sh" |  | ||||||
| 		localFile = "autocomplete.sh" |  | ||||||
| 		cmds = "echo 'PROG=tea source \"%s\"' >> ~/.bashrc && source ~/.bashrc" |  | ||||||
|  |  | ||||||
| 	case "powershell": |  | ||||||
| 		remoteFile = "contrib/autocomplete.ps1" |  | ||||||
| 		localFile = "tea.ps1" |  | ||||||
| 		cmds = "\"& %s\" >> $profile" |  | ||||||
|  |  | ||||||
| 	case "fish": |  | ||||||
| 		// fish is different, in that urfave/cli provides a generator for the shell script needed. |  | ||||||
| 		// this also means that the fish completion can become out of sync with the tea binary! |  | ||||||
| 		// writing to this directory suffices, as fish reads files there on startup, no cmds needed. |  | ||||||
| 		return writeFishAutoCompleteFile(cmd) |  | ||||||
|  |  | ||||||
| 	default: |  | ||||||
| 		return fmt.Errorf("Must specify valid %s", cmd.ArgsUsage) |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	localPath, err := xdg.ConfigFile("tea/" + localFile) |  | ||||||
| 	if err != nil { |  | ||||||
| 		return err |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	cmds = fmt.Sprintf(cmds, localPath) |  | ||||||
| 	if err = writeRemoteAutoCompleteFile(remoteFile, localPath); err != nil { |  | ||||||
| 		return err |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	if cmd.Bool("install") { |  | ||||||
| 		fmt.Println("Installing in your shellrc") |  | ||||||
| 		installer := exec.Command(shell, "-c", cmds) |  | ||||||
| 		if shell == "powershell" { |  | ||||||
| 			installer = exec.Command("powershell.exe", "-Command", cmds) |  | ||||||
| 		} |  | ||||||
| 		out, err := installer.CombinedOutput() |  | ||||||
| 		if err != nil { |  | ||||||
| 			return fmt.Errorf("Couldn't run the commands: %s %s", err, out) |  | ||||||
| 		} |  | ||||||
| 	} else { |  | ||||||
| 		fmt.Println("\n# Run the following commands to install autocompletion (or use --install)") |  | ||||||
| 		fmt.Println(cmds) |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	return nil |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func writeRemoteAutoCompleteFile(file, destPath string) error { |  | ||||||
| 	url := fmt.Sprintf("https://gitea.com/gitea/tea/raw/branch/master/%s", file) |  | ||||||
| 	fmt.Println("Fetching " + url) |  | ||||||
|  |  | ||||||
| 	res, err := http.Get(url) |  | ||||||
| 	if err != nil { |  | ||||||
| 		return err |  | ||||||
| 	} |  | ||||||
| 	defer res.Body.Close() |  | ||||||
|  |  | ||||||
| 	writer, err := os.Create(destPath) |  | ||||||
| 	if err != nil { |  | ||||||
| 		return err |  | ||||||
| 	} |  | ||||||
| 	defer writer.Close() |  | ||||||
|  |  | ||||||
| 	_, err = io.Copy(writer, res.Body) |  | ||||||
| 	return err |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func writeFishAutoCompleteFile(cmd *cli.Command) error { |  | ||||||
| 	// NOTE: to make sure this file is in sync with tea commands, we'd need to |  | ||||||
| 	//   - check if the file exists |  | ||||||
| 	//   - if it does, check if the tea version that wrote it is the currently running version |  | ||||||
| 	//   - if not, rewrite the file |  | ||||||
| 	//   on each application run |  | ||||||
| 	// NOTE: this generates a completion that also suggests file names, which looks kinda messy.. |  | ||||||
| 	script, err := cmd.ToFishCompletion() |  | ||||||
| 	if err != nil { |  | ||||||
| 		return err |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	localPath, err := xdg.ConfigFile("fish/conf.d/tea_completion.fish") |  | ||||||
| 	if err != nil { |  | ||||||
| 		return err |  | ||||||
| 	} |  | ||||||
| 	writer, err := os.Create(localPath) |  | ||||||
| 	if err != nil { |  | ||||||
| 		return err |  | ||||||
| 	} |  | ||||||
| 	if _, err = io.WriteString(writer, script); err != nil { |  | ||||||
| 		return err |  | ||||||
| 	} |  | ||||||
| 	fmt.Printf("Installed tab completion to %s\n", localPath) |  | ||||||
| 	return nil |  | ||||||
| } |  | ||||||
| @@ -36,7 +36,6 @@ func App() *cli.Command { | |||||||
| 		Commands: []*cli.Command{ | 		Commands: []*cli.Command{ | ||||||
| 			&CmdLogin, | 			&CmdLogin, | ||||||
| 			&CmdLogout, | 			&CmdLogout, | ||||||
| 			&CmdAutocomplete, |  | ||||||
| 			&CmdWhoami, | 			&CmdWhoami, | ||||||
|  |  | ||||||
| 			&CmdIssues, | 			&CmdIssues, | ||||||
|   | |||||||
| @@ -1,9 +0,0 @@ | |||||||
| $fn = $($MyInvocation.MyCommand.Name) |  | ||||||
| $name = $fn -replace "(.*)\.ps1$", '$1' |  | ||||||
| Register-ArgumentCompleter -Native -CommandName $name -ScriptBlock { |  | ||||||
|      param($commandName, $wordToComplete, $cursorPosition) |  | ||||||
|      $other = "$wordToComplete --generate-bash-completion" |  | ||||||
|          Invoke-Expression $other | ForEach-Object { |  | ||||||
|             [System.Management.Automation.CompletionResult]::new($_, $_, 'ParameterValue', $_) |  | ||||||
|          } |  | ||||||
|  } |  | ||||||
| @@ -1,21 +0,0 @@ | |||||||
| #! /bin/bash |  | ||||||
|  |  | ||||||
| : ${PROG:=$(basename ${BASH_SOURCE})} |  | ||||||
|  |  | ||||||
| _cli_bash_autocomplete() { |  | ||||||
|   if [[ "${COMP_WORDS[0]}" != "source" ]]; then |  | ||||||
|     local cur opts base |  | ||||||
|     COMPREPLY=() |  | ||||||
|     cur="${COMP_WORDS[COMP_CWORD]}" |  | ||||||
|     if [[ "$cur" == "-"* ]]; then |  | ||||||
|       opts=$( ${COMP_WORDS[@]:0:$COMP_CWORD} ${cur} --generate-bash-completion ) |  | ||||||
|     else |  | ||||||
|       opts=$( ${COMP_WORDS[@]:0:$COMP_CWORD} --generate-bash-completion ) |  | ||||||
|     fi |  | ||||||
|     COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) ) |  | ||||||
|     return 0 |  | ||||||
|   fi |  | ||||||
| } |  | ||||||
|  |  | ||||||
| complete -o bashdefault -o default -o nospace -F _cli_bash_autocomplete $PROG |  | ||||||
| unset PROG |  | ||||||
| @@ -1,23 +0,0 @@ | |||||||
| #compdef $PROG |  | ||||||
|  |  | ||||||
| _cli_zsh_autocomplete() { |  | ||||||
|  |  | ||||||
|   local -a opts |  | ||||||
|   local cur |  | ||||||
|   cur=${words[-1]} |  | ||||||
|   if [[ "$cur" == "-"* ]]; then |  | ||||||
|     opts=("${(@f)$(_CLI_ZSH_AUTOCOMPLETE_HACK=1 ${words[@]:0:#words[@]-1} ${cur} --generate-bash-completion)}") |  | ||||||
|   else |  | ||||||
|     opts=("${(@f)$(_CLI_ZSH_AUTOCOMPLETE_HACK=1 ${words[@]:0:#words[@]-1} --generate-bash-completion)}") |  | ||||||
|   fi |  | ||||||
|  |  | ||||||
|   if [[ "${opts[1]}" != "" ]]; then |  | ||||||
|     _describe 'values' opts |  | ||||||
|   else |  | ||||||
|     _files |  | ||||||
|   fi |  | ||||||
|  |  | ||||||
|   return |  | ||||||
| } |  | ||||||
|  |  | ||||||
| compdef _cli_zsh_autocomplete $PROG |  | ||||||
| @@ -95,12 +95,6 @@ Refresh an OAuth token | |||||||
|  |  | ||||||
| Log out from a Gitea server | Log out from a Gitea server | ||||||
|  |  | ||||||
| ## shellcompletion, autocomplete |  | ||||||
|  |  | ||||||
| Install shell completion for tea |  | ||||||
|  |  | ||||||
| **--install**: Persist in shell config instead of printing commands |  | ||||||
|  |  | ||||||
| ## whoami | ## whoami | ||||||
|  |  | ||||||
| Show current logged in user | Show current logged in user | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user