Open
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
--color
option 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
--color
option 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
Metadata
Metadata
Assignees
Labels
No labels
Activity