From 5ff1dadf0d9bdd67f45df0edf269db08add70468 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sat, 25 Mar 2023 10:43:38 +0530 Subject: [PATCH] Allow using --session=none to override startup_session Fixes #6131 --- kitty/boss.py | 7 +++++-- kitty/cli.py | 2 ++ kitty/main.py | 2 ++ kitty/options/definition.py | 2 +- kitty/session.py | 25 ++++++++++++++----------- 5 files changed, 24 insertions(+), 14 deletions(-) diff --git a/kitty/boss.py b/kitty/boss.py index 89d8e0b12..508befc97 100644 --- a/kitty/boss.py +++ b/kitty/boss.py @@ -763,8 +763,11 @@ class Boss: args.args = rest opts = create_opts(args) if data['session_data']: - from .session import PreReadSession - args.session = PreReadSession(data['session_data'], data['environ']) + if data['session_data'] == 'none': + args.session = 'none' + else: + from .session import PreReadSession + args.session = PreReadSession(data['session_data'], data['environ']) else: args.session = '' if not os.path.isabs(args.directory): diff --git a/kitty/cli.py b/kitty/cli.py index 5e61305a7..fb6b27e76 100644 --- a/kitty/cli.py +++ b/kitty/cli.py @@ -898,6 +898,8 @@ Path to a file containing the startup :italic:`session` (tabs, windows, layout, programs). Use - to read from STDIN. See the :file:`README` file for details and an example. Environment variables in the file name are expanded, relative paths are resolved relative to the kitty configuration directory. +The special value :code:`none` means no session will be used, even if +the :opt:`startup_session` option has been specified in kitty.conf. --hold diff --git a/kitty/main.py b/kitty/main.py index 7b5a150f4..8c27c0fff 100644 --- a/kitty/main.py +++ b/kitty/main.py @@ -85,6 +85,8 @@ def talk_to_instance(args: CLIOptions) -> None: session_data = '' if args.session == '-': session_data = sys.stdin.read() + elif args.session == 'none': + session_data = 'none' elif args.session: with open(args.session) as f: session_data = f.read() diff --git a/kitty/options/definition.py b/kitty/options/definition.py index fcb4adb0e..c7d9658a4 100644 --- a/kitty/options/definition.py +++ b/kitty/options/definition.py @@ -2938,7 +2938,7 @@ opt('startup_session', 'none', option_type='config_or_absolute_path', long_text=''' Path to a session file to use for all kitty instances. Can be overridden by -using the :option:`kitty --session` command line option for individual +using the :option:`kitty --session` :code:`=none` command line option for individual instances. See :ref:`sessions` in the kitty documentation for details. Note that relative paths are interpreted with respect to the kitty config directory. Environment variables in the path are expanded. Changing this option by diff --git a/kitty/session.py b/kitty/session.py index 38b0f3344..c93e15f5f 100644 --- a/kitty/session.py +++ b/kitty/session.py @@ -205,19 +205,22 @@ def create_sessions( default_session: Optional[str] = None, ) -> Iterator[Session]: if args and args.session: - environ: Optional[Mapping[str, str]] = None - if isinstance(args.session, PreReadSession): - session_data = '' + str(args.session) - environ = args.session.associated_environ # type: ignore + if args.session == "none": + default_session = "none" else: - if args.session == '-': - f = sys.stdin + environ: Optional[Mapping[str, str]] = None + if isinstance(args.session, PreReadSession): + session_data = '' + str(args.session) + environ = args.session.associated_environ # type: ignore else: - f = open(resolve_custom_file(args.session)) - with f: - session_data = f.read() - yield from parse_session(session_data, opts, environ=environ) - return + if args.session == '-': + f = sys.stdin + else: + f = open(resolve_custom_file(args.session)) + with f: + session_data = f.read() + yield from parse_session(session_data, opts, environ=environ) + return if default_session and default_session != 'none': try: with open(default_session) as f: