mirror of
https://github.com/go-task/task.git
synced 2025-02-07 13:41:53 +02:00
feat: completion command (#1157)
This commit is contained in:
parent
d727ef5393
commit
3747b2ab7f
@ -83,6 +83,15 @@ func run() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
if flags.Completion != "" {
|
||||
script, err := task.Completion(flags.Completion)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
fmt.Println(script)
|
||||
return nil
|
||||
}
|
||||
|
||||
if flags.Global {
|
||||
home, err := os.UserHomeDir()
|
||||
if err != nil {
|
||||
|
34
completion.go
Normal file
34
completion.go
Normal file
@ -0,0 +1,34 @@
|
||||
package task
|
||||
|
||||
import (
|
||||
_ "embed"
|
||||
"fmt"
|
||||
)
|
||||
|
||||
//go:embed completion/bash/task.bash
|
||||
var completionBash string
|
||||
|
||||
//go:embed completion/fish/task.fish
|
||||
var completionFish string
|
||||
|
||||
//go:embed completion/ps/task.ps1
|
||||
var completionPowershell string
|
||||
|
||||
//go:embed completion/zsh/_task
|
||||
var completionZsh string
|
||||
|
||||
func Completion(completion string) (string, error) {
|
||||
// Get the file extension for the selected shell
|
||||
switch completion {
|
||||
case "bash":
|
||||
return completionBash, nil
|
||||
case "fish":
|
||||
return completionFish, nil
|
||||
case "powershell":
|
||||
return completionPowershell, nil
|
||||
case "zsh":
|
||||
return completionZsh, nil
|
||||
default:
|
||||
return "", fmt.Errorf("unknown shell: %s", completion)
|
||||
}
|
||||
}
|
@ -38,6 +38,7 @@ var (
|
||||
Version bool
|
||||
Help bool
|
||||
Init bool
|
||||
Completion string
|
||||
List bool
|
||||
ListAll bool
|
||||
ListJson bool
|
||||
@ -80,6 +81,7 @@ func init() {
|
||||
pflag.BoolVar(&Version, "version", false, "Show Task version.")
|
||||
pflag.BoolVarP(&Help, "help", "h", false, "Shows Task usage.")
|
||||
pflag.BoolVarP(&Init, "init", "i", false, "Creates a new Taskfile.yml in the current folder.")
|
||||
pflag.StringVar(&Completion, "completion", "", "Generates shell completion script.")
|
||||
pflag.BoolVarP(&List, "list", "l", false, "Lists tasks with description of current Taskfile.")
|
||||
pflag.BoolVarP(&ListAll, "list-all", "a", false, "Lists tasks with or without a description.")
|
||||
pflag.BoolVarP(&ListJson, "json", "j", false, "Formats task list as JSON.")
|
||||
|
25
website/docs/deprecations/completion_scripts.mdx
Normal file
25
website/docs/deprecations/completion_scripts.mdx
Normal file
@ -0,0 +1,25 @@
|
||||
---
|
||||
slug: /deprecations/completion-scripts/
|
||||
---
|
||||
|
||||
# Completion Scripts
|
||||
|
||||
:::warning
|
||||
|
||||
This deprecation breaks the following functionality:
|
||||
|
||||
- Any direct references to the completion scripts in the Task git repository
|
||||
|
||||
:::
|
||||
|
||||
Direct use of the completion scripts in the `completion/*` directory of the
|
||||
[github.com/go-task/task][task] Git repository is deprecated. Any shell
|
||||
configuration that directly refers to these scripts will potentially break in
|
||||
the future as the scripts may be moved or deleted entirely. Any configuration
|
||||
should be updated to use the [new method for generating shell
|
||||
completions][completions] instead.
|
||||
|
||||
{/* prettier-ignore-start */}
|
||||
[completions]: ../installation.mdx#setup-completions
|
||||
[task]: https://github.com/go-task/task
|
||||
{/* prettier-ignore-end */}
|
@ -3,6 +3,9 @@ slug: /installation/
|
||||
sidebar_position: 2
|
||||
---
|
||||
|
||||
import Tabs from '@theme/Tabs';
|
||||
import TabItem from '@theme/TabItem';
|
||||
|
||||
# Installation
|
||||
|
||||
Task offers many installation methods. Check out the available methods below.
|
||||
@ -247,65 +250,76 @@ released binary.
|
||||
|
||||
## Setup completions
|
||||
|
||||
Download the autocompletion file corresponding to your shell.
|
||||
Some installation methods will automatically install completions too, but if
|
||||
this isn't working for you or your chosen method doesn't include them, you can
|
||||
run `task --completion <shell>` to output a completion script for any supported
|
||||
shell. There are a couple of ways these completions can be added to your shell
|
||||
config:
|
||||
|
||||
[All completions are available on the Task repository](https://github.com/go-task/task/tree/main/completion).
|
||||
### Option 1. Load the completions in your shell's startup config (Recommended)
|
||||
|
||||
### Bash
|
||||
This method loads the completion script from the currently installed version of
|
||||
task every time you create a new shell. This ensures that your completions are
|
||||
always up-to-date.
|
||||
|
||||
First, ensure that you installed bash-completion using your package manager.
|
||||
<Tabs values={[ {label: 'bash', value: '1'}, {label: 'zsh', value: '2'},
|
||||
{label: 'fish', value: '3'},
|
||||
{label: 'powershell', value: '4'}
|
||||
]}>
|
||||
|
||||
Make the completion file executable:
|
||||
<TabItem value="1">
|
||||
```shell title="~/.bashrc"
|
||||
eval "$(task --completion bash)"
|
||||
```
|
||||
</TabItem>
|
||||
|
||||
<TabItem value="2">
|
||||
```shell title="~/.zshrc"
|
||||
eval "$(task --completion zsh)"
|
||||
```
|
||||
</TabItem>
|
||||
|
||||
<TabItem value="3">
|
||||
```shell title="~/.config/fish/config.fish"
|
||||
task --completion fish | source
|
||||
```
|
||||
</TabItem>
|
||||
|
||||
<TabItem value="4">
|
||||
```powershell title="$PROFILE\Microsoft.PowerShell_profile.ps1"
|
||||
Invoke-Expression (&task --completion powershell)
|
||||
```
|
||||
</TabItem></Tabs>
|
||||
|
||||
### Option 2. Copy the script to your shell's completions directory
|
||||
|
||||
This method requires you to manually update the completions whenever Task is
|
||||
updated. However, it is useful if you want to modify the completions yourself.
|
||||
|
||||
<Tabs
|
||||
values={[
|
||||
{label: 'bash', value: '1'},
|
||||
{label: 'zsh', value: '2'},
|
||||
{label: 'fish', value: '3'}
|
||||
]}>
|
||||
|
||||
<TabItem value="1">
|
||||
```shell
|
||||
chmod +x path/to/task.bash
|
||||
task --completion bash > /etc/bash_completion.d/task
|
||||
```
|
||||
</TabItem>
|
||||
|
||||
After, add this to your `~/.bash_profile`:
|
||||
|
||||
<TabItem value="2">
|
||||
```shell
|
||||
source path/to/task.bash
|
||||
task --completion zsh > /usr/local/share/zsh/site-functions/_task
|
||||
```
|
||||
</TabItem>
|
||||
|
||||
### ZSH
|
||||
|
||||
Put the `_task` file somewhere in your `$FPATH`:
|
||||
|
||||
<TabItem value="3">
|
||||
```shell
|
||||
mv path/to/_task /usr/local/share/zsh/site-functions/_task
|
||||
```
|
||||
|
||||
Ensure that the following is present in your `~/.zshrc`:
|
||||
|
||||
```shell
|
||||
autoload -U compinit
|
||||
compinit -i
|
||||
```
|
||||
|
||||
ZSH version 5.7 or later is recommended.
|
||||
|
||||
### Fish
|
||||
|
||||
Move the `task.fish` completion script:
|
||||
|
||||
```shell
|
||||
mv path/to/task.fish ~/.config/fish/completions/task.fish
|
||||
```
|
||||
|
||||
### PowerShell
|
||||
|
||||
Open your profile script with:
|
||||
|
||||
```powershell
|
||||
mkdir -Path (Split-Path -Parent $profile) -ErrorAction SilentlyContinue
|
||||
notepad $profile
|
||||
```
|
||||
|
||||
Add the line and save the file:
|
||||
|
||||
```shell
|
||||
Invoke-Expression -Command path/to/task.ps1
|
||||
task --completion fish > ~/.config/fish/completions/task.fish
|
||||
```
|
||||
</TabItem></Tabs>
|
||||
|
||||
{/* prettier-ignore-start */}
|
||||
[go]: https://golang.org/
|
||||
|
Loading…
x
Reference in New Issue
Block a user