Changelog#
To install the unreleased libtmux version, see developmental releases.
pip:
$ pip install --user --upgrade --pre libtmux
libtmux 0.26.x (unreleased)#
Notes on upcoming releases will be added here
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)#
Bug fixes#
Packaging#
libtmux 0.15.3 (2022-09-20)#
Tests / docs#
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 releaseBug fixes 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.