Fix rendering when prompt_suffix is empty#3021
Merged
Rowlando13 merged 6 commits intopallets:stablefrom Oct 2, 2025
Merged
Conversation
This changes the implementation of the fixes in pallets#1836 and pallets#2093 to address the problem that they created when `click.prompt` or `click.confirm` has a `prompt_suffix` value which is empty. This still fixes the problems reported in pallets#665 and pallets#2092 but does so without modifying the prompt and adding a trailing space. Previously, the problem was solved by trimming all trailing space characters from the prompt and then adding a single trailing space to every prompt. This was only visible if the last character in the prompt wasn't a space character. In those cases a prompt like "This is my prompt" would render as "This is my prompt ". Additionally, in the previous solution, if the `err=True` argument was passed, that final trailing space character that was added would be sent to STDOUT while the rest of the prompt would go to STDERR. This also wasn't very apparent since it was a space character. This different implementation uses the last character of the prompt to work around pallets#665 and pallets#2092 instead of adding a space character. This fixes most of the potentially confusing behavior. It does retain one confusing behavior which is described above, where if you use `err=True` the last character of the prompt is sent to STDOUT instead of STDERR. Previously, this last character sent to STDOUT would always be a space character. Now if the last character of the prompt is not a space character, that final character will go to STDOUT. For example if you call ```python click.prompt("bar", prompt_suffix="", err=True) ``` The `ba` will go to STDERR and the `r` will go to STDOUT. Previously `bar` would go to STDERR and an added ` ` would go to STDOUT. This odd behavior, which is already present but just applies to a space character, is worth accepting so that the `prompt_suffix` correctly renders the suffix as it did in version 7.1.2 and prior. This also adds unit tests for cases where `prompt_suffix` is empty. This fixes pallets#3019
Collaborator
|
I agree with you that having the last character of the prompt being sent to But your PR has the merit of:
For me this is a case of "worse is better", in which we gradually tends to the ideal behavior. The ideal behavior being a refactor of the I am in favor of merging it in But before that, could you:
|
Contributor
Author
|
@kdeldycke Sure thing I've
|
davidism
reviewed
Sep 25, 2025
kdeldycke
approved these changes
Sep 26, 2025
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This changes the implementation of the fixes in #1836 and #2093 to address the problem that they created when
click.promptorclick.confirmhas aprompt_suffixvalue which is empty.This still fixes the problems reported in #665 and #2092 but does so without modifying the prompt and adding a trailing space.
Previously, the problem was solved by trimming all trailing space characters from the prompt and then adding a single trailing space to every prompt. This was only visible if the last character in the prompt wasn't a space character. In those cases a prompt like "This is my prompt" would render as "This is my prompt ". Additionally, in the previous solution, if the
err=Trueargument was passed, that final trailing space character that was added would be sent to STDOUT while the rest of the prompt would go to STDERR. This also wasn't very apparent since it was a space character.This different implementation uses the last character of the prompt to work around #665 and #2092 instead of adding a space character. This fixes most of the potentially confusing behavior. It does retain one confusing behavior which is described above, where if you use
err=Truethe last character of the prompt is sent to STDOUT instead of STDERR. Previously, this last character sent to STDOUT would always be a space character. Now if the last character of the prompt is not a space character, that final character will go to STDOUT.For example if you call
The
bawill go to STDERR and therwill go to STDOUT. Previouslybarwould go to STDERR and an addedwould go to STDOUT.This odd behavior, which is already present but just applies to a space character, is worth accepting so that the
prompt_suffixcorrectly renders the suffix as it did in version 7.1.2 and prior.This also adds unit tests for cases where
prompt_suffixis empty.This fixes #3019