mirror of
https://github.com/Aider-AI/aider.git
synced 2025-06-02 18:54:59 +00:00
fix: Clear to end of line when spinner updates
This commit is contained in:
parent
b9885bb76d
commit
781ed90653
1 changed files with 23 additions and 7 deletions
|
@ -309,6 +309,7 @@ class Spinner:
|
|||
self.frame_idx = Spinner.last_frame_idx # Initialize from class variable
|
||||
self.width = len(frames[0]) - 2 # number of chars between the brackets
|
||||
self.animation_len = len(frames[0])
|
||||
self.last_display_len = 0 # Length of the last spinner line (frame + text)
|
||||
|
||||
def _supports_unicode(self) -> bool:
|
||||
if not self.is_tty:
|
||||
|
@ -350,20 +351,35 @@ class Spinner:
|
|||
return
|
||||
|
||||
self.last_update = now
|
||||
frame = self._next_frame()
|
||||
frame_str = self._next_frame()
|
||||
|
||||
sys.stdout.write(f"\r{frame} {self.text}")
|
||||
current_text_payload = f" {self.text}"
|
||||
line_to_display = f"{frame_str}{current_text_payload}"
|
||||
len_line_to_display = len(line_to_display)
|
||||
|
||||
# Calculate padding to clear any remnants from a longer previous line
|
||||
padding_to_clear = " " * max(0, self.last_display_len - len_line_to_display)
|
||||
|
||||
# Write the spinner frame, text, and any necessary clearing spaces
|
||||
sys.stdout.write(f"\r{line_to_display}{padding_to_clear}")
|
||||
|
||||
# Store the length of the actual content part for the next step's clearing calculation
|
||||
self.last_display_len = len_line_to_display
|
||||
|
||||
# Calculate number of backspaces to position cursor at the scanner character
|
||||
scan_char_abs_pos = frame_str.find(self.scan_char)
|
||||
|
||||
# Total characters written to the line (frame + text + padding)
|
||||
total_chars_written_on_line = len_line_to_display + len(padding_to_clear)
|
||||
|
||||
num_backspaces = total_chars_written_on_line - scan_char_abs_pos
|
||||
|
||||
# Backspace cursor to the scanner character
|
||||
pos_in_content = frame.find(self.scan_char) - 1 # exclude '['
|
||||
chars_after_scanner = (self.width - 1) - pos_in_content
|
||||
num_backspaces = max(0, chars_after_scanner + 2) + len(self.text) + 1
|
||||
sys.stdout.write("\b" * num_backspaces)
|
||||
sys.stdout.flush()
|
||||
|
||||
def end(self) -> None:
|
||||
if self.visible and self.is_tty:
|
||||
clear_len = len(self.text) + 1 + self.animation_len
|
||||
clear_len = self.last_display_len # Use the length of the last displayed content
|
||||
sys.stdout.write("\r" + " " * clear_len + "\r")
|
||||
sys.stdout.flush()
|
||||
self.console.show_cursor(True)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue