From 0bf2998b6bbff41dd1db99d26c6b9c77d792f61e Mon Sep 17 00:00:00 2001 From: Tony Narlock Date: Wed, 7 Feb 2024 14:26:08 -0600 Subject: [PATCH 01/28] chore: Fix .cmd() -t wrapper for integer set_option() values --- src/libtmux/pane.py | 2 +- src/libtmux/window.py | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/libtmux/pane.py b/src/libtmux/pane.py index 907b23205..c9b5b7cc2 100644 --- a/src/libtmux/pane.py +++ b/src/libtmux/pane.py @@ -113,7 +113,7 @@ def cmd(self, cmd: str, *args: t.Any, **kwargs: t.Any) -> tmux_cmd: Specifying ``('-t', 'custom-target')`` or ``('-tcustom_target')`` in ``args`` will override using the object's ``pane_id`` as target. """ - if not any(arg.startswith("-t") for arg in args): + if not any("-t" in str(x) for x in args): args = ("-t", self.pane_id, *args) return self.server.cmd(cmd, *args, **kwargs) diff --git a/src/libtmux/window.py b/src/libtmux/window.py index 8283a0903..438d6ead4 100644 --- a/src/libtmux/window.py +++ b/src/libtmux/window.py @@ -76,6 +76,7 @@ class Window(Obj): https://man.openbsd.org/tmux.1#DESCRIPTION. Accessed April 1st, 2018. """ + default_scope: OptionScope = OptionScope.Window server: "Server" def refresh(self) -> None: @@ -139,7 +140,7 @@ def cmd(self, cmd: str, *args: t.Any, **kwargs: t.Any) -> tmux_cmd: Specifying ``('-t', 'custom-target')`` or ``('-tcustom_target')`` in ``args`` will override using the object's ``window_id`` as target. """ - if not any(arg.startswith("-t") for arg in args): + if not any("-t" in str(x) for x in args): args = ("-t", self.window_id, *args) return self.server.cmd(cmd, *args, **kwargs) From a59ac3e3dd3e205f5fb79c927beb3b58c928b092 Mon Sep 17 00:00:00 2001 From: Tony Narlock Date: Tue, 6 Feb 2024 05:11:35 -0600 Subject: [PATCH 02/28] chore(Window): More resilent handling of options that return without value --- src/libtmux/window.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/libtmux/window.py b/src/libtmux/window.py index 438d6ead4..793ac7ccc 100644 --- a/src/libtmux/window.py +++ b/src/libtmux/window.py @@ -390,7 +390,10 @@ def show_window_options(self, g: t.Optional[bool] = False) -> "WindowOptionDict" window_options: "WindowOptionDict" = {} for item in output: - key, val = shlex.split(item) + try: + key, val = shlex.split(item) + except ValueError: + logger.exception(f"Error extracting option: {item}") assert isinstance(key, str) assert isinstance(val, str) From 8d0a08c42588038b1711d3794606b1d5d8f525a1 Mon Sep 17 00:00:00 2001 From: Tony Narlock Date: Mon, 5 Feb 2024 15:00:51 -0600 Subject: [PATCH 03/28] feat!(Window): Set option flags --- src/libtmux/window.py | 43 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 42 insertions(+), 1 deletion(-) diff --git a/src/libtmux/window.py b/src/libtmux/window.py index 793ac7ccc..d7d5a1c05 100644 --- a/src/libtmux/window.py +++ b/src/libtmux/window.py @@ -327,7 +327,18 @@ def select_layout(self, layout: t.Optional[str] = None) -> "Window": return self - def set_window_option(self, option: str, value: t.Union[int, str]) -> "Window": + def set_window_option( + self, + option: str, + value: t.Union[int, str], + format: t.Optional[bool] = None, + unset: t.Optional[bool] = None, + unset_panes: t.Optional[bool] = None, + prevent_overwrite: t.Optional[bool] = None, + suppress_warnings: t.Optional[bool] = None, + append: t.Optional[bool] = None, + g: t.Optional[bool] = None, + ) -> "Window": """Set option for tmux window. Wraps ``$ tmux set-window-option