-
-
Notifications
You must be signed in to change notification settings - Fork 1.5k
Fix rendering when prompt_suffix is empty
#3021
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
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
|
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:
|
|
@kdeldycke Sure thing I've
|
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