From b15c89c90853b6ccd7a658111d85d7e33f42da0a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Tcho=C5=84?= Date: Fri, 16 May 2025 18:35:34 +0200 Subject: [PATCH 1/3] New console print of carriage return, with debug statements --- src/instamatic/gui/console_frame.py | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/src/instamatic/gui/console_frame.py b/src/instamatic/gui/console_frame.py index d4e96442..e4c4e28c 100644 --- a/src/instamatic/gui/console_frame.py +++ b/src/instamatic/gui/console_frame.py @@ -1,6 +1,7 @@ from __future__ import annotations import datetime +import re import sys import time from pathlib import Path @@ -25,14 +26,25 @@ def __init__(self, text, add_timestamp=False): self.terminal = sys.__stdout__ self.text = text self._add_timestamp = add_timestamp + self.timestamps = {} + import atexit - def write(self, message): + atexit.register( + lambda: print('\n'.join(f'{k}: {v}' for k, v in self.timestamps.items())) + ) + + def write(self, message: str) -> None: self.terminal.write(message) + + if '\r\x1b[K' in message: # tkinter.Text can't handle carriage returns + message = message.rsplit('\r\x1b[K', maxsplit=1)[-1] + self.text.delete('insert linestart', 'insert lineend') + if self._add_timestamp and message != '\n': - now = time.strftime('%H:%M:%S') - self.text.insert(END, f'[{now}] {message}') - else: - self.text.insert(END, message) + message = f'[{time.strftime("%H:%M:%S")}] {message}' + + self.text.insert(END, message) + self.timestamps[message] = time.perf_counter_ns() self.text.see(END) def flush(self, *args, **kwargs): From fd20f472627a8724abd28423c07d9d9f8a5f3fc6 Mon Sep 17 00:00:00 2001 From: Daniel Tchon Date: Fri, 16 May 2025 19:16:15 +0200 Subject: [PATCH 2/3] Remove ANSI ESCAPE characters after all; this version handles tqdm --- src/instamatic/gui/console_frame.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/instamatic/gui/console_frame.py b/src/instamatic/gui/console_frame.py index e4c4e28c..58926064 100644 --- a/src/instamatic/gui/console_frame.py +++ b/src/instamatic/gui/console_frame.py @@ -22,6 +22,8 @@ class Writer: Tkinter text / scrolledtext widget to redirect stdout to """ + ANSI_ESCAPE = re.compile(r'\x1b\[[0-9;]*[a-zA-Z]') + def __init__(self, text, add_timestamp=False): self.terminal = sys.__stdout__ self.text = text @@ -36,9 +38,11 @@ def __init__(self, text, add_timestamp=False): def write(self, message: str) -> None: self.terminal.write(message) - if '\r\x1b[K' in message: # tkinter.Text can't handle carriage returns - message = message.rsplit('\r\x1b[K', maxsplit=1)[-1] - self.text.delete('insert linestart', 'insert lineend') + if '\r' in message: # tkinter.Text can't handle carriage returns + message = message.rsplit('\r', maxsplit=1)[-1] + self.text.delete('insert linestart', 'insert lineend') + + message = self.ANSI_ESCAPE.sub('', message) if self._add_timestamp and message != '\n': message = f'[{time.strftime("%H:%M:%S")}] {message}' From ebe939c1b06c94e87c581d03b87ee8c15dfbc94f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Tcho=C5=84?= Date: Fri, 16 May 2025 19:33:07 +0200 Subject: [PATCH 3/3] Remove debug statements --- src/instamatic/gui/console_frame.py | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/src/instamatic/gui/console_frame.py b/src/instamatic/gui/console_frame.py index 58926064..3a59e585 100644 --- a/src/instamatic/gui/console_frame.py +++ b/src/instamatic/gui/console_frame.py @@ -28,12 +28,6 @@ def __init__(self, text, add_timestamp=False): self.terminal = sys.__stdout__ self.text = text self._add_timestamp = add_timestamp - self.timestamps = {} - import atexit - - atexit.register( - lambda: print('\n'.join(f'{k}: {v}' for k, v in self.timestamps.items())) - ) def write(self, message: str) -> None: self.terminal.write(message) @@ -42,13 +36,12 @@ def write(self, message: str) -> None: message = message.rsplit('\r', maxsplit=1)[-1] self.text.delete('insert linestart', 'insert lineend') - message = self.ANSI_ESCAPE.sub('', message) + message = self.ANSI_ESCAPE.sub('', message) # remove ANSI escape codes if self._add_timestamp and message != '\n': message = f'[{time.strftime("%H:%M:%S")}] {message}' self.text.insert(END, message) - self.timestamps[message] = time.perf_counter_ns() self.text.see(END) def flush(self, *args, **kwargs):