forked from toolshed/abra
		
	Merge pull request 'feat: bash and (fi)zsh completion along with docs' (#83) from knoflook/abra:bash-completion into main
Reviewed-on: coop-cloud/abra#83
This commit is contained in:
		
							
								
								
									
										21
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										21
									
								
								README.md
									
									
									
									
									
								
							| @ -38,6 +38,27 @@ make install | |||||||
|  |  | ||||||
| The abra binary will be in `$GOPATH/bin`. | The abra binary will be in `$GOPATH/bin`. | ||||||
|  |  | ||||||
|  | ## Autocompletion | ||||||
|  |  | ||||||
|  | **bash** | ||||||
|  |  | ||||||
|  | Copy `autocomplete/bash_autocomplete` into `/etc/bash_completion.d/` and rename | ||||||
|  | it to abra. | ||||||
|  | ``` | ||||||
|  | sudo cp autocomplete/bash_autocomplete /etc/bash_completion.d/abra | ||||||
|  | source /etc/bash_completion.d/abra | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | **(fi)zsh** | ||||||
|  |  | ||||||
|  | (fi)zsh doesn't have an autocompletion folder by default but you can create one, then copy `zsh_autocomplete` into it and add a couple lines to your `~/.zshrc` or `~/.fizsh/.fizshrc` | ||||||
|  | ``` | ||||||
|  | sudo mkdir /etc/zsh/completion.d/ | ||||||
|  | sudo cp autocomplete/zsh_autocomplete /etc/zsh/completion.d/abra | ||||||
|  | echo "PROG=abra\n_CLI_ZSH_AUTOCOMPLETE_HACK=1\nsource /etc/zsh/completion.d/abra" >> ~/.zshrc | ||||||
|  | ``` | ||||||
|  | (replace .zshrc with ~/.fizsh/.fizshrc if you use fizsh) | ||||||
|  |  | ||||||
| ## Hacking | ## Hacking | ||||||
|  |  | ||||||
| Install direnv, run `cp .envrc.sample .envrc`, then run `direnv allow` in this directory. This will set coopcloud repos as private due to [this bug.](https://git.coopcloud.tech/coop-cloud/coopcloud.tech/issues/20#issuecomment-8201). Or you can run `go env -w GOPRIVATE=coopcloud.tech` but I'm not sure how persistent this is. | Install direnv, run `cp .envrc.sample .envrc`, then run `direnv allow` in this directory. This will set coopcloud repos as private due to [this bug.](https://git.coopcloud.tech/coop-cloud/coopcloud.tech/issues/20#issuecomment-8201). Or you can run `go env -w GOPRIVATE=coopcloud.tech` but I'm not sure how persistent this is. | ||||||
|  | |||||||
							
								
								
									
										21
									
								
								autocomplete/bash_autocomplete
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										21
									
								
								autocomplete/bash_autocomplete
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,21 @@ | |||||||
|  | #! /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 | ||||||
							
								
								
									
										9
									
								
								autocomplete/powershell_autocomplete.ps1
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								autocomplete/powershell_autocomplete.ps1
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,9 @@ | |||||||
|  | $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', $_) | ||||||
|  |          } | ||||||
|  |  } | ||||||
							
								
								
									
										23
									
								
								autocomplete/zsh_autocomplete
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								autocomplete/zsh_autocomplete
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,23 @@ | |||||||
|  | #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 | ||||||
| @ -67,6 +67,7 @@ func RunApp(version, commit string) { | |||||||
| 			}, | 			}, | ||||||
| 		}, | 		}, | ||||||
| 	} | 	} | ||||||
|  | 	app.EnableBashCompletion = true | ||||||
|  |  | ||||||
| 	if err := app.Run(os.Args); err != nil { | 	if err := app.Run(os.Args); err != nil { | ||||||
| 		logrus.Fatal(err) | 		logrus.Fatal(err) | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user