Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@
by @Legimity).
- PowerShell completions now work with aliases of the `task` command, not just
the `task` binary itself (#2852 by @kojiishi).
- Fixed task and namespace aliases not being completed by the Zsh completion.
A `show-aliases` zstyle can turn this off (#2865, #2864 by @vmaerten).

## v3.51.1 - 2026-05-16

Expand Down
21 changes: 19 additions & 2 deletions completion/zsh/_task
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,9 @@ function __task_is_experiment_enabled() {

# Listing commands from Taskfile.yml
function __task_list() {
local -a scripts cmd
local -a scripts cmd task_aliases match mbegin mend
local -i enabled=0
local taskfile item task desc
local taskfile item task desc task_alias

cmd=($TASK_CMD)
taskfile=${(Qv)opt_args[(i)-t|--taskfile]}
Expand Down Expand Up @@ -50,14 +50,31 @@ function __task_list() {
local show_desc
zstyle -T ":completion:${curcontext}:" verbose && show_desc=true || show_desc=false

# Read zstyle show-aliases option (default = true via -T)
local show_aliases
zstyle -T ":completion:${curcontext}:" show-aliases && show_aliases=true || show_aliases=false

for item in "${(@)${(f)output}[2,-1]#\* }"; do
task="${item%%:[[:space:]]*}"

# Extract the aliases listed in the trailing "(aliases: a, b)" column.
# NB: `aliases` is a reserved zsh parameter, so use a different name.
task_aliases=()
if [[ "$show_aliases" == "true" && "$item" == (#b)*'(aliases: '(*)')' ]]; then
task_aliases=( "${(@s:, :)match[1]}" )
fi

if [[ "$show_desc" == "true" ]]; then
local desc="${item##[^[:space:]]##[[:space:]]##}"
scripts+=( "${task//:/\\:}:$desc" )
for task_alias in $task_aliases; do
scripts+=( "${task_alias//:/\\:}:$desc" )
done
else
scripts+=( "$task" )
for task_alias in $task_aliases; do
scripts+=( "$task_alias" )
done
fi
done

Expand Down
7 changes: 7 additions & 0 deletions website/src/docs/installation.md
Original file line number Diff line number Diff line change
Expand Up @@ -439,3 +439,10 @@ names without descriptions, add this to your `~/.zshrc` (after the completion is
```shell
zstyle ':completion:*:*:task:*' verbose false
```

By default, task aliases are also offered as completions. To complete only the
canonical task names, add the `show-aliases` zstyle:

```shell
zstyle ':completion:*:*:task:*' show-aliases false
```
Loading