diff --git a/CHANGES b/CHANGES index 691ac21863e..4e961a10022 100644 --- a/CHANGES +++ b/CHANGES @@ -19,11 +19,18 @@ $ pipx install --suffix=@next 'tmuxp' --pip-args '\--pre' --force +#### Breaking changes + +- libtmux: 0.30.2 -> 0.31.0 (#912) + +- Renamings of libtmux 0.31.0's streamlining of `cmd()`, renaming of `attached_{window,pane}s` to + `active_{window,pane}s`. + ## tmuxp 1.38.0 (2024-02-16) #### Breaking changes -- libtmux: 0.28.1 -> 0.30.1 (#911). +- libtmux: 0.28.1 -> 0.30.1 (#911) Updated method names diff --git a/conftest.py b/conftest.py index 9f89abc8bf3..e3a6be065fd 100644 --- a/conftest.py +++ b/conftest.py @@ -107,7 +107,7 @@ def add_doctest_fixtures( doctest_namespace["server"] = request.getfixturevalue("server") session: "Session" = request.getfixturevalue("session") doctest_namespace["session"] = session - doctest_namespace["window"] = session.attached_window - doctest_namespace["pane"] = session.attached_pane + doctest_namespace["window"] = session.active_window + doctest_namespace["pane"] = session.active_pane doctest_namespace["test_utils"] = test_utils doctest_namespace["tmp_path"] = tmp_path diff --git a/poetry.lock b/poetry.lock index a0c754fe190..b2817b8b1a6 100644 --- a/poetry.lock +++ b/poetry.lock @@ -391,13 +391,13 @@ i18n = ["Babel (>=2.7)"] [[package]] name = "libtmux" -version = "0.30.1" +version = "0.31.0" description = "Typed library that provides an ORM wrapper for tmux, a terminal multiplexer." optional = false python-versions = ">=3.8,<4.0" files = [ - {file = "libtmux-0.30.1-py3-none-any.whl", hash = "sha256:57309ac21b99696903494621d7132eb29f430921153f97e40717b6ab4d62119c"}, - {file = "libtmux-0.30.1.tar.gz", hash = "sha256:652d74d614963a7cc3a6617e7d0601e196fd0e55f9d074ab441bf6879ca462f3"}, + {file = "libtmux-0.31.0-py3-none-any.whl", hash = "sha256:ad3b913b946406406b9735195e9500fae827f9428731e7cebea959d1e7250ee5"}, + {file = "libtmux-0.31.0.tar.gz", hash = "sha256:77f1ee64196cdecdcee641657d206e75ffb2437b6aaeb56c24303034992fb5ef"}, ] [[package]] @@ -1397,4 +1397,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "e2fc74bd88e8ee7fc9681b110d3b17c37e2e624dd4f7a6f2a94934f995372e2e" +content-hash = "4795136a3d174c9e16b5a724dae1712efa37dc63922a30177d2b0d7ddcefd777" diff --git a/pyproject.toml b/pyproject.toml index 64572522bb0..6f9072ac641 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -47,7 +47,7 @@ tmuxp = 'tmuxp:cli.cli' [tool.poetry.dependencies] python = "^3.8" -libtmux = "~0.30.1" +libtmux = "~0.31.0" colorama = ">=0.3.9" PyYAML = "^6.0" diff --git a/src/tmuxp/cli/load.py b/src/tmuxp/cli/load.py index ebbbff5419c..e4b50077cc1 100644 --- a/src/tmuxp/cli/load.py +++ b/src/tmuxp/cli/load.py @@ -78,9 +78,10 @@ def set_layout_hook(session: Session, hook_name: str) -> None: hook_name : str hook name to bind to, e.g. 'client-attached' """ - cmd = ["set-hook", "-t", session.id, hook_name] + assert session.id is not None + cmd: t.List[str] = ["set-hook", "-t", str(session.id), hook_name] hook_cmd = [] - attached_window = session.attached_window + active_window = session.active_window for window in session.windows: # unfortunately, select-layout won't work unless # we've literally selected the window at least once @@ -92,7 +93,7 @@ def set_layout_hook(session: Session, hook_name: str) -> None: # unset the hook immediately after executing hook_cmd.append(f"set-hook -u -t {session.id} {hook_name}") - hook_cmd.append(f"selectw -t {attached_window.id}") + hook_cmd.append(f"selectw -t {active_window.id}") # join the hook's commands with semicolons _hook_cmd = "{}".format("; ".join(hook_cmd)) diff --git a/src/tmuxp/cli/shell.py b/src/tmuxp/cli/shell.py index 09a8f39a07a..03e5c885f90 100644 --- a/src/tmuxp/cli/shell.py +++ b/src/tmuxp/cli/shell.py @@ -154,8 +154,8 @@ def command_shell( - session_name and window_name arguments - current shell: envvar ``TMUX_PANE`` for determining window and session - - :attr:`libtmux.Server.attached_sessions`, :attr:`libtmux.Session.attached_window`, - :attr:`libtmux.Window.attached_pane` + - :attr:`libtmux.Server.attached_sessions`, :attr:`libtmux.Session.active_window`, + :attr:`libtmux.Window.active_pane` """ # If inside a server, detect socket_path env_tmux = os.getenv("TMUX") diff --git a/src/tmuxp/util.py b/src/tmuxp/util.py index a168b5dd096..4a07bc8450b 100644 --- a/src/tmuxp/util.py +++ b/src/tmuxp/util.py @@ -154,7 +154,7 @@ def get_pane(window: "Window", current_pane: t.Optional["Pane"] = None) -> "Pane if current_pane is not None: pane = window.panes.get(pane_id=current_pane.pane_id) else: - pane = window.attached_pane + pane = window.active_pane except exc.TmuxpException as e: print(e) diff --git a/src/tmuxp/workspace/builder.py b/src/tmuxp/workspace/builder.py index 35a5754d176..d7346b31d97 100644 --- a/src/tmuxp/workspace/builder.py +++ b/src/tmuxp/workspace/builder.py @@ -355,7 +355,7 @@ def iter_create_windows( w1 = None if is_first_window_pass: # if first window, use window 1 - w1 = session.attached_window + w1 = session.active_window w1.move_window("99") start_directory = window_config.get("start_directory", None) @@ -403,7 +403,7 @@ def iter_create_windows( assert isinstance(window, Window) if is_first_window_pass: # if first window, use window 1 - session.attached_window.kill() + session.active_window.kill() if "options" in window_config and isinstance( window_config["options"], @@ -452,7 +452,7 @@ def iter_create_panes( start=pane_base_index, ): if pane_index == int(pane_base_index): - pane = window.attached_pane + pane = window.active_pane else: def get_pane_start_directory( diff --git a/tests/cli/test_load.py b/tests/cli/test_load.py index a0d77fdb5f6..5e7d43256bb 100644 --- a/tests/cli/test_load.py +++ b/tests/cli/test_load.py @@ -174,8 +174,8 @@ def test_load_symlinked_workspace( detached=True, ) assert session is not None - assert session.attached_window is not None - pane = session.attached_window.attached_pane + assert session.active_window is not None + pane = session.active_window.active_pane assert isinstance(session, Session) assert session.name == "samplesimple" diff --git a/tests/cli/test_shell.py b/tests/cli/test_shell.py index d7648eccb48..18b726a5c5e 100644 --- a/tests/cli/test_shell.py +++ b/tests/cli/test_shell.py @@ -123,13 +123,13 @@ def test_shell( window = session.new_window(window_name=window_name) window.split_window() - assert window.attached_pane is not None + assert window.active_pane is not None template_ctx = { "SOCKET_NAME": server.socket_name, "SESSION_NAME": session.name, "WINDOW_NAME": window_name, - "PANE_ID": window.attached_pane.id, + "PANE_ID": window.active_pane.id, "SERVER_SOCKET_NAME": server.socket_name, } @@ -293,13 +293,13 @@ def test_shell_interactive( window = session.new_window(window_name=window_name) window.split_window() - assert window.attached_pane is not None + assert window.active_pane is not None template_ctx = { "SOCKET_NAME": server.socket_name, "SESSION_NAME": session.name, "WINDOW_NAME": window_name, - "PANE_ID": window.attached_pane.id, + "PANE_ID": window.active_pane.id, "SERVER_SOCKET_NAME": server.socket_name, } diff --git a/tests/workspace/test_builder.py b/tests/workspace/test_builder.py index 10e6590a051..dc94ffcfc93 100644 --- a/tests/workspace/test_builder.py +++ b/tests/workspace/test_builder.py @@ -92,9 +92,9 @@ def test_focus_pane_index(session: Session) -> None: builder.build(session=session) - assert session.attached_window.name == "focused window" + assert session.active_window.name == "focused window" - _pane_base_index = session.attached_window.show_window_option( + _pane_base_index = session.active_window.show_window_option( "pane-base-index", g=True, ) @@ -106,14 +106,14 @@ def test_focus_pane_index(session: Session) -> None: # get the pane index for each pane pane_base_indexes = [ int(pane.index) - for pane in session.attached_window.panes + for pane in session.active_window.panes if pane is not None and pane.index is not None ] pane_indexes_should_be = [pane_base_index + x for x in range(0, 3)] assert pane_indexes_should_be == pane_base_indexes - w = session.attached_window + w = session.active_window assert w.name != "man" @@ -122,7 +122,7 @@ def test_focus_pane_index(session: Session) -> None: def f_check() -> bool: nonlocal p - p = w.attached_pane + p = w.active_pane assert p is not None return p.pane_current_path == pane_path @@ -142,7 +142,7 @@ def f_check() -> bool: def f_check_again() -> bool: nonlocal p - p = window3.attached_pane + p = window3.active_pane assert p is not None return p.pane_current_path == pane_path @@ -188,7 +188,7 @@ def assertIsMissing(cmd: str, hist: str) -> bool: ]: assert w.name == window_name w.select() - p = w.attached_pane + p = w.active_pane assert p is not None p.select() @@ -279,7 +279,7 @@ def test_global_session_env_options( assert isinstance(_visual_silence, str) assert visual_silence in _visual_silence assert repeat_time == session.show_option("repeat-time") - assert main_pane_height == session.attached_window.show_window_option( + assert main_pane_height == session.active_window.show_window_option( "main-pane-height", ) @@ -338,7 +338,7 @@ def f() -> bool: # Print output for easier debugging if assertion fails return retry_until(f, raises=False) - for i, pane in enumerate(session.attached_window.panes): + for i, pane in enumerate(session.active_window.panes): assert assert_last_line(pane, str(i)), ( "Initial command did not execute properly/" + str(i) ) @@ -351,7 +351,7 @@ def f() -> bool: session.cmd("send-keys", " echo moo") session.cmd("send-keys", "Enter") - for pane in session.attached_window.panes: + for pane in session.active_window.panes: assert assert_last_line( pane, "moo", @@ -1235,7 +1235,7 @@ def test_load_workspace_enter( session = builder.session assert isinstance(session, Session) - pane = session.attached_pane + pane = session.active_pane assert isinstance(pane, Pane) def fn() -> bool: @@ -1363,7 +1363,7 @@ def test_load_workspace_sleep( session = builder.session assert isinstance(builder.session, Session) assert session is not None - pane = session.attached_pane + pane = session.active_pane assert isinstance(pane, Pane) assert pane is not None