From f46c42320308506f06966db2e5344e9da2648075 Mon Sep 17 00:00:00 2001 From: Tony Narlock Date: Sun, 17 Mar 2024 05:49:22 -0500 Subject: [PATCH 1/6] refactor(split): PEP 3102 keyword-only arguments --- src/libtmux/pane.py | 1 + src/libtmux/window.py | 1 + 2 files changed, 2 insertions(+) diff --git a/src/libtmux/pane.py b/src/libtmux/pane.py index 2ef250c5c..b7b6f5b35 100644 --- a/src/libtmux/pane.py +++ b/src/libtmux/pane.py @@ -489,6 +489,7 @@ def select_pane(self) -> "Pane": def split( self, + /, start_directory: t.Optional[str] = None, attach: bool = False, direction: t.Optional[PaneDirection] = None, diff --git a/src/libtmux/window.py b/src/libtmux/window.py index 5d6047660..4b6aa8224 100644 --- a/src/libtmux/window.py +++ b/src/libtmux/window.py @@ -199,6 +199,7 @@ def select_pane(self, target_pane: t.Union[str, int]) -> t.Optional["Pane"]: def split( self, + /, target: t.Optional[t.Union[int, str]] = None, start_directory: t.Optional[str] = None, attach: bool = False, From 7916d66ab514e97213d00731e2ad8973372fff9c Mon Sep 17 00:00:00 2001 From: Tony Narlock Date: Sun, 17 Mar 2024 05:48:46 -0500 Subject: [PATCH 2/6] refactor(resize): PEP 3102 keyword-only arguments --- src/libtmux/pane.py | 1 + src/libtmux/window.py | 1 + 2 files changed, 2 insertions(+) diff --git a/src/libtmux/pane.py b/src/libtmux/pane.py index b7b6f5b35..a1c5078ef 100644 --- a/src/libtmux/pane.py +++ b/src/libtmux/pane.py @@ -149,6 +149,7 @@ def cmd(self, cmd: str, *args: t.Any) -> tmux_cmd: def resize( self, + /, # Adjustments adjustment_direction: t.Optional[ResizeAdjustmentDirection] = None, adjustment: t.Optional[int] = None, diff --git a/src/libtmux/window.py b/src/libtmux/window.py index 4b6aa8224..b8d7d6b59 100644 --- a/src/libtmux/window.py +++ b/src/libtmux/window.py @@ -251,6 +251,7 @@ def split( def resize( self, + /, # Adjustments adjustment_direction: t.Optional[ResizeAdjustmentDirection] = None, adjustment: t.Optional[int] = None, From 6215bdbe33dcaa5997269ef50e843cab0607cb80 Mon Sep 17 00:00:00 2001 From: Tony Narlock Date: Sun, 17 Mar 2024 05:43:10 -0500 Subject: [PATCH 3/6] fix(split): Passthrough target correctly --- src/libtmux/pane.py | 8 ++++++++ src/libtmux/window.py | 1 + 2 files changed, 9 insertions(+) diff --git a/src/libtmux/pane.py b/src/libtmux/pane.py index a1c5078ef..5826bdbc7 100644 --- a/src/libtmux/pane.py +++ b/src/libtmux/pane.py @@ -491,6 +491,7 @@ def select_pane(self) -> "Pane": def split( self, /, + target: t.Optional[t.Union[int, str]] = None, start_directory: t.Optional[str] = None, attach: bool = False, direction: t.Optional[PaneDirection] = None, @@ -504,6 +505,8 @@ def split( Parameters ---------- + target : optional + Optional, custom *target-pane*, used by :meth:`Window.split`. attach : bool, optional make new window the current window after creating it, default True. @@ -617,6 +620,9 @@ def split( if not attach: tmux_args += ("-d",) + if target is not None: + tmux_args += (f"-t{target}",) + if environment: if has_gte_version("3.0"): for k, v in environment.items(): @@ -807,6 +813,7 @@ def at_right(self) -> bool: # def split_window( self, + target: t.Optional[t.Union[int, str]] = None, attach: bool = False, start_directory: t.Optional[str] = None, vertical: bool = True, @@ -844,6 +851,7 @@ def split_window( if size is None and percent is not None: size = f'{str(percent).rstrip("%")}%' return self.split( + target=target, attach=attach, start_directory=start_directory, direction=PaneDirection.Below if vertical else PaneDirection.Right, diff --git a/src/libtmux/window.py b/src/libtmux/window.py index b8d7d6b59..387d8647e 100644 --- a/src/libtmux/window.py +++ b/src/libtmux/window.py @@ -239,6 +239,7 @@ def split( """ active_pane = self.active_pane or self.panes[0] return active_pane.split( + target=target, start_directory=start_directory, attach=attach, direction=direction, From 25222e7c952a27db93e7157d3e54e89675a5b58d Mon Sep 17 00:00:00 2001 From: Tony Narlock Date: Sun, 17 Mar 2024 06:21:20 -0500 Subject: [PATCH 4/6] chore(Session.new_window): Return window_index functionality This reverts commit b46e7fafc4a5e1154805319352191b2c21d590bb. --- src/libtmux/session.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/libtmux/session.py b/src/libtmux/session.py index a85ac8341..8356b548a 100644 --- a/src/libtmux/session.py +++ b/src/libtmux/session.py @@ -635,6 +635,10 @@ def new_window( if window_name is not None and isinstance(window_name, str): window_args += ("-n", window_name) + if window_index is not None: + # empty string for window_index will use the first one available + window_args += (f"-t{self.session_id}:{window_index}",) + if environment: if has_gte_version("3.0"): for k, v in environment.items(): From 64e0aba4040dc629e8a8a6419c4bcc59c9d57d68 Mon Sep 17 00:00:00 2001 From: Tony Narlock Date: Sun, 17 Mar 2024 06:44:28 -0500 Subject: [PATCH 5/6] refactor({Window,Session}.new_window): PEP 3102 keyword-only arguments --- src/libtmux/session.py | 1 + src/libtmux/window.py | 1 + 2 files changed, 2 insertions(+) diff --git a/src/libtmux/session.py b/src/libtmux/session.py index 8356b548a..01406404c 100644 --- a/src/libtmux/session.py +++ b/src/libtmux/session.py @@ -537,6 +537,7 @@ def rename_session(self, new_name: str) -> "Session": def new_window( self, window_name: t.Optional[str] = None, + *, start_directory: None = None, attach: bool = False, window_index: str = "", diff --git a/src/libtmux/window.py b/src/libtmux/window.py index 387d8647e..9795f47d1 100644 --- a/src/libtmux/window.py +++ b/src/libtmux/window.py @@ -624,6 +624,7 @@ def move_window( def new_window( self, window_name: t.Optional[str] = None, + *, start_directory: None = None, attach: bool = False, window_index: str = "", From 271f7b93277359a0f9c0509f413c40fe4c92c681 Mon Sep 17 00:00:00 2001 From: Tony Narlock Date: Sun, 17 Mar 2024 06:55:58 -0500 Subject: [PATCH 6/6] docs(CHANGES): Note keyword-only arguments --- CHANGES | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/CHANGES b/CHANGES index 50e7ce57a..c3d039841 100644 --- a/CHANGES +++ b/CHANGES @@ -19,9 +19,15 @@ $ pip install --user --upgrade --pre libtmux #### Improved new sessions (#532) -- `Session.new_window()` to {meth}`Session.new_window()` +- `Session.new_window()`: - Learned `direction`, via {class}`~libtmux.constants.WindowDirection`). + - [PEP 3102] keyword-only arguments after window name (#534). + +- Added {meth}`Window.new_window()` shorthand to create window based on that + window's position. + +[PEP 3102]: https://www.python.org/dev/peps/pep-3102/ #### Improved window splitting (#532)