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
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:
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)
# 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}")
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)