-
-
Notifications
You must be signed in to change notification settings - Fork 1.5k
Open
Labels
Description
When using Click shell completion in bash and zsh, long option completion is not working properly when = is used to separate the option from the value (e.g., command --long-option=value vs. command --long-option value). In zsh, the option being completed is replaced with the incomplete value or matched value, essentially "gobbling" up the option. In bash, the option isn't completed at all. I did not test fish.
Steps to reproduce the issue
- Create the following script and place it in the bin directory of an activated virtual environment with click installed:
# gobble
#!/usr/bin/env python
import click
@click.command
@click.option("--color", type=click.Choice(["auto", "always", "never"]), default=None,
help="Control colors in output.")
@click.option("--name",
help="Name of something.")
def main(color: str | None, name: str | None) -> None:
"""Test long options."""
click.echo(f"{color=}, {name=}")
if __name__ == "__main__":
main()-
Open a zsh shell and enable script completion:
eval "$(_GOBBLE_COMPLETE=zsh_source gobble)" -
Attempt to tab complete the
--coloroption using both styles
| before tab completion | after tab completion | offered completions |
|---|---|---|
| gobble --color= | gobble | |
| gobble --color=a | gobble a | |
| gobble --color=al | gobble always | |
| gobble --color | gobble --color | auto always never |
| gobble --color a | gobble --color a | auto always |
| gobble --color al | gobble --color always |
-
Open a bash shell and enable script completion:
eval "$(_GOBBLE_COMPLETE=bash_source gobble)" -
Attempt to tab complete the
--coloroption using both styles
| before tab completion | after tab completion | offered completions |
|---|---|---|
| gobble --color= | gobble --color= | auto always never |
| gobble --color=a | gobble --color=a | |
| gobble --color=al | gobble --color=al | |
| gobble --color | gobble --color | auto always never |
| gobble --color a | gobble --color a | auto always |
| gobble --color al | gobble --color always |
Expected behavior
| before tab completion | after tab completion | offered completions | alternate completions |
|---|---|---|---|
| gobble --color= | gobble --color= | auto always never | --color=auto --color=always --color=never |
| gobble --color=a | gobble --color=a | auto always | --color=auto --color=always |
| gobble --color=al | gobble --color=always | ||
| gobble --color | gobble --color | auto always never | |
| gobble --color a | gobble --color a | auto always | |
| gobble --color al | gobble --color always |
Environment:
- Python version: 3.12.7
- Click version: 8.1.8