From 78fd7a8458b3c877cf67b99b2362f8b2ef02b010 Mon Sep 17 00:00:00 2001 From: Nicolas Ochsner Date: Tue, 14 Jun 2022 11:09:26 +0200 Subject: [PATCH] Enable resizing in session files. --- kitty/session.py | 20 ++++++++++++++++++-- kitty/tabs.py | 5 ++++- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/kitty/session.py b/kitty/session.py index 2a1dc776a..9afc31eff 100644 --- a/kitty/session.py +++ b/kitty/session.py @@ -3,7 +3,7 @@ import shlex import sys -from typing import TYPE_CHECKING, Generator, Iterator, List, Optional, Union +from typing import TYPE_CHECKING, Generator, Iterator, List, Optional, Union, NamedTuple from .cli_stub import CLIOptions from .constants import kitty_exe @@ -26,11 +26,16 @@ def get_os_window_sizing_data(opts: Options, session: Optional['Session'] = None return WindowSizeData(sizes, opts.remember_window_size, opts.single_window_margin_width, opts.window_margin_width, opts.window_padding_width) +class SessionResizeWindow(NamedTuple): + direction: str + steps: int + + class Tab: def __init__(self, opts: Options, name: str): from .launch import LaunchSpec - self.windows: List[Union[LaunchSpec, 'SpecialWindowInstance']] = [] + self.windows: List[Union[LaunchSpec, SessionResizeWindow, 'SpecialWindowInstance']] = [] self.name = name.strip() self.active_window_idx = 0 self.enabled_layouts = opts.enabled_layouts @@ -73,6 +78,15 @@ class Session: t.windows.append(spec) t.next_title = None + def resize_window(self, cmd: str) -> None: + args = cmd.split(" ") + steps = 1 + if len(args) > 1: + steps = int(args[1]) + t = self.tabs[-1] + t.windows.append(SessionResizeWindow(args[0], steps)) + + def add_special_window(self, sw: 'SpecialWindowInstance') -> None: self.tabs[-1].windows.append(sw) @@ -132,6 +146,8 @@ def parse_session(raw: str, opts: Options) -> Generator[Session, None, None]: ans.os_window_size = WindowSizes(WindowSize(*w), WindowSize(*h)) elif cmd == 'os_window_class': ans.os_window_class = rest + elif cmd == 'resize_window': + ans.resize_window(rest) else: raise ValueError(f'Unknown command in session file: {cmd}') yield finalize_session(ans) diff --git a/kitty/tabs.py b/kitty/tabs.py index 334eb490a..ab92b1ef0 100644 --- a/kitty/tabs.py +++ b/kitty/tabs.py @@ -27,6 +27,7 @@ from .fast_data_types import ( ) from .layout.base import Layout from .layout.interface import create_layout_object_for, evict_cached_layouts +from .session import SessionResizeWindow from .tab_bar import TabBar, TabBarData from .types import ac from .typing import EdgeLiteral, SessionTab, SessionType, TypedDict @@ -169,7 +170,9 @@ class Tab: # {{{ def startup(self, session_tab: 'SessionTab') -> None: for cmd in session_tab.windows: - if isinstance(cmd, SpecialWindowInstance): + if isinstance(cmd, SessionResizeWindow): + self.resize_window(*cmd) + elif isinstance(cmd, SpecialWindowInstance): self.new_special_window(cmd) else: from .launch import launch