From f26cb34155574966bc053087a2fc68034b40663c Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=B6rg=20Behrmann?= Date: Thu, 2 Oct 2025 10:01:36 +0200 Subject: [PATCH] log: set terminal window title in complete_step while mkosi runs --- mkosi/__main__.py | 4 ++-- mkosi/log.py | 20 +++++++++++++++++++- 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/mkosi/__main__.py b/mkosi/__main__.py index 23dc53407..57c082b69 100644 --- a/mkosi/__main__.py +++ b/mkosi/__main__.py @@ -10,7 +10,7 @@ from typing import Optional import mkosi.resources from mkosi import run_verb from mkosi.config import parse_config -from mkosi.log import log_setup +from mkosi.log import log_setup, stash_terminal_title from mkosi.run import find_binary, run, uncaught_exception_handler from mkosi.util import resource_path @@ -34,7 +34,7 @@ def main() -> None: log_setup() - with resource_path(mkosi.resources) as resources: + with resource_path(mkosi.resources) as resources, stash_terminal_title(): args, tools, images = parse_config(sys.argv[1:], resources=resources) if args.debug: diff --git a/mkosi/log.py b/mkosi/log.py index 55a3e850f..8c4471e19 100644 --- a/mkosi/log.py +++ b/mkosi/log.py @@ -8,7 +8,7 @@ import sys from collections.abc import Iterator from typing import Any, NoReturn, Optional -from mkosi.sandbox import Style +from mkosi.sandbox import Style, terminal_is_dumb # This global should be initialized after parsing arguments ARG_DEBUG = contextvars.ContextVar("debug", default=False) @@ -32,8 +32,12 @@ def log_step(text: str) -> None: # De-emphasize this step here, so the user can tell more # easily which step generated the exception. The exception # or error will only be printed after we finish cleanup. + if not terminal_is_dumb(): + print(f"\033]0;mkosi: {text}", file=sys.stderr) logging.info(f"{prefix}({text})") else: + if not terminal_is_dumb(): + print(f"\033]0;mkosi: {text}", file=sys.stderr) logging.info(f"{prefix}{Style.bold}{text}{Style.reset}") @@ -85,3 +89,17 @@ def log_setup(default_log_level: str = "info") -> None: logging.getLogger().setLevel( logging.getLevelName(os.getenv("SYSTEMD_LOG_LEVEL", default_log_level).upper()) ) + + +@contextlib.contextmanager +def stash_terminal_title() -> Iterator[None]: + try: + # push terminal window title to stack + if not terminal_is_dumb(): + print("\033[22t", file=sys.stderr) + + yield + finally: + # pop terminal window title from stack to reset + if not terminal_is_dumb(): + print("\033[23t", file=sys.stderr) -- 2.47.3