fix(display): use spaces instead of ANSI \033[K in print_above() for prompt_toolkit compat
print_above() used \033[K (erase-to-end-of-line) to clear the spinner line before printing text above it. This causes garbled escape codes when prompt_toolkit's patch_stdout is active in CLI mode. Switched to the same spaces-based clearing approach used by stop() — overwrite with blanks, then carriage return back to start of line. Updated test assertion to match the new clearing method.
This commit is contained in:
parent
dd69f16c3e
commit
4ec386cc72
2 changed files with 6 additions and 3 deletions
|
|
@ -211,8 +211,11 @@ class KawaiiSpinner:
|
||||||
if not self.running:
|
if not self.running:
|
||||||
self._write(f" {text}", flush=True)
|
self._write(f" {text}", flush=True)
|
||||||
return
|
return
|
||||||
# Clear spinner line, print text above, spinner redraws on next tick
|
# Clear spinner line with spaces (not \033[K) to avoid garbled escape
|
||||||
self._write(f"\r\033[K {text}", flush=True)
|
# codes when prompt_toolkit's patch_stdout is active — same approach
|
||||||
|
# as stop(). Then print text; spinner redraws on next tick.
|
||||||
|
blanks = ' ' * max(self.last_line_len + 5, 40)
|
||||||
|
self._write(f"\r{blanks}\r {text}", flush=True)
|
||||||
|
|
||||||
def stop(self, final_message: str = None):
|
def stop(self, final_message: str = None):
|
||||||
self.running = False
|
self.running = False
|
||||||
|
|
|
||||||
|
|
@ -46,7 +46,7 @@ class TestPrintAbove:
|
||||||
spinner.print_above("tool line")
|
spinner.print_above("tool line")
|
||||||
output = buf.getvalue()
|
output = buf.getvalue()
|
||||||
assert "tool line" in output
|
assert "tool line" in output
|
||||||
assert "\r\033[K" in output # Should start with line clear
|
assert "\r" in output # Should start with carriage return to clear spinner line
|
||||||
|
|
||||||
def test_print_above_uses_captured_stdout(self):
|
def test_print_above_uses_captured_stdout(self):
|
||||||
"""print_above should use self._out, not sys.stdout.
|
"""print_above should use self._out, not sys.stdout.
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue