Changelog¶
For instructions on installing the development version of libtmux, refer to development releases.
To install via pip, use:
$ pip install --user --upgrade --pre libtmux
libtmux 0.38.x (Yet to be released)¶
Future release notes will be placed here
Documentation¶
Fix docstrings in
query_list
forMultipleObjectsReturned
andObjectDoesNotExist
.
Development¶
Code quality: Use f-strings in more places (#540)
via ruff 0.4.2.
libtmux 0.37.0 (04-21-2024)¶
Maintenance only, no bug fixes or new features
Testing¶
Documentation¶
Automatically linkify links that were previously only text.
Development¶
poetry: 1.8.1 -> 1.8.2
See also: https://github.com/python-poetry/poetry/blob/1.8.2/CHANGELOG.md
libtmux 0.36.0 (2024-03-24)¶
Maintenance only, no bug fixes or new features
Development¶
Aggressive automated lint fixes via
ruff
(#539)via ruff v0.3.4, all automated lint fixes, including unsafe and previews were applied:
ruff check --select ALL . --fix --unsafe-fixes --preview --show-fixes; ruff format .
Branches were treated with:
git rebase \ --strategy-option=theirs \ --exec 'poetry run ruff check --select ALL . --fix --unsafe-fixes --preview --show-fixes; poetry run ruff format .; git add src tests; git commit --amend --no-edit' \ origin/master
libtmux 0.35.1 (2024-03-23)¶
Bug fix¶
Server.attached_sessions
fix for when multiple clients attached, thank you @patrislav1 (#537)#538 fix to
QueryList
.
libtmux 0.35.0 (2024-03-17)¶
Breaking changes¶
libtmux 0.34.0 (2024-03-17)¶
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:
libtmux 0.33.0 (2024-03-17)¶
Breaking changes¶
Improved new sessions (#532)¶
Session.new_window()
:Learned
direction
, viaWindowDirection
).
Added
Window.new_window()
shorthand to create window based on that window’s position.
Improved window splitting (#532)¶
Window.split_window()
toWindow.split()
Deprecate
Window.split_window()
Pane.split_window()
toPane.split()
Deprecate
Pane.split_window()
Learned
direction
, viaPaneDirection
).Deprecate
vertical
andhorizontal
in favor ofdirection
.
Learned
zoom
Tweak: Pane position (#532)¶
It’s now possible to retrieve the position of a pane in a window via a
bool
helper::
Development¶
poetry: 1.7.1 -> 1.8.1
See also: https://github.com/python-poetry/poetry/blob/1.8.1/CHANGELOG.md
libtmux 0.32.0 (2024-03-01)¶
Maintenance only, no bug fixes or new features
Packaging¶
Development¶
ruff 0.2.2 -> 0.3.0
libtmux 0.31.0 (2024-02-17)¶
Cleanups (#527)¶
Streamline
{Server,Session,Window,Pane}.cmd()
, across all usages to:Use
cmd: str
as first positionalRemoved unused keyword arguments
**kwargs
Renamings (#527)¶
Session.attached_window
renamed toSession.active_window()
Session.attached_window
deprecated
Session.attached_pane
renamed toSession.active_pane()
Session.attached_pane
deprecated
Window.attached_pane
renamed toWindow.active_pane()
Window.attached_pane
deprecated
Improvements (#527)¶
Server.attached_windows
now usesQueryList
’s.filter()
Documentation (#527)¶
Document
.cmd
in README and quickstartAdd doctests and improve docstrings to
cmd()
methods across:
Post-release: v0.31.0post0 (2024-02-17)¶
Documentation updates
libtmux 0.30.2 (2024-02-16)¶
Development¶
Updated
TMUX_MAX_VERSION
from 3.3 to 3.4
libtmux 0.30.1 (2024-02-16)¶
Fixes¶
Adjusted pytest plugin and test module: Updated to use renamed methods from version 0.30.0.
libtmux 0.30.0 (2024-02-16)¶
Additions¶
Introduced
Pane.kill()
method
Modifications¶
Window.select_window()
renamed toWindow.select()
Deprecated
Window.select_window()
Pane.select_pane()
renamed toPane.select()
Deprecated
Pane.pane_select()
Session.attach_session()
renamed toSession.attach()
Deprecated
Session.attach_session()
Server.kill_server()
renamed toServer.kill()
Deprecated
Server.kill_server()
Session.kill_session()
renamed toSession.kill()
Deprecated
Session.kill_session()
Window.kill_window()
renamed toWindow.kill()
Deprecated
Window.kill_window()
Enhancements¶
Server.new_session()
: Support environment variablesWindow.split_window()
: Supportsize
via-l
Supports columns/rows (
size=10
) and percentage (size='10%'
)
libtmux 0.29.0 (2024-02-16)¶
Fixes¶
Use
DeprecationWarning
for APIs set to be deprecated (#526)
Testing¶
pytest: Ignore
DeprecationWarning
by default (#526)
libtmux 0.28.1 (2024-02-15)¶
Maintenance only, no bug fixes or new features
Testing¶
CI: Bump actions to node 20+ versions
Documentation¶
Refine docs and add migration for v0.28.0
libtmux 0.28.0 (2024-02-14)¶
Breaking changes¶
Detached / unselected by default (#523)¶
To ensure consistency and principle of least surprise, keep these set to
not use -a
unless explicitly specified.
Breaking: Session.new_window()
+ Window.split_window()
no longer attaches by default.
0.28.0 and greater: Defaults to
attach=False
.0.27.1 and below: Defaults to
attach=True
.
To keep the old behavior in 0.28.0 and beyond, pass attach=True
explicitly.
Improved resizing (#523)¶
Breaking:
Pane.resize_pane()
renamed toPane.resize()
(#523)This convention will be more consistent with
Window.resize()
.Breaking:
Pane.resize()
’s params changed (#523)No longer accepts
-U
,-D
,-L
,-R
directly, instead acceptsResizeAdjustmentDirection
).
-
Accept adjustments via
adjustment_direction
w/ResizeAdjustmentDirection
+adjustment
.Learned to accept manual
height
and / orwidth
(columns/rows or percentage)Zoom (and unzoom)
Window.resize()
: Newly added
Tip: If Pane.resize()
was not taking affect <= 0.27.1, try to resize with
Window.resize()
first.
Fixes¶
Window.refresh()
andPane.refresh()
: Refresh more underlying state (#523)Obj._refresh()
: Allow passing args (#523)e.g.
-a
(all) tolist-panes
andlist-windows
Server.panes
: Fix listing of panes (#523)Would list only panes in attached session, rather than all in a server.
Improvement¶
Tests¶
libtmux 0.27.1 (2024-02-07)¶
Packaging¶
libtmux 0.27.0 (2024-02-07)¶
Improvement¶
libtmux 0.26.0 (2024-02-06)¶
Breaking changes¶
Documentation¶
Development¶
-
Add flake8-commas (COM)
Add flake8-builtins (A)
Add flake8-errmsg (EM)
CI¶
Move CodeQL from advanced configuration file to GitHub’s default
libtmux 0.25.0 (2023-11-25)¶
Improvement¶
Development¶
Documentation¶
libtmux 0.24.1 (2023-11-23)¶
Packaging¶
libtmux 0.24.0 (2023-11-19)¶
Maintenance only, no bug fixes or new features
Breaking changes¶
Packaging¶
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¶
Move formatting from
black
toruff format
(#506)This retains the same formatting style of
black
while eliminating a dev dependency by using our existing rust-basedruff
linter.CI: Update action packages to fix warnings
dorny/paths-filter: 2.7.0 -> 2.11.1
codecov/codecov-action: 2 -> 3
libtmux 0.23.2 (2023-09-09)¶
Maintenance only, no bug fixes or new features
Breaking changes¶
Cut last python 3.7 release (EOL was June 27th, 2023)
For security updates, a 0.23.x branch can be maintained for a limited time, if necessary.
libtmux 0.23.1 (2023-09-02)¶
Maintenance only, no bug fixes or new features
Development¶
Automated typo fixes from typos-cli:
typos --format brief --write-changes
ruff: Remove ERA /
eradicate
pluginThis rule had too many false positives to trust. Other ruff rules have been beneficial.
libtmux 0.23.0 (2023-08-20)¶
Maintenance only, no bug fixes or new features
Development¶
Post-release: v0.23.0post0 (2023-08-20)¶
Fixes code comments cleaned up by
ruff
, but missed in QA. In the future, even when using an automated tool, we will review more thoroughly.
Post-release: v0.23.0post1 (2023-08-26)¶
Fixes for more
ERA001
issues.
Post-release: v0.23.0post2 (2023-08-28)¶
Yet more
ERA001
fixes.
libtmux 0.22.2 (2023-08-20)¶
Development¶
libtmux 0.22.1 (2023-05-28)¶
Maintenance only, no bug fixes or new features
Development¶
Add back
black
for formattingThis is still necessary to accompany
ruff
, until it replaces black.
libtmux 0.22.0 (2023-05-27)¶
Maintenance only, no bug fixes or new features
Internal improvements¶
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.
poetry: 1.4.0 -> 1.5.0
See also: https://github.com/python-poetry/poetry/releases/tag/1.5.0
libtmux 0.21.1 (2023-04-07)¶
Development¶
Update mypy to 1.2.0
Fixes¶
SkipDefaultFieldsReprMixin: Fix typing for mypy 1.2.0
libtmux 0.21.0 (2023-01-29)¶
Breaking internal change¶
libtmux 0.20.0 (2023-01-15)¶
What’s new¶
libtmux 0.19.1 (2022-01-07)¶
Fixes¶
libtmux 0.19.0 (2022-01-07)¶
New features¶
libtmux 0.18.3 (2023-01-07)¶
Improvement¶
libtmux 0.18.2 (2022-12-30)¶
Fixes¶
libtmux 0.18.1 (2022-12-28)¶
Fixes¶
Window.panes: Fix docstring
Remove unused code documentation
libtmux 0.18.0 (2022-12-27)¶
Breaking¶
Server: Add
__repr__
and setsocket_path
if none set.Before (0.17 and below):
<libtmux.server.Server object at ...>
New
__repr__
(0.18+):Server(socket_name=test)
Server(socket_path=/tmp/tmux-1000/default)
libtmux 0.17.2 (2022-12-27)¶
Server: Move
_list_panes
and_update_panes
to deprecated
libtmux 0.17.1 (2022-12-27)¶
Fixes¶
Documentation fixes
Add deprecation warning to
Server.children
,Session.children
,Window.children
.
libtmux 0.17.0 (2022-12-26)¶
Breaking changes (#426)¶
Finding objects / relations
0.16 and below:
session._windows()
,session.list_windows()
, etc.0.17 and after:
session.windows
0.16 and below:
session.find_where({'window_name': my_window})
0.17 and after:
session.windows.get(window_name=my_window, default=None)
If not found and not
default
, raisesObjectDoesNotExist
If multiple objects found, raises
MultipleObjectsReturned
0.16 and below:
session.where({'window_name': my_window})
0.17 and after:
session.windows.filter(window_name=my_window)
Accessing attributes
0.16 and below:
window['id']
0.17 and after:
window.id
0.16 and below:
window.get('id')
0.17 and after:
window.id
0.16 and below:
window.get('id', None)
0.17 and after:
getattr(window, 'id', None)
New features¶
Detect if server active (#448)¶
Server.is_alive()
Server.raise_if_dead()
Internal¶
Remove unused
sphinx-click
development dependency
libtmux 0.16.1 (2022-12-12)¶
Fixes¶
libtmux 0.16.0 (2022-12-10)¶
Breaking changes¶
Fix
distutils
warning, vendorizeLegacyVersion
(#351)Removal of reliancy on
distutils.version.LooseVersion
, which does not supporttmux(1)
versions like3.1a
.Fixes warning:
DeprecationWarning: distutils Version classes are deprecated. Use packaging.version instead.
The temporary workaround, before 0.16.0 (assuming setup.cfg):
[tool:pytest] filterwarnings = ignore:.* Use packaging.version.*:DeprecationWarning:: ignore:The frontend.Option(Parser)? class.*:DeprecationWarning::
Features¶
libtmux 0.15.10 (2022-11-05)¶
There will be more improvements over the coming weeks and months to shore up flakiness across shells and environments.
Tests¶
libtmux 0.15.9 (2022-10-30)¶
Bug fix¶
CI¶
Packaging¶
Development¶
libtmux 0.15.8 (2022-10-02)¶
Bug fix¶
libtmux 0.15.7 (2022-09-23)¶
libtmux 0.15.6 (2022-09-23)¶
Maintenance only, no bug fixes or new features
Packaging¶
Remove
MANIFEST.in
This is handled by poetry’s
include
in pyproject.toml.
libtmux 0.15.5 (2022-09-23)¶
Maintenance only, no bug fixes or new features
Packaging¶
Remove
.tmuxp-before-script.sh
from.tmuxp.yaml
libtmux 0.15.4 (2022-09-21)¶
Fixes¶
Packaging¶
libtmux 0.15.3 (2022-09-20)¶
Tests / docs¶
Move conftest.py to root level (#440)
https://docs.pytest.org/en/stable/deprecations.html#pytest-plugins-in-non-top-level-conftest-files
Less conftest.py files
We can now run py.test for
README.md
without needing to proxy throughdocs/index.md
libtmux 0.15.2 (2022-09-17)¶
Maintenance release, no features or fixes
Tests¶
Packaging¶
pyproject.toml: Note pytest framework in trove classifiers
Infrastructure¶
libtmux 0.15.1 (2022-09-11)¶
Packaging¶
pyproject.toml: Drop old issues package, remove anther package from grouping
Documentation¶
Cleanup quickstart page
libtmux 0.15.0 (2022-09-10)¶
New features¶
Added a pytest plugin, #411.
Breaking changes¶
Remove
common.which()
in favor ofshutil.which()
, Credit: @rocksandska, via #407Fixes #402:
common.tmux_cmd()
will only strip trailing empty lines. Before this change, all empty lines were filtered out. This will lead to a more accurate behavior when usingPane.capture_pane()
. Credit: @rockandska, via #405.
Development¶
Tests¶
Test doctests in documentation via pytest-doctest-docutils (#410)
Documentation¶
Examples updated for correctness, #412 (cherry-picked from #410)
Render changelog in linkify_issues (#410)
Fix Table of contents rendering with sphinx autodoc with sphinx_toctree_autodoc_fix (#410)
libtmux 0.14.2 (2022-08-17)¶
Fixes¶
Server.new_session()
really works withoutsession_name
, #401 fixes #399. Improved tests and doctests added.
libtmux 0.14.1 (2022-08-17)¶
Fixes¶
Server.new_session()
works withoutsession_name
, #400 fixes #399This still passed
None
to the session name, this was fixed in v0.14.2.
libtmux 0.14.0 (2022-08-05)¶
Breaking changes¶
Pane.send_keys()
:suppress_history
default value changed fromTrue
toFalse
, #395
Tests and docs¶
libtmux 0.13.0 (2022-08-05)¶
What’s new¶
Improved typings
Now
mypy --strict
compliant (#383)
Breaking changes¶
Deprecated individual item lookups (#390)
Removed key lookups from
libtmux.common.EnvironmentMixin.show_environment()
Only
EnvironmentMixin.show_environment()
(without an argument) exists, and it still returns adict
.Add key lookups via
libtmux.common.EnvironmentMixin.getenv()
# Before server.show_environment('DISPLAY') # After server.getenv('DISPLAY') # Before session.show_environment('DISPLAY') # After session.getenv('DISPLAY')
Removed key lookups from
Session.show_options()
session.show_options() # still returns dict, without an argument # Old session.show_options('DISPLAY') # Now session.show_option('DISPLAY')
Removed key lookups from
Window.show_window_options()
window.show_window_options() # still returns dict, without an argument # Old window.show_window_options('DISPLAY') # Now window.show_window_option('DISPLAY')
Development¶
libtmux 0.12.0 (2022-07-13)¶
Compatibility¶
Development¶
Documentation¶
Testing¶
retry()
: Add deprecation warning. This will be removed in 0.13.x (#368, #372)New function
retry_until()
: Polls a callback function for a set period of time until it returnsTrue
or times out. By default it will raiselibtmux.exc.WaitTimeout
, withraises=False
it will returnFalse
. Thank you @categulario! (#368, #372)#384 Chore: Use absolute modules rather than root-level to avoid cyclic imports.
# Bad / Old from libtmux import Server # Good / New from libtmux.server import Server
Internals¶
#382 [mypy] support added:
Basic mypy tests now pass
libtmux 0.11.0 (2022-03-10)¶
Compatibility¶
Python 3.7 and 3.8 returns in 0.12.0
Final python 3.7 and 3.8 releaseFixes and security updates will go tov0.11.x
Internal: Use new separator to split
tmux(1)
formatting information (#289, #343)The separator is configurable via
LIBTMUX_TMUX_FORMAT_SEPARATOR
. If you ever have compatibility issues in the future let us know which default works best across versions.Credit: @JonathanRaiman and @jagguli
Development¶
Documentation¶
Sidebar reorganized into sections
Added documentation on fetching developmental releases of libtmux
libtmux 0.10.3 (2022-01-10)¶
Packaging¶
First experimental release using poetry build
(#347). If you are packaging and run
across any difficulty please see #346.
Compatibility¶
Development¶
libtmux 0.10.2 (2021-10-30)¶
#324: Update poetry to 1.1
CI: Use poetry 1.1.7 and
install-poetry.py
installerRelock poetry.lock at 1.1 (w/ 1.1.7’s fix)
#339 (CI): Lock python at 3.9 to avoid poetry issue with
dataclasses
#341 #342:
Server.attached_sessions()
now supports multiple attached sessions.Remove attached sessions limitation to not detect multiple attached clients, thank you @timoses
libtmux 0.10.1 (2021-06-16)¶
libtmux 0.10.0 (2021-06-16)¶
libtmux 0.9.0 (2021-06-14)¶
Python 2.7 support dropped.
libtmux 0.8.5 (2020-10-25)¶
#297: Enchance subprocess interaction std[in|out|err]. Needed for interact with big buffer, fixes #251, thank you @gil-obradors!
#303 Add
common.get_libtmux_version
which gives the tmux version as a loose constraint. Fix linking to terms inside docs, and duplicate description of module which sphinx warned about in api.rst.#266 Fix issue on local tests where env variables would cause show-environment to pause tests indefinitely.
libtmux 0.8.4 (2020-10-25)¶
#234:
Window.split_window
: Allow passingpercent
, Thank you @jinankjain!#289: Fix warning due to invalid escape sequences, Thank you @tirkarthi!
#295: Publish docs via our own action
#295: Move more packaging over to poetry, though we’ll keep setup.py for the moment to ensure compatibility package maintainers.
#295: New development instructions
#295: Move doc/ to docs/
#296: CI: Test python 2.7, cache python packages, prevent running internal PRs twice
libtmux 0.8.3 (2020-08-16)¶
libtmux 0.8.2 (2019-06-02)¶
CHANGES updated to plain reStructuredText
Add
project_urls
to setup.py for pypi.Looser Pipfile versions, add Pipfile.lock
libtmux 0.8.1 (2019-01-26)¶
#117 Fix issue with renaming clients with tmux 2.7 on BSD/macOS machines.
#121 Support
literal=True
(-l
) inPane.send_keys
from @ritiek#131 Fix for unicode commands in Python 2, thanks @myw
#172 Support for next-X.Y versions from @sloria
#120
capture_pane
support forPane
#119
display_message
support forPane
Sort imports with isort
Add sphinxcontrib-napoleon package for documentation
Move docstrings over to numpy’s style
libtmux 0.8.0 (2018-03-11)¶
#46 Change license from BSD to MIT
Move to new organization, tmux-python
Support package updates to pytest, sphinx, etc.
Travis/CI: Limit tests to Python 2.7 and 3.6 (removed 3.3 to 3.5)
Travis/CI: Update pypy veersions
#103
Server.new_session
learned how to run commands in window on session start, thanks @grimpy!#68 Make Server.has_session() use returncode, thanks @jlargentaye! This should make
has_session
more robust.
libtmux 0.7.8 (2018-03-04)¶
Port
retry
function from tmuxp (https://github.com/tmux-python/tmuxp/issues/354)
libtmux 0.7.7 (2017-11-10)¶
Don’t add -x/-y in tmux >= 2.6 if running tmuxp from inside client.
libtmux 0.7.6 (2017-11-09)¶
Allow
Window.select_layout
with no argsFix test where
bell-
was no longer ambiguous as of tmux 2.6
libtmux 0.7.5 (2017-10-07)¶
Hotfix to support tmux 2.6 session creation
libtmux 0.7.4 (2017-08-19)¶
#65 Add session id to commands, thanks @askedrelic
libtmux 0.7.3 (2017-05-29)¶
Exact matches only supported on 2.1 and up
libtmux 0.7.2 (2017-05-29)¶
Support exact matching in
Server.has_session
libtmux 0.7.1 (2017-04-28)¶
#37 Improve support for formatted options like
pane-border-status
. Thanks @kaushalmodi.
libtmux 0.7.0 (2017-04-27)¶
Support for python 2.6 dropped. New minimum version is 2.7
Add support for tmux 2.4, pypy and pypy3
Overhaul error handling when setting and showing options
Added
handle_option_error
for handling option errorsAdded
libtmux.exc.OptionError
base exceptionAdded
libtmux.exc.InvalidOption
andlibtmux.exc.AmbiguousOption
libtmux.exc.UnknownOption
now extendslibtmux.exc.OptionError
Overhaul version checking
has_version
has been renamed toget_version
get_version
will return tmux built from git master as the latest version supported by the libtmux version with-master
at the end, e.g.2.4-master
get_version
will return tmux on openbsd base system as the latest version supported by the libtmux version with-openbsd
at the end, e.g.2.4-openbsd
has_required_tmux_version
has been renamed tohas_minimum_version
added
has_gt_version
,has_gte_version
,has_lt_version
,has_lte_version
,
Fixed up documentation in some session methods
Added pydoc exception info to option methods in window and sessions.
Added
TMUX_MIN_VERSION
andTMUX_MAX_VERSION
libtmux 0.6.5 (2017-04-02)¶
Fix
which
commandAdd
TmuxCommandNotFound
exceptionAdd
tmux_search_paths
andappend_env_path
kwargs totmux_cmd
.
libtmux 0.6.4 (2017-03-25)¶
#32 support for OpenBSD’s tmux
libtmux 0.6.3 (2017-02-08)¶
#25 support for working with tmux
master
, thanks @sloria.
libtmux 0.6.2 (2017-01-19)¶
libtmux 0.6.1 (2016-12-20)¶
libtmux 0.6.0 (2016-09-16)¶
Raise exception for invalid session names. tmux does not allow names that are empty, contain periods or colons.
Remove unused
target_session
param inServer.attach_session
andServer.switch_client
.
libtmux 0.5.1 (2016-08-18)¶
#12 - fix logger message when tmux doesn’t exist in
PATH
libtmux 0.5 (2016-06-15)¶
libtmux 0.4.1 (2016-05-23)¶
update
which()
to find tmux viaos.environ['PATH']
. https://redd.it/4laeut
libtmux 0.4.0 (2016-05-23)¶
attributes for formatters are now accessible via
Session
,Window
andPane
objects.session.name
is equivalent tosession.get('session_name')
, you can do the same with other properties in_info
.window.name
,pane.current_path
,session.id
,window.id
,pane.id
,session.index
,window.index
,pane.index
, etc.attached_sessions
,attached_window
andattached_pane
are now properties._TMUX
metadata object changed to_info
..findWhere()
is nowfind_where
.README and usage fixes
libtmux 0.3.0 (2016-05-23)¶
switch to pytest
libtmux 0.1.0 (2016-05-22)¶
libtmux forked from tmuxp.