From f31d564ff26532151b6e45f2be163ceea247a440 Mon Sep 17 00:00:00 2001
From: Alex Ball <alex-ball@users.noreply.github.com>
Date: Sun, 10 Oct 2021 16:42:07 +0100
Subject: [PATCH] click.confirm preserves prompt when readline is imported

same fix as for click.prompt in 8.0.0
---
 CHANGES.rst         | 2 ++
 src/click/termui.py | 6 ++++--
 tests/test_utils.py | 4 ++--
 3 files changed, 8 insertions(+), 4 deletions(-)

diff --git a/CHANGES.rst b/CHANGES.rst
index c52c16007..e6e8e9bf3 100644
--- a/CHANGES.rst
+++ b/CHANGES.rst
@@ -7,6 +7,8 @@ Unreleased
 
 -   Fix issue with ``Path(resolve_path=True)`` type creating invalid
     paths. :issue:`2088`
+-   Importing ``readline`` does not cause the ``confirm()`` prompt to
+    disappear when pressing backspace. :issue:`2092`
 
 
 Version 8.0.2
diff --git a/src/click/termui.py b/src/click/termui.py
index a023f42bd..cf8d5f132 100644
--- a/src/click/termui.py
+++ b/src/click/termui.py
@@ -231,8 +231,10 @@ def confirm(
         try:
             # Write the prompt separately so that we get nice
             # coloring through colorama on Windows
-            echo(prompt, nl=False, err=err)
-            value = visible_prompt_func("").lower().strip()
+            echo(prompt.rstrip(" "), nl=False, err=err)
+            # Echo a space to stdout to work around an issue where
+            # readline causes backspace to clear the whole line.
+            value = visible_prompt_func(" ").lower().strip()
         except (KeyboardInterrupt, EOFError):
             raise Abort() from None
         if value in ("y", "yes"):
diff --git a/tests/test_utils.py b/tests/test_utils.py
index d21b246c2..271177d2d 100644
--- a/tests/test_utils.py
+++ b/tests/test_utils.py
@@ -275,8 +275,8 @@ def emulate_input(text):
     emulate_input("y\n")
     click.confirm("Prompt to stderr", err=True)
     out, err = capfd.readouterr()
-    assert out == ""
-    assert err == "Prompt to stderr [y/N]: "
+    assert out == " "
+    assert err == "Prompt to stderr [y/N]:"
 
     monkeypatch.setattr(click.termui, "isatty", lambda x: True)
     monkeypatch.setattr(click.termui, "getchar", lambda: " ")