Skip to content

Commit a46596a

Browse files
authored
Fix carriage return to correctly remove lines from the GUI console (#126)
* New console print of carriage return, with debug statements * Remove ANSI ESCAPE characters after all; this version handles tqdm * Remove debug statements
1 parent c6dd6cd commit a46596a

File tree

1 file changed

+14
-5
lines changed

1 file changed

+14
-5
lines changed

src/instamatic/gui/console_frame.py

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from __future__ import annotations
22

33
import datetime
4+
import re
45
import sys
56
import time
67
from pathlib import Path
@@ -21,18 +22,26 @@ class Writer:
2122
Tkinter text / scrolledtext widget to redirect stdout to
2223
"""
2324

25+
ANSI_ESCAPE = re.compile(r'\x1b\[[0-9;]*[a-zA-Z]')
26+
2427
def __init__(self, text, add_timestamp=False):
2528
self.terminal = sys.__stdout__
2629
self.text = text
2730
self._add_timestamp = add_timestamp
2831

29-
def write(self, message):
32+
def write(self, message: str) -> None:
3033
self.terminal.write(message)
34+
35+
if '\r' in message: # tkinter.Text can't handle carriage returns
36+
message = message.rsplit('\r', maxsplit=1)[-1]
37+
self.text.delete('insert linestart', 'insert lineend')
38+
39+
message = self.ANSI_ESCAPE.sub('', message) # remove ANSI escape codes
40+
3141
if self._add_timestamp and message != '\n':
32-
now = time.strftime('%H:%M:%S')
33-
self.text.insert(END, f'[{now}] {message}')
34-
else:
35-
self.text.insert(END, message)
42+
message = f'[{time.strftime("%H:%M:%S")}] {message}'
43+
44+
self.text.insert(END, message)
3645
self.text.see(END)
3746

3847
def flush(self, *args, **kwargs):

0 commit comments

Comments
 (0)