Index index by Group index by Distribution index by Vendor index by creation date index by Name Mirrors Help Search

python313-libtmux-0.62.0-1.1 RPM for noarch

From OpenSuSE Ports Tumbleweed for noarch

Name: python313-libtmux Distribution: openSUSE Tumbleweed
Version: 0.62.0 Vendor: openSUSE
Release: 1.1 Build date: Mon Jul 13 07:03:07 2026
Group: Unspecified Build host: reproducible
Size: 1374638 Source RPM: python-libtmux-0.62.0-1.1.src.rpm
Packager: http://bugs.opensuse.org
Url: https://github.com/tmux-python/libtmux/
Summary: Python API / wrapper for tmux
libtmux is a typed python scripting library for tmux. You can use it to command
and control tmux servers, sessions, windows, and panes. It is the tool powering
tmuxp, a tmux workspace manager.

Provides

Requires

License

MIT

Changelog

* Mon Jul 13 2026 Johannes Kastl <opensuse_buildservice@ojkastl.de>
  - update to 0.62.0:
    * Highlights
      libtmux 0.62.0 teaches libtmux objects to locate themselves and
      to resolve shared windows the way tmux does. Code running
      inside tmux can now find the object it's running in, a window
      can name every session that holds it, and point lookups follow
      tmux's own choice of session and index instead of an arbitrary
      one. One breaking change lands too — query errors now belong to
      the LibTmuxException hierarchy (see below).
    * Find where you're running — from_env()
      Most libtmux code starts from a handle you already hold. But
      a script in a split, a tmux hook, a test harness, or an agent
      is running inside a pane and holds nothing. tmux already
      wrote the answer into the pane's environment, and each level
      of the hierarchy now reads it back:
      from libtmux import Pane
      pane = Pane.from_env()        # the pane this code is running in
      window = pane.window          # …and you're back on the hierarchy from there
      session = window.session
      Server.from_env(), Session.from_env(), and Window.from_env()
      do the same for the rest of the tree. Each also accepts an
      environment mapping in place of os.environ, so code that
      locates itself stays testable outside a pane. Outside tmux —
      or with an environment that doesn't parse — the family raises
      libtmux.exc.NotInsideTmux rather than guessing.
      The answer stays true as tmux moves things around: it
      survives a move-window, and for a window linked into several
      sessions it names the session tmux itself would act on. See
      the Locating yourself guide for the whole story.
    * Ask a window which sessions hold it — Window.linked_sessions
      A window can be linked into more than one session at once.
      Window.linked_sessions lists every Session from which a
      window is reachable — a typical window returns one, a linked
      or grouped window returns several, with each session
      appearing once even when it holds the window at multiple
      indexes. Use it when you need every holder; Window.session
      still follows the single session_id recorded on that
      instance.
    * Linked windows resolve the way tmux does
      Window.from_window_id(), Pane.from_pane_id(),
      Window.refresh(), and Pane.refresh() used to pick one holding
      session by accident — whichever sorted last by name — so
      their answer could change when you renamed a session. They
      now let tmux resolve the object, reporting the session tmux
      itself would act on, and give Window.window_index the index
      tmux would choose for a window linked twice. For the ordinary
      single-session window, nothing changes; the lookups also got
      cheaper. See winlinks.
      https://libtmux.git-pull.com/topics/filtering/#winlinks
    * Lookups that say what happened
      QueryList.get() now names both the lookup and its outcome. A
      missing pane_id="%99" raises ObjectDoesNotExist with No
      objects found: pane_id='%99'; two matches for pane_id="%0"
      raise MultipleObjectsReturned with Multiple objects returned
      (2): pane_id='%0'.
    * Breaking change: query errors join the LibTmuxException
      hierarchy
      libtmux.exc.ObjectDoesNotExist and
      libtmux.exc.MultipleObjectsReturned now subclass
      libtmux.exc.LibTmuxException. Because TmuxObjectDoesNotExist
      inherits from ObjectDoesNotExist, it now falls under
      LibTmuxException too.
      If you catch both families, order the handlers from most
      specific to most general so the broad clause no longer
      intercepts lookup outcomes:
      from libtmux import exc
      try:
      pane = server.panes.get(pane_id="%0")
      except exc.ObjectDoesNotExist:   # specific first
      pane = None
      except exc.LibTmuxException:     # general last
      pane = None
      Blanket retry policies for LibTmuxException should now
      exclude ObjectDoesNotExist and MultipleObjectsReturned — they
      report deterministic missing or ambiguous lookups, not
      transient tmux failures. See the migration notes for a retry
      predicate example.
    * What's Changed
    - Correct AGENTS.md fixture guidance by @tony in #708
    - fix(Pane,Window): Resolve point lookups through tmux by @tony
      in #713
    - feat(Server,Session,Window,Pane): Resolve the pane you run
      inside (from_env) by @tony in #714
    - Resolve winlinks: the right window index, and lookups that
      say what happened by @tony in #718
* Mon Jul 06 2026 Johannes Kastl <opensuse_buildservice@ojkastl.de>
  - update to 0.61.0:
    libtmux 0.61.0 hardens support for the tmux 3.7 patch line. It
    fixes Pane.break_pane() naming broken-out windows libtmux instead
    of tmux's own default on tmux 3.7a/3.7b, and adds
    get_version_str() for reading the raw tmux version with its
    point-release suffix intact.
    * Highlights
    - Fix — break_pane() keeps tmux's default window name on
      3.7a/3.7b (#699). Breaking a pane into a new window without
      an explicit window_name left it named libtmux on tmux
      3.7a/3.7b; it now keeps tmux's own default (typically the
      running command). Passing window_name is unaffected.
    - New — get_version_str() (#699).
      libtmux.common.get_version_str() returns the running tmux
      version verbatim, keeping the point-release suffix ("3.7a")
      that get_version() strips for numeric comparison — useful for
      telling patch releases apart, e.g. 3.7 from 3.7a.
    - tmux 3.7a/3.7b test compatibility (#698). The test suite now
      passes against tmux 3.7a and 3.7b, which CI also exercises.
    * What's Changed
    - docs: lead topic pages with the concept, add docs voice guide
      by @tony in #696
    - Fix window-name test for tmux 3.7a/3.7b and add them to CI by
      @tony in #698
    - Fix break_pane forcing 'libtmux' window name on tmux
      3.7a/3.7b by @tony in #699
* Wed Jul 01 2026 Johannes Kastl <opensuse_buildservice@ojkastl.de>
  - update to 0.60.0:
    libtmux 0.60.0 completes tmux 3.7 feature parity. Building on the
    3.7 compatibility shipped in 0.59.0, it adds first-class floating
    panes via Pane.new_pane() and Window.new_pane(), types tmux 3.7's
    new server, session, window, and pane options, exposes the new
    pane format variables on Pane, and wraps tmux 3.7's new command
    flags. Every 3.7-only surface is version-gated, so tmux 3.2a–3.6
    keep working unchanged.
    * What's new
    - Floating panes (new-pane) (#694)
      tmux 3.7's flagship feature is now reachable through
      Window.new_pane() and Pane.new_pane(). A floating pane sits
      above the tiled layout like a popup but behaves like a real
      pane. Pass width/height to size it and x/y to position it,
      alongside the usual shell, start_directory, environment,
      zoom, and empty, plus style, active_border_style,
      inactive_border_style, message, and keep (remain-on-exit).
      The returned Pane reports pane_floating_flag == "1". Requires
      tmux 3.7+; see the floating panes guide.
    - Typed tmux 3.7 options (#694)
      The option dataclasses now type tmux 3.7's new options. On
      the server, get-clipboard; on the session,
      focus-follows-mouse, message-format, and
      prompt-command-cursor-style; and on the window, the copy-mode
      line-number options, the tree-mode preview options, and the
      window-pane status formats (of these,
      tree-mode-preview-format is also pane-scoped). The pane
      remain-on-exit option gained tmux 3.7's key value, and
      pane-active-border-style / pane-border-style (widened to pane
      scope in 3.7) now type on the pane too.
    - tmux 3.7 pane format variables (#694)
      Pane now exposes tmux 3.7's new pane format variables: the
      floating-pane geometry and flags (pane_floating_flag, pane_x,
      pane_y, pane_z, pane_flags, pane_zoomed_flag), the OSC 9;4
      progress report (pane_pb_progress, pane_pb_state),
      pane_pipe_pid, and the bracket_paste_flag and
      synchronized_output_flag screen-mode flags. Each is
      version-gated, so the format template stays clean on tmux
      3.2a–3.6.
    - tmux 3.7 command flags (#694)
      New tmux 3.7 flags are exposed on existing wrappers:
      Pane.capture_pane() gains hyperlinks (-H), line_numbers (-L),
      and line_flags (-F); Window.split() / Pane.split() gain empty
      (-E) plus style/active_border_style/inactive_border_style
      (-s/-S/-R), message (-m), and keep (-k); Session.kill() gains
      group (-g); and Pane.paste_buffer() gains no_vis (-S). On the
      server, Server.command_prompt() gains no_freeze (-C),
      Server.list_keys() gains format_ (-F), Server.run_shell()
      accepts trailing args expanded as #{1}/#{2}, and
      Server.refresh_client() gains request_clipboard (-l). Each
      warns and is ignored on tmux < 3.7.
    * Compatibility
      Purely additive — no breaking changes. New 3.7 parameters are
      gated on tmux's reported version; unsupported flags warn and
      are ignored on older tmux, and floating-pane creation raises
      there because new-pane does not exist before 3.7. tmux 3.2a–3.6
      remain supported and tested.
    * What's Changed
    - Add tmux 3.7 feature parity: floating panes, options, formats
      by @tony in #694
  - update to 0.59.0:
    * Restore compatibility with tmux 3.7 by @tony in #693
* Thu Jun 18 2026 Johannes Kastl <opensuse_buildservice@ojkastl.de>
  - update to 0.58.1:
    libtmux 0.58.1 restores compatibility with pytest 9.1. libtmux's
    bundled pytest plugin no longer aborts at import time, so
    projects that rely on libtmux's fixtures can move to the latest
    pytest without their test suite failing before collection.
    pytest 9.1 rejects marks applied to fixture functions during
    plugin import — before collection begins. Because the plugin
    ships as an installed entry point, this aborted the entire test
    session for any downstream project that has libtmux installed
    (for example, tmuxp). The fix removes a no-op skipif mark from
    the zshrc fixture; the real zsh handling lives in conftest.py and
    is unchanged, so behavior is identical for zsh and non-zsh users.
    This is a bug-fix-only patch release, per libtmux's pre-1.0
    version policy (patch = bug fixes; minor = features/breaking
    changes).
    See the CHANGES entry for full details.
    - Fix pytest 9.1 fixture-mark import failure by @tony in #687
* Fri May 29 2026 Johannes Kastl <opensuse_buildservice@ojkastl.de>
  - update to 0.58.0:
    libtmux 0.58.0 fixes subprocess output decoding on non-UTF-8
    locales. Both tmux_cmd and ControlMode now enforce UTF-8 when
    reading tmux output, matching tmux's own encoding contract.
    * Fixes
    - Subprocess encoding on non-UTF-8 locales (#679)
      tmux_cmd and ControlMode now pass encoding="utf-8" to
      subprocess.Popen, ensuring tmux output is decoded correctly
      regardless of the system locale. Previously, on non-UTF-8
      locales, the FORMAT_SEPARATOR character (U+241E) was
      corrupted during decoding, causing list accessors
      (Server.sessions, etc.) to return empty results.
* Tue May 19 2026 Johannes Kastl <opensuse_buildservice@ojkastl.de>
  - update to 0.57.1:
    * libtmux 0.57.1 restores the lenient-by-default behavior for
      Server.sessions and Server.clients. Both accessors return an
      empty QueryList on tmux failure (socket permission errors,
      subprocess crashes, missing daemon) again, matching the
      contract Server.sessions has carried since 0.17.0.
      Code written for 0.57.0 with try/except LibTmuxException around
      these accessors keeps working — the except clause just becomes
      unreachable. For an explicit connectivity signal, use
      Server.is_alive() or Server.raise_if_dead().
      Server.search_sessions, Server.search_windows, and
      Server.search_panes continue to raise — they take a
      caller-supplied filter where a tmux error carries meaningful
      signal.
      See the CHANGES entry for full details.
    - Server(fix[sessions,clients]): Return empty on tmux errors by
      @tony in #677
* Mon May 18 2026 Johannes Kastl <opensuse_buildservice@ojkastl.de>
  - update to 0.57.0:
    libtmux 0.57.0 broadens tmux support around attached clients,
    tmux-native filtering, and format-token fields. Client gives
    callers a typed object for attached terminals, search_*() methods
    let tmux return only matching sessions, windows, and panes, and
    more tmux format tokens are exposed as typed attributes.
    LibTmuxException now records which tmux subcommand failed, making
    command errors easier to handle downstream.
    Full release notes: https://libtmux.git-pull.com/history.html#libtmux-0-57-0-2026-05-17
    * Breaking changes
    - LibTmuxException string form gains a subcommand prefix
      When LibTmuxException is raised from a libtmux method,
      str(exc) now begins with the originating tmux subcommand name
      followed by ": ". An error from Session.last_window() used to
      render as "can't find window" and now renders as
      "last-window: can't find window".
      exc.args[0] still carries the original tmux error text, and
      the new LibTmuxException.subcommand attribute exposes the
      tmux subcommand name as a separate field.
      The error-payload type also changed: exc.args[0] is now str,
      joined with "\n" when tmux emitted multiple stderr lines.
      Previously it was list[str]. Code that pattern-matches on
      str(exc) exactly, anchors a regex with ^ against the old
      shape, or indexes exc.args[0] element-by-element will no
      longer match. Substring matches ("can't find" in str(exc))
      and unanchored re.search patterns continue to work unchanged.
      See the migration guide for the upgrade pattern.
      https://libtmux.git-pull.com/migration.html#libtmux-0-57-0-subcommand-tagged-exceptions-672
    - Server.sessions, Server.clients, Server.search_sessions raise
      on tmux errors
      Previously, a tmux command failure under these accessors
      could return an empty QueryList indistinguishable from "no
      sessions / no clients attached" or "filter matched nothing".
      They now let LibTmuxException propagate for real tmux
      failures.
      Genuine empty results — a server with no attached clients, or
      a filter that matched zero sessions — still return an empty
      QueryList. A missing or not-yet-started tmux server is also
      still treated as an empty result, preserving the historic
      contract that a fresh Server can be safely introspected
      before its daemon is up. Other tmux errors, such as socket
      permission failures or unsupported flags, now surface.
    * What's new
    - Client object and Server.clients accessor. New typed
      dataclass for tmux's attached-client model. client_name is
      the stable identifier; attached_session / attached_window /
      attached_pane re-read list-clients before resolving.
      attached_pane follows the attached session's current window —
      that can differ from the per-client active pane set by
      select-pane -P.
    - Server.display_message and Window.display_message. Server
      reads like #{version} and #{socket_path} work without a pane
      handle; window reads (#{window_zoomed_flag},
      [#]{window_active_clients_list}) auto-bind to the window's id.
      All three display_message wrappers (including the existing
      Pane.display_message) surface tmux stderr via warnings.warn
      rather than dropping it silently.
    - tmux-native filtering with search_*(). Server.search_panes /
      search_windows / search_sessions plus the Session and Window
      analogues take a filter= kwarg routed to tmux's -f flag. tmux
      evaluates the expression and returns only matching objects.
      Caveat: tmux silently expands a malformed expression to
      empty, which it treats as false — a typo looks identical to
      "no matches".
    - Pane.send_keys(cmd=None, …) flag-only invocation. Pass
      cmd=None together with reset=True or repeat=N to invoke
      tmux's flag-only send-keys -R / send-keys -N <n> form without
      any trailing key argument.
    - Server.list_buffers(format_string=, filter=). Project a
      chosen -F template or push a buffer-name match expression
      through tmux's format engine — same bad-filter caveat as the
      search_* methods.
    - Server.run_shell(cwd=, show_stderr=). New kwargs map to
      tmux's -c (3.4+) and -E (3.6+) flags. Older tmux warns and
      ignores the kwarg instead of erroring.
    - Pane.capture_pane(pending=True). Return bytes tmux has read
      from the pane but not yet committed to the terminal — useful
      for diagnosing programs whose output stalls mid-sequence.
    - More format-token fields on tmux objects. Pane / Window /
      Session / Client expose more typed attributes for pane state
      (pane_dead, pane_in_mode, pane_marked, pane_synchronized,
      pane_path, pane_pipe), window state (window_zoomed_flag,
      window_silence_flag, window_flags), session state
      (session_marked), and client state (client_session,
      client_readonly, client_termtype). Tokens the running tmux
      does not support stay None instead of making the listing
      fail.
    * Fixes
    - Pane.reset() now clears pane scrollback. In 0.56.0 the
      history clear silently no-op'd, leaving the scrollback intact
      (#650).
    * Documentation
    - New API page: libtmux.client.
    - New Format-Token Fields topic explains why some fields
      describe an active child object — for example,
      session.pane_id reflects the active pane in the session's
      current window.
* Sun May 10 2026 Johannes Kastl <opensuse_buildservice@ojkastl.de>
  - update to 0.56.0:
    The tmux command parity release. ~50 new public methods land
    across Server, Pane, Window, and Session, plus expanded flag
    coverage on existing wrappers, plus a control_mode test fixture
    that lets commands requiring an attached client run under CI
    without a TTY. Net result: callers no longer need to drop down to
    Server.cmd(...) for the commands tmux ships out of the box.
    No breaking changes — public API is purely additive.
    * Highlights
    - Interactive tmux commands now scriptable
      New wrappers for commands that require an attached client:
      Pane.display_popup, Pane.display_panes
      Pane.choose_buffer, Pane.choose_client, Pane.choose_tree
      Server.display_menu, Server.command_prompt,
      Server.confirm_before Session.detach_client,
      Server.detach_client, Server.detach_all_clients
      The three detach-client wrappers each map to one tmux flag
      group exactly, with a single subprocess call
      (Details see
      https://github.com/tmux-python/libtmux/releases/tag/v0.56.0)
    - tmux buffer I/O suite
      Round-trip pane content through named tmux buffers — useful
      for clipboard interop and inter-process data hand-off:
      Server.set_buffer, Server.show_buffer, Server.delete_buffer
      Server.save_buffer, Server.load_buffer, Server.list_buffers
      Pane.paste_buffer
    - Key bindings, shell execution, and client management
      Server:
      bind_key, unbind_key, list_keys, list_commands,
      run_shell, if_shell, source_file, list_clients,
      start_server, lock_server, lock_client, refresh_client,
      suspend_client, server_access, show_messages,
      show_prompt_history, clear_prompt_history
      Session: lock_session
      Pane: send_prefix
    - Window and pane manipulation parity
      Window:
      swap, link, unlink, respawn, last_pane, next_layout,
      previous_layout, rotate
      Pane:
      swap, join, break_pane, move, pipe, clear_history,
      respawn, copy_mode, clock_mode, customize_mode,
      find_window
      Server: wait_for
      Session: last_window, next_window, previous_window
    - Filled-in flag coverage on existing methods
      Most pre-existing wrappers now expose the remaining tmux
      flags:
    - Pane.send_keys — literal, hex_keys, key_name,
      expand_formats, target_client, repeat, reset, copy_mode_cmd
    - Pane.split — percentage=
    - Pane.capture_pane — alternate_screen, quiet, mode_screen,
      to_buffer (writes capture into a tmux buffer instead of
      returning it)
    - Pane.display_message — format_string, verbose, delay,
      notify, update_pane, target_client
    - Pane.display_popup — target_client=, -c
    - Window.move_window — after, before, kill, renumber
    - Window.select_layout — spread, next, previous
    - Server.new_session — detach_others, no_size, config
    - Session.new_window — kill_existing, select_existing
    - EnvironmentMixin.set_environment — expand_format, hidden
    - OptionsMixin.show_options — quiet
    - control_mode pytest fixture
      A new fixture spawns a real tmux -C attach-session subprocess
      that registers as a real client, satisfying commands like
      Pane.display_popup, Session.detach_client,
      Server.command_prompt, and Server.confirm_before — no TTY
      required. Exposed via libtmux.pytest_plugin and into the
      doctest namespace via conftest.py.
      (Code example see
      https://github.com/tmux-python/libtmux/releases/tag/v0.56.0)
    * Bug fixes
    - Window.move_window() returns up-to-date state after the move.
      Previously left the Window object pointing at its pre-move
      index, so attribute reads could appear stale until a manual
      refresh() call. The moved window now refreshes automatically.
    - Pane.swap makes target optional when move_up/move_down is
      set, since tmux's swap-pane -U/-D already imply the target.
    - OptionsMixin.show_options wires quiet= through the public
      API, fixing a flag that was previously inert.
    - Window.last_pane calls tmux last-pane directly instead of
      select-pane -l, exposing its native flags (disable_input=-d,
      enable_input=-e, keep_zoom=-Z) with correct mappings per
      cmd-select-pane.c.
    * Compatibility
    - TMUX_MAX_VERSION bumped 3.6 → 3.7, unlocking method coverage
      already version-gated for tmux 3.7 — notably
      Server.command_prompt(bspace_exit=...) and
      Server.show_messages(terminals=..., jobs=...). No effect on
      installations running tmux 3.6 or earlier.
    - Every version-gated flag uses has_gte_version(...) with a
      warnings.warn(stacklevel=2) fallback when the running tmux is
      too old, matching the existing trim_trailing pattern.
    - All new methods and parameters are annotated with ..
      versionadded:: 0.56 so downstream readers can see
      availability at a glance.
    * Documentation
    - Bumped gp-sphinx docs stack to v0.0.1a16 — docs site now
      renders via gp-furo-theme, a Tailwind v4 respin of Furo, with
      sphinx-vite-builder handling theme-asset builds (#666).
    * Tests
    - test_no_server_* and test_raise_if_dead_no_server_raises now
      reuse the server fixture for a unique socket name and
      finalizer cleanup, instead of hardcoded socket names with no
      finalizer that broke whenever a stale tmux daemon survived at
      the same path (#665, fixes #664).
    * What's Changed
    - test_server(fix[isolation]): use server fixture for "no
      server" tests by @tony in #665
    - Bump gp-sphinx → 0.0.1a16 (sphinx-vite-builder consolidation)
      by @tony in #666
    - tmux parity: add interactive command coverage and align flag
      semantics with tmux by @tony in #653
* Wed Apr 22 2026 Johannes Kastl <opensuse_buildservice@ojkastl.de>
  - update to 0.55.1:
    A point release focused on a pytest-plugin cleanup fix, a new
    Sphinx extension for documenting pytest fixtures, and a
    docs-stack migration to gp-sphinx.
    Highlights
    * Fix: pytest_plugin leaks tmux socket files on teardown (#661, fixes #660)
      The server and TestServer fixtures now unlink(2) the tmux
      socket from /tmp/tmux-<uid>/ during teardown, in addition to
      calling server.kill(). tmux does not reliably remove its own
      socket on non-graceful exit, so /tmp/tmux-<uid>/ would
      accumulate stale libtmux_test* entries across runs — 10k+
      observed on long-lived dev machines.
      A new internal '_reap_test_server' helper centralizes the kill
      + unlink flow and suppresses cleanup-time errors, so a
      finalizer failure can no longer mask the real test failure.
      If you use libtmux's pytest plugin in CI or locally, upgrade to
      stop the leak.
    * New: Sphinx extension for pytest fixture documentation (#656)
      A new Sphinx extension (docs/_ext/sphinx_pytest_fixtures.py)
      renders pytest fixtures as first-class API documentation with
      scope/kind/factory badges, cross-referenced dependencies, and
      auto-generated usage snippets.
    - .. autofixture:: — autodoc-style documenter for individual
      fixtures
    - .. autofixtures:: — bulk discovery and rendering from a
      module
    - .. autofixture-index:: — auto-generated index table with
      linked return types (via intersphinx) and parsed RST
      descriptions
    - :fixture: cross-reference role with short-name resolution
    - Scope, kind, and autouse badges with touch-accessible
      tooltips
    - Responsive layout (mobile metadata stacking, badge font
      scaling, scroll wrappers)
    - WCAG AA contrast compliance in both light and dark mode
    - 109 tests (unit + integration)
      Also fixes an inaccurate session_params fixture docstring
      surfaced by the new extension.
    * Documentation
    - Docs restructured to the Library Skeleton pattern (#652)
    - Self-hosted fonts, eliminated layout shift, added SPA-style
      navigation (#643)
    - Standardized shell code-block formatting across all docs
      (#644)
    - Migrated the docs stack to gp-sphinx workspace packages
      (#657)
    - Visual improvements to API docs via gp-sphinx (#658)
    - Bumped gp-sphinx to v0.0.1a8 (#659); subsequent bump to
      v0.0.1a9 on master
    * Development
    - Added types-docutils to dev dependencies for mypy type
      checking (#656)
    * What's Changed
    - docs: self-host fonts, eliminate layout shift, add SPA
      navigation by @tony in #643
    - docs(style[shell]): Standardize shell code blocks by @tony in
      [#644]
    - docs(redesign): restructure documentation to Library Skeleton
      pattern by @tony in #652
    - feat(_ext[sphinx_pytest_fixtures]): Sphinx extension for
      pytest fixture documentation by @tony in #656
    - docs: Migrate to gp-sphinx workspace packages by @tony in
      [#657]
    - docs(feat[api-style]): Visual improvements to API docs via
      gp-sphinx by @tony in #658
    - chore(docs): adopt gp-sphinx v0.0.1a8 by @tony in #659
    - fix(pytest_plugin): unlink socket file on fixture teardown by
      @tony in #661
* Mon Mar 09 2026 Johannes Kastl <opensuse_buildservice@ojkastl.de>
  - update to 0.55.0:
    * Pane.set_title()
    - New Pane.set_title() method wraps select-pane -T and returns
      the pane for method chaining. A Pane.title property aliases
      pane_title for convenience:
      pane.set_title("my-worker")
      pane.pane_title  # 'my-worker'
      pane.title       # 'my-worker'
      The pane_title format variable is now included in libtmux's
      pane format queries (it was previously excluded via an
      incorrect "removed in 3.1+" comment).
    * Configurable tmux binary path
    - Server now accepts a tmux_bin parameter to use an alternative
      binary (e.g. wemux, byobu, or a custom build):
      server = Server(socket_name="myserver", tmux_bin="/usr/local/bin/tmux-next")
      The path is threaded through Server.cmd(),
      Server.raise_if_dead(), fetch_objs(), all version-check
      functions (has_version, has_gte_version, etc.), and hook
      scope guards in HooksMixin. Child objects (Session, Window,
      Pane) inherit it automatically. Falls back to
      shutil.which("tmux") when not set.
    * Pre-execution command logging
    - tmux_cmd now emits a structured DEBUG log record with
      extra={"tmux_cmd": ...} before invoking the subprocess, using
      shlex.join for POSIX-correct quoting. This complements the
      existing post-execution stdout log and is a prerequisite for
      a future dry-run mode.
    * Bug fix: TmuxCommandNotFound raised for invalid tmux_bin path
    - Passing a non-existent binary path previously surfaced as a
      raw FileNotFoundError from subprocess. Both tmux_cmd and
      raise_if_dead now catch FileNotFoundError and raise
      TmuxCommandNotFound consistently.
  - update to 0.54.0:
    * Highlights
    - Structured lifecycle logging across Server, Session, Window,
      and Pane with filterable extra context
    - Bug fixes for rename_window(), Server.kill(), new_session(),
      and kill_window() error handling
    * Structured lifecycle logging (#637)
    - All lifecycle operations (create, kill, rename, split) now
      emit INFO-level log records with structured extra context.
      Every log call includes scalar keys for filtering in log
      aggregators and test assertions via caplog.records:
      Key               Type  Context
      tmux_subcommand   str   tmux subcommand (e.g. new-session)
      tmux_target       str   tmux target specifier
      tmux_session      str   session name
      tmux_window       str   window name or index
      tmux_pane         str   pane identifier
    * Logging hygiene improvements:
    - NullHandler added to library __init__.py per Python logging
      best practices
    - DEBUG-level structured logs for tmux_cmd execution with
      isEnabledFor guards and heavy keys (tmux_stdout, tmux_stderr,
      tmux_stdout_len, tmux_stderr_len)
    - Lazy formatting: replaced f-string log formatting with %s
      throughout
    - Diagnostics: replaced traceback.print_stack() with
      logger.debug(exc_info=True)
    - Options warnings: replaced logger.exception() with
      logger.warning() and tmux_option_key structured context for
      recoverable parse failures
    - Cleanup: removed unused logger definitions from modules that
      don't log
    * Bug fixes
    - Window.rename_window() now raises on failure (#637)
      Previously rename_window() caught all exceptions and logged
      them, masking tmux errors. It now propagates the error,
      consistent with all other command methods.
    - Server.kill() captures stderr (#637)
      Server.kill() previously discarded the tmux return value. It
      now checks stderr, raises on unexpected errors, and silently
      returns for expected conditions ("no server running", "error
      connecting to").
    - Server.new_session() checks kill-session stderr (#637)
      When kill_session=True and the existing session kill fails,
      new_session() now raises LibTmuxException with the stderr
      instead of proceeding silently.
    - Session.kill_window() target formatting fix (#637)
      Fixed self.window_name (wrong attribute) to self.session_name
      when formatting tmux targets for integer target_window
      values. Also widened the type signature from str | None to
      str | int | None to match the existing
      isinstance(target_window, int) branch.
* Thu Feb 19 2026 Johannes Kastl <opensuse_buildservice@ojkastl.de>
  - update to 0.53.1:
    * Bug fixes
    - Fix race condition in new_session() by avoiding list-sessions
      query by @neubig in #625
    * Development
    - build: Migrate from Makefile to justfile by @tony in #617
* Mon Dec 15 2025 Johannes Kastl <opensuse_buildservice@ojkastl.de>
  - update to 0.53.0:
    * Highlights
    - Fixed: Session.attach() no longer raises
      TmuxObjectDoesNotExist when a user kills the session during
      attachment
    - Breaking: Session.attach() no longer calls refresh() after
      returning (semantically incorrect for interactive commands)
    * Bug Fixes
    - Session.attach() no longer fails if session killed during
      attachment (#616)
      Fixed an issue where Session.attach() would raise
      TmuxObjectDoesNotExist when a user:
    - Attaches to a tmux session via tmuxp load
    - Works in the session
    - Kills the session (e.g., closes all windows) before
      detaching
    - Detaches from tmux
      User Experience (Before Fix)
      After running tmuxp load, users would see this traceback
      printed to their terminal after detaching:
      Traceback (most recent call last):
      File "~/.local/bin/tmuxp", line 7, in <module>
      sys.exit(cli.cli())
      ...
      File ".../libtmux/session.py", line 332, in attach
      self.refresh()
      File ".../libtmux/neo.py", line 167, in _refresh
      obj = fetch_obj(...)
      File ".../libtmux/neo.py", line 242, in fetch_obj
      raise exc.TmuxObjectDoesNotExist(...)
      libtmux.exc.TmuxObjectDoesNotExist: Could not find object
      Root Cause
      Session.attach() called self.refresh() after the
      attach-session command returned. Since attach-session is a
      blocking interactive command, the session state can change
      arbitrarily during attachment—including being killed
      entirely.
      Technical Details
      The refresh() call was semantically incorrect for interactive
      commands:
    - attach-session blocks until user detaches
    - Session state can change during attachment (user may kill
      session, rename it, etc.)
    - Refreshing the object after such a command makes no
      sense—the state could be anything
      The fix: Remove the self.refresh() call from Session.attach()
      (2 lines removed).
    * Breaking Changes
    - Session.attach() no longer calls refresh() (#616)
      Session.attach() previously called Session.refresh() after
      the attach-session command returned. This was semantically
      incorrect since attach-session is a blocking interactive
      command where session state can change arbitrarily during
      attachment.
      This was never strictly defined behavior as libtmux abstracts
      tmux internals away. Code that relied on the session object
      being refreshed after attach() should explicitly call
      session.refresh() if needed.
      Migration
      [#] If you relied on the implicit refresh (unlikely):
      session.attach()
      session.refresh()  # Now explicit if you need it
      Timeline
      Date      Event
      Feb 2024  Session.attach() added with refresh() call (9a5147a)
      Nov 2025  tmuxp switched from attach_session() to attach() (fdafdd2b)
      Dec 2025  Users started experiencing the bug
      Dec 2025  v0.53.0 released with fix
    * What's Changed
    - fix(Session.attach()): Remove refresh() call that fails after
      session killed by @tony in #616
* Tue Dec 09 2025 Johannes Kastl <opensuse_buildservice@ojkastl.de>
  - update to 0.52.1:
    * Development
    - ci(release): Migrate to PyPI Trusted Publisher by @tony in #615
  - update to 0.52.0:
    * capture_pane() enhancements
    - The Pane.capture_pane() method now supports 5 new parameters
      exposing additional tmux capture-pane flags:
      Parameter             tmux Flag Description
      escape_sequences      -e        Include ANSI escape sequences (colors, attributes)
      escape_non_printable  -C        Escape non-printable chars as octal \xxx
      join_wrapped          -J        Join wrapped lines back together
      preserve_trailing     -N        Preserve trailing spaces at line ends
      trim_trailing         -T        Trim trailing empty positions (tmux 3.4+)
      Examples
      Capturing colored output:
      [#] Capture with ANSI escape sequences preserved
      pane.send_keys('printf "\\033[31mRED\\033[0m"', enter=True)
      output = pane.capture_pane(escape_sequences=True)
      [#] Output contains: '\x1b[31mRED\x1b[0m'
      Joining wrapped lines:
      [#] Long lines that wrap are joined back together
      output = pane.capture_pane(join_wrapped=True)
    - Version compatibility
      The trim_trailing parameter requires tmux 3.4+. If used
      with an older version, a warning is issued and the flag is
      ignored. All other parameters work with libtmux's minimum
      supported version (tmux 3.2a).
    * What's Changed
    - Capture pane updates by @tony in #614
  - update to 0.51.0:
    * Breaking Changes
    - Deprecate legacy APIs
      Legacy API methods (deprecated in v0.16–v0.33) now raise
      DeprecatedError (hard error) instead of emitting
      DeprecationWarning.
      See the migration guide for full context and examples.
    - Deprecate legacy APIs (raise DeprecatedError) by @tony in
      [#611]
      Method Renamings
      Deprecated        Replacement   Class   Deprecated Since
      kill_server()     kill()        Server  0.30.0
      attach_session()  attach()      Session 0.30.0
      kill_session()    kill()        Session 0.30.0
      select_window()   select()      Window  0.30.0
      kill_window()     kill()        Window  0.30.0
      split_window()    split()       Window  0.33.0
      select_pane()     select()      Pane    0.30.0
      resize_pane()     resize()      Pane    0.28.0
      split_window()    split()       Pane    0.33.0
      Property Renamings
      Deprecated        Replacement   Class   Deprecated Since
      attached_window   active_window Session 0.31.0
      attached_pane     active_pane   Session 0.31.0
      attached_pane     active_pane   Window  0.31.0
      Query/Filter API Changes
      Deprecated                            Replacement         Class   Deprecated Since
      list_sessions() / '_list_sessions(')  sessions property   Server  0.17.0
      list_windows() / '_list_windows()'    windows property    Session   0.17.0
      list_panes() / '_list_panes()'        panes property      Window  0.17.0
      where({...})                          .filter(**kwargs) on sessions/windows/panes   All   0.17.0
      find_where({...})                     .get(default=None, **kwargs) on sessions/windows/panes  All   0.17.0
      get_by_id(id)                         .get(session_id/window_id/pane_id=..., default=None)  All   0.16.0
      children property                     sessions/windows/panes  All   0.17.0
      Attribute Access Changes
      Deprecated            Replacement               Deprecated Since
      obj['key']            obj.key                   0.17.0
      obj.get('key')        obj.key                   0.17.0
      obj.get('key', None)  getattr(obj, 'key', None) 0.17.0
      Still Soft Deprecations (DeprecationWarning)
      The following deprecations from v0.50.0 continue to emit DeprecationWarning only:
      Deprecated            Replacement         Class
      set_window_option()   set_option()        Window
      show_window_option()  show_option()       Window
      show_window_options() show_options()      Window
      g parameter           global_ parameter   Options & hooks methods
      Migration Example
      Before (deprecated, now raises DeprecatedError):
      [#] Old method names
      server.kill_server()
      session.attach_session()
      window.split_window()
      pane.resize_pane()
      [#] Old query API
      server.list_sessions()
      session.find_where({'window_name': 'main'})
      [#] Old dict-style access
      window['window_name']
      After:
      [#] New method names
      server.kill()
      session.attach()
      window.split()
      pane.resize()
      [#] New query API
      server.sessions
      session.windows.get(window_name='main', default=None)
      [#] New attribute access
      window.window_name
  - update to 0.50.1:
    * Documentation
    - Doc fixes by @tony in #612
* Fri Dec 05 2025 Johannes Kastl <opensuse_buildservice@ojkastl.de>
  - update to 0.50.0:
    libtmux 0.50 brings a major enhancement to option and hook management with a unified, typed API for managing tmux options and hooks across all object types.
    * Highlights
    - Unified Options API: New show_option(), show_options(), set_option(), and unset_option() methods available on Server, Session, Window, and Pane
    - Hook Management: Full programmatic control over tmux hooks with support for indexed hook arrays and bulk operations
    - SparseArray: New internal data structure for handling tmux's sparse indexed arrays (e.g., command-alias[0], command-alias[99])
    - tmux 3.2+ baseline: Removed support for tmux versions below 3.2a, enabling cleaner code and full hook/option feature support
    * Unified Options API
      All tmux objects now share a consistent options interface:
      import libtmux
      server = libtmux.Server()
      session = server.sessions[0]
      window = session.windows[0]
      [#] Get all options as a structured dict
      session.show_options()
      [#] {'activity-action': 'other', 'base-index': 0, ...}
      [#] Get a single option value
      session.show_option('base-index')
      [#] 0
      [#] Set an option
      window.set_option('automatic-rename', True)
      [#] Unset an option (revert to default)
      window.unset_option('automatic-rename')
    * Hook Management
      Programmatic control over tmux hooks:
      session = server.sessions[0]
      [#] Set a hook
      session.set_hook('session-renamed', 'display-message "Renamed!"')
      [#] Get hook value (returns SparseArray for indexed hooks)
      session.show_hook('session-renamed')
      [#] {0: 'display-message "Renamed!"'}
      [#] Get all hooks
      session.show_hooks()
      [#] Remove a hook
      session.unset_hook('session-renamed')
      [#] Bulk operations for indexed hooks
      session.set_hooks('session-renamed', {
      0: 'display-message "Hook 0"',
      1: 'display-message "Hook 1"',
      5: 'run-shell "echo hook 5"',
      })
    * Breaking Changes
    - Deprecated Window methods
      The following methods are deprecated and will be removed in a
      future release:
      Deprecated                    Replacement
      Window.set_window_option()    Window.set_option()
      Window.show_window_option()   Window.show_option()
      Window.show_window_options()  Window.show_options()
    * Deprecated g parameter
      The g parameter for global options is deprecated in favor of
      global_:
      [#] Before (deprecated)
      session.show_option('status', g=True)
      [#] After (0.50.0+)
      session.show_option('status', global_=True)
    * New Constants
    - OptionScope enum: Server, Session, Window, Pane
    - OPTION_SCOPE_FLAG_MAP: Maps scope to tmux flags (-s, -w, -p)
    - HOOK_SCOPE_FLAG_MAP: Maps scope to hook flags
    * Documentation
    - New topic guide: Options and Hooks
    - New topic guides: Automation patterns, Workspace setup, Pane
      interaction, QueryList filtering
    - Refreshed README with hero section, quickstart, and more
      examples
    * tmux Version Compatibility
      Feature                               Minimum tmux
      All options/hooks features            3.2+
      Window/Pane hook scopes (-w, -p)      3.2+
      client-active, window-resized hooks   3.3+
      pane-title-changed hook               3.5+
    * What's Changed
    - Improved option management, add hook management by @tony in
      [#516]
    - Refresh README by @tony in #609
  - update to 0.49.0:
    * Breaking: tmux <3.2 fully dropped
    - Drop support for tmux versions < 3.2 by @tony in #608
  - update to 0.48.0:
    * Breaking: tmux <3.2 deprecated
    - Deprecate old tmux versions by @tony in #606
    * Development
    - tmux: Add tmux 3.6 to testgrid by @tony in #607
* Sun Nov 02 2025 Johannes Kastl <opensuse_buildservice@ojkastl.de>
  - update to 0.47.0:
    * Breaking changes
    - Support Python 3.14 by @tony in #601
    - Drop Python 3.9 by @tony in #602
* Thu May 29 2025 Johannes Kastl <opensuse_buildservice@ojkastl.de>
  - update to 0.46.2:
    * Fix new_window argument typing in Session by @Data5tream in #596
    - types: Add StrPath typing, fix new_session by @tony in #597
    - types: Add StrPath typing, fix new_session, part 2 by @tony
      in #598
* Sun Mar 16 2025 Johannes Kastl <opensuse_buildservice@ojkastl.de>
  - update to 0.46.1:
    * Documentation
    - Fix typo in Pane.send_keys (#593)
* Wed Feb 26 2025 Johannes Kastl <opensuse_buildservice@ojkastl.de>
  - update to 0.46.0:
    * Breaking Changes
    - Test Helper Imports Refactored: Direct imports from
      libtmux.test are no longer possible. You must now import from
      specific submodules (#580)
      [#] Before:
      from libtmux.test import namer
      [#] After:
      from libtmux.test.named import namer
      [#] Before:
      from libtmux.test import RETRY_INTERVAL_SECONDS
      [#] After:
      from libtmux.test.constants import RETRY_INTERVAL_SECONDS
    * Internal Improvements
    - Enhanced Test Utilities: The EnvironmentVarGuard now handles
      variable cleanup more reliably
    - Comprehensive Test Coverage: Added test suites for constants
      and environment utilities
    - Code Quality: Added proper coverage markers to exclude type
      checking blocks from coverage reports
    - Documentation: Improved docstrings and examples in the random
      module
      These changes improve maintainability of test helpers both
      internally and for downstream packages that depend on libtmux.
    * What's Changed
      Coverage: Test helpers by @tony in #580
* Mon Feb 24 2025 Johannes Kastl <opensuse_buildservice@ojkastl.de>
  - update to 0.45.0:
    * Breaking Changes
    - Test helpers: Refactor by @tony in #578
      Test helper functionality has been split into focused modules
      (#578):
      libtmux.test module split into:
    - libtmux.test.constants: Test-related constants
      (TEST_SESSION_PREFIX, etc.)
    - libtmux.test.environment: Environment variable mocking
    - libtmux.test.random: Random string generation utilities
    - libtmux.test.temporary: Temporary session/window management
    - Breaking: Import paths have changed. Update imports:
      [#] Old (0.44.x and earlier)
      from libtmux.test import (
      TEST_SESSION_PREFIX,
      get_test_session_name,
      get_test_window_name,
      namer,
      temp_session,
      temp_window,
      EnvironmentVarGuard,
      )
      [#] New (0.45.0+)
      from libtmux.test.constants import TEST_SESSION_PREFIX
      from libtmux.test.environment import EnvironmentVarGuard
      from libtmux.test.random import get_test_session_name, get_test_window_name, namer
      from libtmux.test.temporary import temp_session, temp_window
    * Misc
    - Cursor rules: Add Cursor Rules for Development and Git Commit
      Standards by @tony in #575
    * CI
    - tests(ci) Check runtime deps import correctly by @tony in
      [#574]
* Tue Feb 18 2025 Johannes Kastl <opensuse_buildservice@ojkastl.de>
  - update to 0.44.2:
    * Bug fixes
    - fix(typings) Move typing-extensions into TypeGuard by @tony
      in #572
    * Documentation
    - Doc / typos fixes by @tony in #569
    * Development
    - Tests: Improved parametrization by @tony in #570
* Mon Feb 17 2025 Johannes Kastl <opensuse_buildservice@ojkastl.de>
  -update to 0.44.1:
    * types: Only use typing-extensions if necessary by @ppentchev in
      [#563]
* Mon Feb 17 2025 Johannes Kastl <opensuse_buildservice@ojkastl.de>
  - update to 0.44.0:
    * Support for context managers by @tony in #566.
      Added context manager support for all main tmux objects:
    - Server: Automatically kills the server when exiting the
      context
    - Session: Automatically kills the session when exiting the
      context
    - Window: Automatically kills the window when exiting the
      context
    - Pane: Automatically kills the pane when exiting the context
      This makes it easier to write clean, safe code that properly
      cleans up tmux resources.
* Sun Feb 16 2025 Johannes Kastl <opensuse_buildservice@ojkastl.de>
  - update to 0.43.0:
    * New feature
    - TestServer: Server, but partial'd to run on a test socket by
      @tony in #565
    * Documentation
    - Fix "Topics" links in docs
    - docs(traversal) Add more doctests by @tony in #567
  - update to 0.42.1:
    * Packaging: typing-extensions usage
    - Move a typing-extensions import into a t.TYPE_CHECKING
      section by @ppentchev in #562
    - py(deps[testing,lint]) Add typing-extensions for older python
      versions by @tony in #564
* Sat Feb 08 2025 Johannes Kastl <opensuse_buildservice@ojkastl.de>
  - update to 0.42.0:
    * Improvements
    - tmux_cmd: Modernize to use text=True by @tony in #560
      Attempted fix for #558.
* Sat Feb 08 2025 Johannes Kastl <opensuse_buildservice@ojkastl.de>
  - update to 0.41.0:
    * Fixes
    - Fix hardcoded uid in __str__ method of Server class by
      @lazysegtree in #557
    * Development
    - Use future annotations by @tony in #555
    * Documentation
    - Fix docstring for color parameter by @TravisDart in #544
* Fri Dec 27 2024 Johannes Kastl <opensuse_buildservice@ojkastl.de>
  - update to 0.40.1:
    * Bug fixes
    - Fix passing both window command and environment by
      @ppentchev in #553
* Sat Dec 21 2024 Johannes Kastl <opensuse_buildservice@ojkastl.de>
  - update to 0.40.0:
    * Python 3.9 Modernization by @tony in #550
    * test(legacy[session]) Stabilize assertion by @tony in #552
* Wed Nov 27 2024 Johannes Kastl <opensuse_buildservice@ojkastl.de>
  - update to 0.39.0:
    * Drop Python 3.8 by @tony in #548
      Python 3.8 reached end-of-life on October 7th, 2024 (see
      devguide.python.org, Status of Python Versions, Unsupported
      versions
      See also:
      https://devguide.python.org/versions/#unsupported-versions
* Wed Nov 27 2024 Johannes Kastl <opensuse_buildservice@ojkastl.de>
  - update to 0.38.1:
    * Minimum Python back to 3.8 for now.
* Wed Nov 27 2024 Johannes Kastl <opensuse_buildservice@ojkastl.de>
  - update to 0.38.0:
    * Development
    - Project and package management: poetry to uv (#547)
      uv is the new package and project manager for the project,
      replacing Poetry.
    - Code quality: Use f-strings in more places (#540)
      via ruff 0.4.2.
    * Documentation
    - [docs] Sphinx v8 compatibility: configure a non-empty
      inventory name for Python Intersphinx mapping. by @jayaddison
      in #542
    - Fix docstrings in query_list for MultipleObjectsReturned and
      ObjectDoesNotExist.
    * Other
    - Bump dev dependencies, including ruff 0.4.2, f-string tweaks
      by @tony in #540
* Tue Apr 23 2024 Johannes Kastl <opensuse_buildservice@ojkastl.de>
  - update to 0.37.0:
    Tests
    * pytest-xdist support in #522
    * test stability improvements in #522
    - retry_until() tests: Relax clock in assert.
    - tests/test_pane.py::test_capture_pane_start: Use
      retry_until() to poll, improve correctness of test.
* Sun Mar 24 2024 Johannes Kastl <opensuse_buildservice@ojkastl.de>
  - update to 0.36.0:
    * Linting: Aggressive ruff pass (ruff v0.3.4) by @tony in #539
* Sun Mar 24 2024 Johannes Kastl <opensuse_buildservice@ojkastl.de>
  - update to 0.35.1:
    * fix: server.attached_sessions by @patrislav1 in #537
    * chore(Server.attached_sessions): Use .filter() by @tony in #538
* Tue Mar 19 2024 Johannes Kastl <opensuse_buildservice@ojkastl.de>
  - update to 0.35.0:
    Breaking changes
    * refactor: Eliminate redundant targets / window_index's across
      codebase by @tony in #536
* Sun Mar 17 2024 Johannes Kastl <opensuse_buildservice@ojkastl.de>
  - update to 0.34.0:
    Breaking changes!
    * Command target change (#535)#
      Commands: All cmd() methods using custom or overridden targets
      must use the keyword argument target. This avoids entanglement
      with inner shell values that include -t for other purposes.
      These methods include:
    - Server.cmd()
    - Session.cmd()
    - Window.cmd()
    - Pane.cmd()
* Sun Mar 17 2024 Johannes Kastl <opensuse_buildservice@ojkastl.de>
  - update to 0.33.0:
    Breaking changes!
    * Improved new sessions (#532)
    - Session.new_window():
    - Learned direction, via 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.
    * Improved window splitting (#532)
    - Window.split_window() to Window.split()
    - Deprecate Window.split_window()
    - Pane.split_window() to Pane.split()
    - Deprecate Pane.split_window()
    - Learned direction, via PaneDirection).
    - Deprecate vertical and horizontal in favor of direction.
    - Learned zoom
    * Tweak: Pane position (#532)
      It's now possible to retrieve the position of a pane in a
      window via a bool helper::
    - Pane.at_left
    - Pane.at_right
    - Pane.at_bottom
    - Pane.at_right
* Sat Mar 16 2024 Johannes Kastl <opensuse_buildservice@ojkastl.de>
  - update to 0.32.0:
    * Fix docstring ordering in pane.split_window by @Ngalstyan4
      in #528
    * Add implicit exports into init.py by @ssbarnea in #531
* Sun Feb 18 2024 Johannes Kastl <opensuse_buildservice@ojkastl.de>
  - update to 0.31.0:
    * Cleanups (#527)
    - Streamline {Server,Session,Window,Pane}.cmd(), across all
      usages to:
    - Use cmd: str as first positional
    - Removed unused keyword arguments **kwargs
    * Renamings (#527)
    - Session.attached_window renamed to Session.active_window()
    - Session.attached_window deprecated
    - Session.attached_pane renamed to Session.active_pane()
    - Session.attached_pane deprecated
    - Window.attached_pane renamed to Window.active_pane()
    - Window.attached_pane deprecated
    * Improvements (#527)
    - Server.attached_windows now users QueryList’s .filter()
* Sun Feb 18 2024 Johannes Kastl <opensuse_buildservice@ojkastl.de>
  - update to 0.30.2:
    * Bump `TMUX_MAX_VERSION` 3.3 -> 3.4
* Sun Feb 18 2024 Johannes Kastl <opensuse_buildservice@ojkastl.de>
  - update to 0.30.1:
    * pytest plugin, test module: Update to renamed methods
      introduced in v0.30.0
* Sun Feb 18 2024 Johannes Kastl <opensuse_buildservice@ojkastl.de>
  - update to 0.30.0:
    * New commands
    - Pane.kill()
    * Renamed commands
    - Window.select_window() renamed to Window.select()
    - Deprecated Window.select_window()
    - Pane.select_pane() renamed to Pane.select()
    - Deprecated Pane.pane_select()
    - Session.attach_session() renamed to Session.attach()
    - Deprecated Session.attach_session()
    - Server.kill_server() renamed to Server.kill()
    - Deprecated Server.kill_server()
    - Session.kill_session() renamed to Session.kill()
    - Deprecated Session.kill_session()
    - Window.kill_window() renamed to Window.kill()
      Deprecated Window.kill_window()
    * Improved commands
    - Server.new_session(): Support environment variables
    - Window.split_window(): Support size via -l
    - Supports columns/rows (size=10) and percentage (size='10%')
* Sun Feb 18 2024 Johannes Kastl <opensuse_buildservice@ojkastl.de>
  - update to 0.29.0:
    * fix(warnings): Use |DeprecationWarning| for APIs being
      deprecated
    * pytest: Ignore |DeprecationWarning| in tests
* Sun Feb 18 2024 Johannes Kastl <opensuse_buildservice@ojkastl.de>
  - update to 0.28.1:
    Maintenance only, no bug fixes or new features
* Thu Feb 15 2024 Johannes Kastl <opensuse_buildservice@ojkastl.de>
  - update to 0.28.0:
    * Breaking changes
    - Session.new_window() + Window.split_window(): No longer
      attaches by default
    - 0.28 +: Now defaults to attach=False.
    - 0.27.1 and before: defaults to attach=True.
      Pass attach=True for the old behavior.
    - Pane.resize_pane() renamed to Pane.resize(): (#523)
      This convention will be more consistent with Window.resize().
    - Pane.resize_pane(): Params changed (#523)
      No longer accepts -U, -D, -L, -R directly, instead accepts
      ResizeAdjustmentDirection.
    * New features
    - Pane.resize(): Improved param coverage (#523)
      Learned to accept adjustments via adjustment_direction w/
      ResizeAdjustmentDirection + adjustment.
      Learned to accept manual height and / or width (columns/rows
      or percentage) Zoom (and unzoom)
    - Window.resize_window(): New Method (#523)
      If Pane.resize_pane() (now Pane.resize()) didn't work before,
      try resizing the window.
    * Bug fixes
    - Window.refresh() and Pane.refresh(): Refresh more underlying
      state (#523)
    - Obj._refresh: Allow passing args (#523)
      e.g. -a (all) to list-panes and list-windows
    - Server.panes: Fix listing of panes (#523)
      Would list only panes in attached session, rather than all in
      a server.
    * Improvements
    - Pane, Window: Improve parsing of option values that return
      numbers
      (#520)
    - Obj._refresh: Allow passing list_extra_args to ensure
      list-windows and list-panes can return more than the target
      (#523)
* Fri Feb 09 2024 Johannes Kastl <opensuse_buildservice@ojkastl.de>
  - ignore some checks again, that seemed fine but are now again
    failing intermittently
* Thu Feb 08 2024 Johannes Kastl <opensuse_buildservice@ojkastl.de>
  - update to 0.27.1:
    * pyproject: Include MIGRATION in sdist by @tony in #517, for
      [#508]
* Thu Feb 08 2024 Johannes Kastl <opensuse_buildservice@ojkastl.de>
  - update to 0.27.0:
    * Improvements
    - QueryList: Generic fixes by @tony in #515
    - This improves the annotations in descendant objects such
      as:
    - Server.sessions
    - Session.windows
    - Window.panes
    - Bolster tests (ported from libvcs): doctests and pytests
* Thu Feb 08 2024 Johannes Kastl <opensuse_buildservice@ojkastl.de>
  - update to 0.26.0:
    * Breaking change
    - get_by_id() (already deprecated) keyword argument renamed
      from id to
    - Server.get_by_id(session_id), Session.get_by_id(window_id),
      and Window.get_by_id(pane_id) (#514)
    * Documentation
    - Various docstring fixes and tweaks (#514)
    * Development
    - Strengthen linting (#514)
    - Add flake8-commas (COM)
    - Add flake8-builtins (A)
    - Add flake8-errmsg (EM)
    * CI
    - Move CodeQL from advanced configuration file to GitHub's
      default
* Mon Nov 27 2023 Johannes Kastl <kastl@b1-systems.de>
  - update to 0.25.0:
    * Comparator fixes
    - Fixed __eq__ for windows. by @m1guelperez in #505
    - fix(pane,session,server): Return False if type mismatched by
      @tony in #510
    * Documentation
    - ruff: Enable pydocstyle w/ numpy convention by @tony in #509
* Fri Nov 24 2023 Johannes Kastl <kastl@b1-systems.de>
  - update to 0.24.1:
    * packaging: Remove requirements/ folder. Unused. by @tony in
      [#507]
    * pyproject: Add gp-libs to test dependency group
* Mon Nov 20 2023 Johannes Kastl <kastl@b1-systems.de>
  - update to 0.24.0:
    * Breaking changes
    - Drop Python 3.7 by @tony in #497
    * Packaging
    - packaging(pytest): Move configuration to pyproject.toml by
      @tony in #499
    - Poetry: 1.5.1 -> 1.6.1 (#497), 1.6.1 -> 1.7.0 (direct to
      trunk)
      See also:
      https://github.com/python-poetry/poetry/blob/1.7.0/CHANGELOG.md
    - Packaging (poetry): Fix development dependencies
      Per Poetry's docs on managing dependencies and poetry check,
      we had it wrong:
      Instead of using extras, we should create these:
      [tool.poetry.group.group-name.dependencies]
      dev-dependency = "1.0.0"
      Which we now do.
    * Development
    - Formatting: black -> ruff format by @tony in #506
    - CI: Update action packages to fix warnings
    - dorny/paths-filter: 2.7.0 -> 2.11.1
    - codecov/codecov-action: 2 -> 3
    * Full Changelog: v0.23.2...v0.24.0
* Mon Sep 11 2023 Johannes Kastl <kastl@b1-systems.de>
  - update to 0.23.2:
    _Maintenance only, no bug fixes or new features_
    Final Python 3.7 Release (End of life was June 27th, 2023)
* Wed Sep 06 2023 Johannes Kastl <kastl@b1-systems.de>
  - update to 0.23.1:
    _Maintenance only, no bug fixes, or new features_
    * Development
    - Automated typo fixes from [typos-cli]:
      ```console
      typos --format brief --write-changes
      ```
      [typos-cli]: https://github.com/crate-ci/typos
    - ruff's linter for code comments, `ERA` (eradicate), has been
      removed
* Wed Sep 06 2023 Johannes Kastl <kastl@b1-systems.de>
  - update to 0.23.0:
    _This maintenance release covers only developer quality of life
    improvements, no bug fixes or new features_
    * Maintenance
    - Stricter code quality rules (via ruff) by @tony in
      https://github.com/tmux-python/libtmux/pull/488
* Wed Sep 06 2023 Johannes Kastl <kastl@b1-systems.de>
  - update to 0.22.2:
    _Maintenance only, no bug fixes or features for this release_
    * Build system
    - ci: Remove setuptools requirement for build-system in
      https://github.com/tmux-python/libtmux/pull/495
* Mon May 29 2023 Johannes Kastl <kastl@b1-systems.de>
  - update to 0.22.1:
    * Add back black dev dependency until `ruff` replaces black's
      formatting
* Sat May 27 2023 Johannes Kastl <kastl@b1-systems.de>
  - update to 0.22.0:
    * Move formatting, import sorting, and linting to ruff.
    * This rust-based checker has dramatically improved performance.
      Linting and formatting can be done almost instantly.
    * This change replaces black, isort, flake8 and flake8 plugins.
* Tue May 16 2023 Johannes Kastl <kastl@b1-systems.de>
  - ignore flaky test test_capture_pane (see
    https://github.com/tmux-python/libtmux/issues/484)
  - ignore flaky test test_new_window_with_environment[environment0]
    (see https://github.com/tmux-python/libtmux/
    issues/480#issuecomment-1551533987)
* Mon May 08 2023 Daniel Garcia <daniel.garcia@suse.com>
  - Depends on poetry-core for building, we don't need the full poetry
    module in this case.
* Fri May 05 2023 Johannes Kastl <kastl@b1-systems.de>
  - add sle15_python_module_pythons
* Thu Apr 06 2023 Johannes Kastl <kastl@b1-systems.de>
  - ignore yet another test:
    test_new_window_with_environment[environment1]
    (reported at https://github.com/tmux-python/libtmux/issues/478)
* Thu Mar 09 2023 Johannes Kastl <kastl@b1-systems.de>
  - new package python-libtmux: Python API / wrapper for tmux

Files

/usr/lib/python3.13/site-packages/libtmux
/usr/lib/python3.13/site-packages/libtmux-0.62.0.dist-info
/usr/lib/python3.13/site-packages/libtmux-0.62.0.dist-info/INSTALLER
/usr/lib/python3.13/site-packages/libtmux-0.62.0.dist-info/METADATA
/usr/lib/python3.13/site-packages/libtmux-0.62.0.dist-info/RECORD
/usr/lib/python3.13/site-packages/libtmux-0.62.0.dist-info/REQUESTED
/usr/lib/python3.13/site-packages/libtmux-0.62.0.dist-info/WHEEL
/usr/lib/python3.13/site-packages/libtmux-0.62.0.dist-info/entry_points.txt
/usr/lib/python3.13/site-packages/libtmux-0.62.0.dist-info/licenses
/usr/lib/python3.13/site-packages/libtmux-0.62.0.dist-info/licenses/LICENSE
/usr/lib/python3.13/site-packages/libtmux/__about__.py
/usr/lib/python3.13/site-packages/libtmux/__init__.py
/usr/lib/python3.13/site-packages/libtmux/__pycache__
/usr/lib/python3.13/site-packages/libtmux/__pycache__/__about__.cpython-313.opt-1.pyc
/usr/lib/python3.13/site-packages/libtmux/__pycache__/__about__.cpython-313.pyc
/usr/lib/python3.13/site-packages/libtmux/__pycache__/__init__.cpython-313.opt-1.pyc
/usr/lib/python3.13/site-packages/libtmux/__pycache__/__init__.cpython-313.pyc
/usr/lib/python3.13/site-packages/libtmux/__pycache__/_compat.cpython-313.opt-1.pyc
/usr/lib/python3.13/site-packages/libtmux/__pycache__/_compat.cpython-313.pyc
/usr/lib/python3.13/site-packages/libtmux/__pycache__/client.cpython-313.opt-1.pyc
/usr/lib/python3.13/site-packages/libtmux/__pycache__/client.cpython-313.pyc
/usr/lib/python3.13/site-packages/libtmux/__pycache__/common.cpython-313.opt-1.pyc
/usr/lib/python3.13/site-packages/libtmux/__pycache__/common.cpython-313.pyc
/usr/lib/python3.13/site-packages/libtmux/__pycache__/constants.cpython-313.opt-1.pyc
/usr/lib/python3.13/site-packages/libtmux/__pycache__/constants.cpython-313.pyc
/usr/lib/python3.13/site-packages/libtmux/__pycache__/exc.cpython-313.opt-1.pyc
/usr/lib/python3.13/site-packages/libtmux/__pycache__/exc.cpython-313.pyc
/usr/lib/python3.13/site-packages/libtmux/__pycache__/formats.cpython-313.opt-1.pyc
/usr/lib/python3.13/site-packages/libtmux/__pycache__/formats.cpython-313.pyc
/usr/lib/python3.13/site-packages/libtmux/__pycache__/hooks.cpython-313.opt-1.pyc
/usr/lib/python3.13/site-packages/libtmux/__pycache__/hooks.cpython-313.pyc
/usr/lib/python3.13/site-packages/libtmux/__pycache__/neo.cpython-313.opt-1.pyc
/usr/lib/python3.13/site-packages/libtmux/__pycache__/neo.cpython-313.pyc
/usr/lib/python3.13/site-packages/libtmux/__pycache__/options.cpython-313.opt-1.pyc
/usr/lib/python3.13/site-packages/libtmux/__pycache__/options.cpython-313.pyc
/usr/lib/python3.13/site-packages/libtmux/__pycache__/pane.cpython-313.opt-1.pyc
/usr/lib/python3.13/site-packages/libtmux/__pycache__/pane.cpython-313.pyc
/usr/lib/python3.13/site-packages/libtmux/__pycache__/pytest_plugin.cpython-313.opt-1.pyc
/usr/lib/python3.13/site-packages/libtmux/__pycache__/pytest_plugin.cpython-313.pyc
/usr/lib/python3.13/site-packages/libtmux/__pycache__/server.cpython-313.opt-1.pyc
/usr/lib/python3.13/site-packages/libtmux/__pycache__/server.cpython-313.pyc
/usr/lib/python3.13/site-packages/libtmux/__pycache__/session.cpython-313.opt-1.pyc
/usr/lib/python3.13/site-packages/libtmux/__pycache__/session.cpython-313.pyc
/usr/lib/python3.13/site-packages/libtmux/__pycache__/window.cpython-313.opt-1.pyc
/usr/lib/python3.13/site-packages/libtmux/__pycache__/window.cpython-313.pyc
/usr/lib/python3.13/site-packages/libtmux/_compat.py
/usr/lib/python3.13/site-packages/libtmux/_internal
/usr/lib/python3.13/site-packages/libtmux/_internal/__init__.py
/usr/lib/python3.13/site-packages/libtmux/_internal/__pycache__
/usr/lib/python3.13/site-packages/libtmux/_internal/__pycache__/__init__.cpython-313.opt-1.pyc
/usr/lib/python3.13/site-packages/libtmux/_internal/__pycache__/__init__.cpython-313.pyc
/usr/lib/python3.13/site-packages/libtmux/_internal/__pycache__/constants.cpython-313.opt-1.pyc
/usr/lib/python3.13/site-packages/libtmux/_internal/__pycache__/constants.cpython-313.pyc
/usr/lib/python3.13/site-packages/libtmux/_internal/__pycache__/control_mode.cpython-313.opt-1.pyc
/usr/lib/python3.13/site-packages/libtmux/_internal/__pycache__/control_mode.cpython-313.pyc
/usr/lib/python3.13/site-packages/libtmux/_internal/__pycache__/dataclasses.cpython-313.opt-1.pyc
/usr/lib/python3.13/site-packages/libtmux/_internal/__pycache__/dataclasses.cpython-313.pyc
/usr/lib/python3.13/site-packages/libtmux/_internal/__pycache__/env.cpython-313.opt-1.pyc
/usr/lib/python3.13/site-packages/libtmux/_internal/__pycache__/env.cpython-313.pyc
/usr/lib/python3.13/site-packages/libtmux/_internal/__pycache__/query_list.cpython-313.opt-1.pyc
/usr/lib/python3.13/site-packages/libtmux/_internal/__pycache__/query_list.cpython-313.pyc
/usr/lib/python3.13/site-packages/libtmux/_internal/__pycache__/sparse_array.cpython-313.opt-1.pyc
/usr/lib/python3.13/site-packages/libtmux/_internal/__pycache__/sparse_array.cpython-313.pyc
/usr/lib/python3.13/site-packages/libtmux/_internal/__pycache__/types.cpython-313.opt-1.pyc
/usr/lib/python3.13/site-packages/libtmux/_internal/__pycache__/types.cpython-313.pyc
/usr/lib/python3.13/site-packages/libtmux/_internal/constants.py
/usr/lib/python3.13/site-packages/libtmux/_internal/control_mode.py
/usr/lib/python3.13/site-packages/libtmux/_internal/dataclasses.py
/usr/lib/python3.13/site-packages/libtmux/_internal/env.py
/usr/lib/python3.13/site-packages/libtmux/_internal/query_list.py
/usr/lib/python3.13/site-packages/libtmux/_internal/sparse_array.py
/usr/lib/python3.13/site-packages/libtmux/_internal/types.py
/usr/lib/python3.13/site-packages/libtmux/_vendor
/usr/lib/python3.13/site-packages/libtmux/_vendor/__init__.py
/usr/lib/python3.13/site-packages/libtmux/_vendor/__pycache__
/usr/lib/python3.13/site-packages/libtmux/_vendor/__pycache__/__init__.cpython-313.opt-1.pyc
/usr/lib/python3.13/site-packages/libtmux/_vendor/__pycache__/__init__.cpython-313.pyc
/usr/lib/python3.13/site-packages/libtmux/_vendor/__pycache__/_structures.cpython-313.opt-1.pyc
/usr/lib/python3.13/site-packages/libtmux/_vendor/__pycache__/_structures.cpython-313.pyc
/usr/lib/python3.13/site-packages/libtmux/_vendor/__pycache__/version.cpython-313.opt-1.pyc
/usr/lib/python3.13/site-packages/libtmux/_vendor/__pycache__/version.cpython-313.pyc
/usr/lib/python3.13/site-packages/libtmux/_vendor/_structures.py
/usr/lib/python3.13/site-packages/libtmux/_vendor/version.py
/usr/lib/python3.13/site-packages/libtmux/client.py
/usr/lib/python3.13/site-packages/libtmux/common.py
/usr/lib/python3.13/site-packages/libtmux/constants.py
/usr/lib/python3.13/site-packages/libtmux/exc.py
/usr/lib/python3.13/site-packages/libtmux/formats.py
/usr/lib/python3.13/site-packages/libtmux/hooks.py
/usr/lib/python3.13/site-packages/libtmux/neo.py
/usr/lib/python3.13/site-packages/libtmux/options.py
/usr/lib/python3.13/site-packages/libtmux/pane.py
/usr/lib/python3.13/site-packages/libtmux/py.typed
/usr/lib/python3.13/site-packages/libtmux/pytest_plugin.py
/usr/lib/python3.13/site-packages/libtmux/server.py
/usr/lib/python3.13/site-packages/libtmux/session.py
/usr/lib/python3.13/site-packages/libtmux/test
/usr/lib/python3.13/site-packages/libtmux/test/__init__.py
/usr/lib/python3.13/site-packages/libtmux/test/__pycache__
/usr/lib/python3.13/site-packages/libtmux/test/__pycache__/__init__.cpython-313.opt-1.pyc
/usr/lib/python3.13/site-packages/libtmux/test/__pycache__/__init__.cpython-313.pyc
/usr/lib/python3.13/site-packages/libtmux/test/__pycache__/constants.cpython-313.opt-1.pyc
/usr/lib/python3.13/site-packages/libtmux/test/__pycache__/constants.cpython-313.pyc
/usr/lib/python3.13/site-packages/libtmux/test/__pycache__/environment.cpython-313.opt-1.pyc
/usr/lib/python3.13/site-packages/libtmux/test/__pycache__/environment.cpython-313.pyc
/usr/lib/python3.13/site-packages/libtmux/test/__pycache__/random.cpython-313.opt-1.pyc
/usr/lib/python3.13/site-packages/libtmux/test/__pycache__/random.cpython-313.pyc
/usr/lib/python3.13/site-packages/libtmux/test/__pycache__/retry.cpython-313.opt-1.pyc
/usr/lib/python3.13/site-packages/libtmux/test/__pycache__/retry.cpython-313.pyc
/usr/lib/python3.13/site-packages/libtmux/test/__pycache__/temporary.cpython-313.opt-1.pyc
/usr/lib/python3.13/site-packages/libtmux/test/__pycache__/temporary.cpython-313.pyc
/usr/lib/python3.13/site-packages/libtmux/test/constants.py
/usr/lib/python3.13/site-packages/libtmux/test/environment.py
/usr/lib/python3.13/site-packages/libtmux/test/random.py
/usr/lib/python3.13/site-packages/libtmux/test/retry.py
/usr/lib/python3.13/site-packages/libtmux/test/temporary.py
/usr/lib/python3.13/site-packages/libtmux/window.py
/usr/share/doc/packages/python313-libtmux
/usr/share/doc/packages/python313-libtmux/README.md
/usr/share/licenses/python313-libtmux
/usr/share/licenses/python313-libtmux/LICENSE


Generated by rpm2html 1.8.1

Fabrice Bellet, Sun Aug 2 03:14:27 2026