To install the unreleased tmuxp version, see developmental releases.
pip:
$ pip install --user --upgrade --pre tmuxp
pipx:
$ pipx install --suffix=@next 'tmuxp' --pip-args '\--pre' --force
// Usage: tmuxp@next load yoursession
Maintenance only, no bug fixes or new features
-
Drop Python 3.8. end of life was October 7th, 2024 (#951)
tmuxp 1.48.0 was the last release for Python 3.8.
The minimum python for tmuxp as of 1.49.0 is Python 3.9
-
libtmux 0.38.1 -> 0.39.0 (Minimum Python version of 3.9)
Maintenance only, no bug fixes or new features
uv is the new package and project manager for the project, replacing Poetry.
Build system moved from poetry to hatchling.
Built with uv.
-
Code quality: Use f-strings in more places (#931)
via ruff 0.4.2.
Maintenance only, no bug fixes or new features
-
libtmux: 0.36.0 -> 0.37.0 (#929)
Internal improvements to test suite (pytest-xdist and relaxing
retry_until()
tests)
Dimensions used by workspace builder now use {py:func}shutil.get_terminal_size()
.
In conjunction with main-pane-height: 67%
, for instance, this will render a
proportional layout:
session_name: my session
windows:
- window_name: example with percentage
focus: True
layout: main-horizontal
options:
main-pane-height: 67%
panes:
- focus: true
- pane
To use old behavior, set TMUXP_DETECT_TERMINAL_SIZE=0
in your terminal
environment and file an issue on the tracker.
- Automatically linkify links that were previously only text.
-
Another
ruff
linting pass, this time with ruff 0.3.7 (#928) -
poetry: 1.8.1 -> 1.8.2
See also: https://github.com/python-poetry/poetry/blob/1.8.2/CHANGELOG.md
Maintenance only, no bug fixes or new features
-
Aggressive automated lint fixes via
ruff
(#922)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 -> 0.36.0 (#923)
Internal refactorings and maintenance.
-
libtmux: 0.35.0 -> 0.35.1
Improved support in libtmux when multiple clients attached to a session in a server.
-
libtmux: 0.34.0 -> 0.35.0 (#920)
Simplify redundant
target
passing andwindow-index
usages (#920)
-
libtmux: 0.33.0 -> 0.34.0 (#919)
Explicit targets in
cmd()
Maintenance only, no bug fixes or new features
- WorkspaceBuilder: Use
Pane.split
instead ofWindow.split_window
Maintenance only, no bug fixes or new features
-
libtmux: 0.32.0 -> 0.33.0 (#918)
Move
split_window()
tosplit()
.
-
poetry: 1.7.1 -> 1.8.1
See also: https://github.com/python-poetry/poetry/blob/1.8.1/CHANGELOG.md
Maintenance only, no bug fixes or new features
-
libtmux: 0.31.0.post0 -> 0.32.0 (#914)
Export fix, ruff 0.3.0 updates.
-
ruff 0.2.2 -> 0.3.0 (#913)
Related formattings. Update CI to use
ruff check .
instead ofruff .
.
Maintenance only, no bug fixes or new features
-
libtmux: 0.30.2 -> 0.31.0 (#912)
-
Renamings of libtmux 0.31.0's streamlining of
cmd()
, renaming ofattached_{window,pane}s
toactive_{window,pane}s
.
Maintenance only, no bug fixes or new features
-
libtmux: 0.28.1 -> 0.30.1 (#911)
Updated method names
-
Rename methods to libtmux v0.30.0+-style (#911).
-
libtmux: 0.28.0 -> 0.28.1
Maintenance release (docs and CI bumps)
- CI: Bump actions to node 20+ versions
-
libtmux: 0.27.0 -> 0.28.0 (#910)
Refresh and resize improvements
- CI: Add tmux 3.4 to test matrix (#909)
Maintenance only, no bug fixes or new features
-
libtmux: 0.26.0 -> 0.27.0 (#908)
QueryList generic typing improvements.
Maintenance only, no bug fixes or new features
-
libtmux: 0.25.0 -> 0.26.0, maintenance release (#906)
Doc string + linting stringency updates.
-
Strengthen linting (#907)
-
Add flake8-commas (COM)
-
Add flake8-builtins (A)
-
Add flake8-errmsg (EM)
-
Maintenance only, no bug fixes or new features
-
libtmux: 0.24.1 -> 0.25.0, maintenance release (#896)
Improve styling via pydocstyle.
-
config_reader
: Move totmuxp._internal
(#897) -
_types
: Move totmuxp._internal
(#900)
- Refactor API docs to split across multiple pages (#898)
- Remove unused reStructuredText section headers from some modules (#898)
Maintenance only, no bug fixes or new features
- Move CodeQL from advanced configuration file to GitHub's default
- Add pydocstyle rule to ruff (#891)
- Add docstrings to functions, methods, classes, and packages (#891)
- pypoetry: Add
gp-lib
totest
dependency group
- libtmux: 0.24.0 -> 0.24.1 (maintenance release)
- Shell tests: Use named, typed test fixture (#893)
Maintenance only, no bug fixes or new features
-
Move pytest configuration to
pyproject.toml
(#886) -
Poetry: 1.6.1 -> 1.7.0
See also: https://github.com/python-poetry/poetry/blob/1.7.0/CHANGELOG.md
-
Add Python 3.12 to trove classifiers
-
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.
-
libtmux: 0.23.0 -> 0.24.0 (maintenance release)
-
Move formatting from
black
toruff format
(#890)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
- Python 3.7 Dropped (#885)
-
Improved typings
Now
mypy --strict
compliant (#859) -
Poetry 1.5.1 -> 1.6.1 (#885)
Maintenance only, no bug fixes or new features
-
Cut last python 3.7 release (EOL was June 27th, 2023)
For security updates, a 1.30.x branch can be maintained for a limited time, if necessary.
Maintenance only, no bug fixes or new features
-
Code quality improved via ruff rules (#879)
This includes fixes made by hand alongside ruff's automated fixes. The more stringent rules include import sorting, and still runs almost instantly against the whole codebase.
-
CI:
black . --check
now runs on pushes and pull requests
-
libtmux: v0.23.1 -> v0.23.2
Final Python 3.7 release of libtmux
- README Example for Nix (#883), thank you @ChristopherHarwell!
Maintenance only, no bug fixes or new features
-
libtmux: v0.23.0 -> v0.23.1
Typo fixes inside libtmux
- Typo fixes (#884), thanks @kianmeng
Maintenance only, no bug fixes or new features
-
libtmux v0.22.2 -> v0.23.0 (#882)
Code quality improvements from tmux-python/libtmux#488
-
libtmux post-release bumps
Re-add comments that went missing from
ruff
formatter.
Maintenance only, no bug fixes or new features
-
libtmux v0.22.1 -> v0.22.2
Removes
setuptools
frombuild-system
requirements
Maintenance only, no bug fixes or new features
-
Add back
black
for formattingThis is still necessary to accompany
ruff
, until it replaces black.
Maintenance only, no bug fixes or new features
-
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.
-
libtmux: 0.21.1 -> 0.22.0 (Moved to ruff as well)
-
poetry: 1.4.0 -> 1.5.0
See also: https://github.com/python-poetry/poetry/releases/tag/1.5.0
Maintenance only, no bug fixes or new features
- Update mypy to 1.2.0
- libtmux 0.21.0 -> 0.21.1 (mypy / typing updates only)
Maintenance only, no bug fixes or new features
-
libtmux 0.20.0 -> 0.21.0 (#865)
This updates the separator uses from libtmux to be a rarer character. See libtmux#475.
Maintenance only, no bug fixes or new features
-
libtmux 0.19.1 -> 0.20.0 (#863)
Improves support around
Server.new_session
and its params, e.g.-x
and-y
.
-
libtmux 0.18.3 -> 0.19.1 (#862)
0.19.1 has a fix for
Window.set_window_option()
-
libtmux: 0.18.2 -> 0.18.3 (#861)
via libtmux#466
-
tests(test_pane_order): Improve reliability of
pane_current_path
test.
Maintenance only, no bug fixes or new features
-
libtmux: 0.18.1 -> 0.18.2
Fix for starting new sessions at default socket / temporary directory (libtmux#464)
-
CLI Tests: Refactor
tests/cli
(#858)- Fix resolution of directories
-
WorkspaceBuilder: Require
Server
in constructor (#857)
Yanked release: tmuxp load
issues, see #856
Maintenance only, no bug fixes or new features
- Type annotations: More mypy typings (#796)
Maintenance only, no bug fixes or new features
-
Update libtmux 0.18.0 -> 0.18.1
Only code documentation fixes
tmuxp shell
: now detects currentserver
viaTMUX
(#854)
Maintenance only, no bug fixes or new features
-
libtmux 0.17.2 -> 0.18.0
Server: Improved
__repr__
- Fix warnings for
_update_panes()
in builder
Internal update only
-
libtmux 0.17.1 -> 0.17.2
More deprecation warnings
Internal update only
-
libtmux 0.17.0 -> ~0.17.1
Deprecation warning updates, doc fixes
- Poetry 1.2.2 -> 1.3.1
-
libtmux 0.16 -> 0.17 (#850)
This includes the API overhaul from libtmux#426.
- Tests: Stabilization fix for automatic rename test (#853)
-
Update libtmux 0.16.0 -> 0.16.1
This removes the underlying dependency on
packaging
-
Environment variables for windows / panes (#845)
Requires tmux 3.0
Allow to configure window and pane specific environment variables
Having a setup like:
session_name: env-demo environment: DATABASE_URL: "sqlite3:///default.db" windows: - window_name: dev environment: DATABASE_URL: "sqlite3:///dev-1.db" panes: - pane - environment: DATABASE_URL: "sqlite3:///dev-2.db"
will result in a window with two panes. In the first pane
$DATABASE_URL
issqlite3:///dev-1.db
, while in the second pane it issqlite3://dev-2.db
. Any freshly created window getssqlite3:///default.db
as this is what was defined for the session.Credit: @zappolowski
-
Update libtmux 0.15.9 -> 0.16.0
- Support for environmental variables
- Remove reliance on
distutils.version.LooseVersion
forlibtmux._compat.LegacyVersion
-
Fix distutil warnings by using libtmux 0.16.0's
LegacyVersion
(#727)
Maintenance release, no features or fixes
- Bump libtmux from 0.15.9 -> 0.15.10 (only test tweaks)
- Poetry no longer forces
in-project: true
- cli:
tmuxp load
: Fix pass-through of config files (#843)
We now refer to configs as workspaces. Other than just, just maintenance.
Reference to "config" are now "workspace"
-
cli/utils.py
functions moved toworkspace/finders.py
-
config.py
split between:workspace/finders.py
workspace/freezer.py
workspace/importers.py
workspace/validation.py
-
workspacebuilder.py
split into:-
workspace/builder.py
-
workspace/freezer.py
config.inline
moved to freezer
-
tests/fixtures/{workspacebuilder,workspacefreezer}
->tests/fixtures/workspace/{builder,freezer}
tests/test_import_{teamocil,tmuxinator}.py
->tests/workspace/test_import_{teamocil,tmuxinator}.py
Maintenance release, no features or fixes
- Add python 3.11 to test grid, pyenv / asdf files (#842)
- Add python 3.11 to classifiers
- CLI: Fix loading of multiple workspaces in
tmuxp load
(#838 fixes #837)
- Improved shtab completions for files with
tmuxp load [tab]
(#834)
- Remove unused completion code leftover from click (#834)
-
Completions have changed (#830)
Completions now use a different tool: shtab. See the completions page for more information.
If you were using earlier versions of tmuxp (earlier than 1.17.0), you may need to uninstall the old completions, first.
-
Deprecate
click
in favor of {mod}argparse
(#830)
- Remove
click
dependency
- Add
yaml
to required dependencies (#833, credit: @heindsight)
-
Update libtmux 0.15.7 -> 0.15.8
Includes an improvement for blank window names, e.g.
window_name: ''
See also: tmux-python/libtmux#444
Maintenance release, no features or fixes
-
Add
ConfigReader
: Our clean, typed parser for raw strings and files (#828)This is our shiny, new, 200-line, doctested and typed parser that replaces
kaptan
.
- Drop kaptan dependency (#828)
- WorkspaceBuilder: Fix bug in
start_directory
(#829, credit: @heindsight)
Maintenance release, no features or fixes
- Move conftest.py to root, to avoid packaging in wheel (#826 vs #825)
Maintenance release, no features or fixes
-
CI speedups (#819)
- Split out release to separate job so the PyPI Upload docker image isn't pulled on normal runs
- Clean up CodeQL
-
Bump poetry 1.1.x -> 1.2.x
-
Bump libtmux 0.15.1 -> 0.15.7
- 0.15.7 (move
.coveragerc
->pyproject.toml
) - 0.15.6 (#823, pytest fixes, packaging improvements)
- 0.15.3 (#821, pytest plugin improvements, root-level conftest.py)
- 0.15.7 (move
-
Move
.coveragerc
->pyproject.toml
(#824)
-
Remove
MANIFEST.in
This is handled by poetry's
include
in pyproject.toml. -
Remove
.tmuxp-before-script.sh
from.tmuxp.yaml
Maintenance release, no features or fixes
- Project moved to
src/
layout (#814)
Maintenance release, no features or fixes
There will be several of these releases as infrastructure and APIs are upgraded to facilitate fixes for layout issues and general contributions.
-
libtmux bumped to v0.15.1
This includes a major retooling underneath, including
src/
layout and testing ofdoctest
in documentation.
- Render changelog in
linkify_issues
(#812) - Fix Table of contents rendering with sphinx autodoc with
sphinx_toctree_autodoc_fix
(#812) - Test doctests in our docs via
pytest_doctest_docutils
(built ondoctest_docutils
) (#812)
- Revert v1.13.1's #793 change for now, the behavior behind launching workspace layouts need to be understood clearly. Future releases will decisively solve this issue (#811).
-
Layout size has been bumped for those experiencing layout spacing issues (#809, fixes #800)
If you encounter issues with pane spacing, consider passing an
option
like so:session_name: main-pane-height start_directory: "~" options: default-size: 999x999 windows: - window_name: my window name layout: main-horizontal options: main-pane-height: 30 panes: - shell_command: top - shell_command: top - shell_command: top - shell_command: echo "hey" - shell_command: echo "moo"
- Add flake8-bugbear (#807)
- Add flake8-comprehensions (#808)
- Fix layout related issues from #667, #704, #737, via #793. Thank you @nvasilas.
- libtmux updated from v0.12 to v0.14 #790
- Add doctest w/ pytest + doctest via #791.
- Added basic mypy type annotations via #786
- #787 Fix #724 Fix
start_directory
issue with first pane, credit: nvasilas.
Mostly internal cleanups, no features
- #774 Fix #620 tests not finishing
- #777 Fix #778 to move the old, broken
retry()
to the newretry_until()
, credit: @categulario. - #783 Fix #620 Symlink edge for for pane order tests, credit: @categulario.
- #781 Testing with ZSH will mock
~/.zshrc
startup file for cleaner pane outputs.
-
#775: Assure click 8+
tmuxp 1.10 supports click 7.x.
- #773: Allow click 8.1.x
- #770: Fix shell completion for
tmuxp load
{kbd}tab
andtmuxp freeze
{kbd}tab
- Note: Requires click 8+ (#770)
- #762: CLI: Break up into modules in cli.py -> cli/{command}
- #761: Refactor tests/ constants and fixtures
- Show libtmux version with
-V
/--version
-
Remove tox and tox-poetry-installer
This created issues with running poetry while inside the virtualenv.
-
Publish packages to PyPI via github action by setting git tag.
- #773 (backport): Allow click 8.1.x
-
Final python 3.7 and 3.8 release
Bug fixes and security updates will go to
v1.10.x
-
#747: Skip execution via
enter: false
See {ref}
enter
.:::{note}
Experimental setting: behavior and api is subject to change until stable.
:::
session_name: Should not execute windows: - panes: - shell_command: - echo "this sends" - cmd: echo "___$((1 + 3))___" enter: false # pane-wide skip - shell_command: - echo "___$((1 + 3))___" enter: false
-
#750: Pause execution via
sleep_before: [int]
andsleep_after: [int]
See {ref}
sleep
.:::{note}
Experimental setting: behavior and api is subject to change until stable.
:::
session_name: Pause / skip command execution (command-level) windows: - panes: - shell_command: # Executes immediately - echo "___$((11 + 1))___" # Delays before sending 2 seconds - cmd: echo "___$((1 + 3))___" sleep_before: 2 # Executes immediately - cmd: echo "___$((1 + 3))___" # Pauses 2 seconds after - cmd: echo "Stuff rendering here!" sleep_after: 2 # Executes after earlier commands (after 2 sec) - cmd: echo "2 seconds later"
-
#701:
tmuxp freeze
now accepts--quiet
and--yes
along with the--config-format
and filename (--save-to
). This means you can do it all in one command:tmuxp freeze -yqo .tmuxp.yaml
Or bind it to
.tmux.conf
itself:bind -T root C-s run-shell "tmuxp freeze -yqo .tmuxp.yaml"
Credit: @davidatbu
-
#672: Panes now accept
shell
for their initial command.Equivalent to
tmux split-windows
's[shell-command]
session_name: Pane shell example windows: - window_name: first window_shell: /usr/bin/python2 layout: even-vertical suppress_history: false options: remain-on-exit: true panes: - shell: /usr/bin/python3 shell_command: - print('This is python 3') - shell: /usr/bin/vim -u none shell_command: - iAll panes have the `remain-on-exit` setting on. - When you exit out of the shell or application, the panes will remain. - Use tmux command `:kill-pane` to remove the pane. - Use tmux command `:respawn-pane` to restart the shell in the pane. - Use <Escape> and then `:q!` to get out of this vim window. :-) - shell_command: - print('Hello World 2') - shell: /usr/bin/top
Credit: @jerri
- Improve
tmuxp freeze
UX flow, credit @joseph-flinn (#657, in re: #627) tmuxp freeze
will now detect the attached session if no session name is specified. Credit: @will-ockmore. (#660)
- Fix loading of
.yml
files withtmuxp convert
, thank you @kalixi! (#725)
-
#752: Command structure (internal API)
To pave the way for per-command options such as
enter: false
(#53), commands are now a different format:Before,
str
:"echo hello"
After, {py:class}
dict
:{ "cmd": "echo hello" }
This is purely internal. Normal usage should be the same since the configuration emits the equivalent result.
-
#752: Configuration parsing refactorings
- Run through black + isort with string normalization (#738). This way we can use black without any configuration. (One-time, big diff)
- Run codebase through pyupgrade (#745)
- Add
codeql-analysis.yml
to try it out
- Move to
furo
sphinx theme - Reorganize documentation into sections
- Added examples for
enter: false
andsleep: [second]
-
poetry build
used to package in place ofpython setup.py build
(#729)Package maintainers: If you run into any issues check in at #625 and file an issue.
Additionally,
libtmux
has been pinned to a similar release at 0.10.3 which has used the new build process. -
poetry publish
instead oftwine upload dist/*
(#729)Similar to the above, reach out to the #625 issue if you bump into problems.
-
tmuxp edit
for configuration changes (#707, @GlebPoljakov)Inside of configuration directory:
tmuxp edit yourconfig
Inside a project:
tmuxp edit .
- Python 3.6 support has been removed (#726)
- We are trying
.pre-commit-config.yaml
in pull requests to automate black, isort and flake8 for those who forget (#726) - Poetry update 1.1.7 -> 1.1.12 and use new installer URL (#726)
- Black updated 21.9b0 -> 21.12b0 (#726)
- #700: Add
-h
/--help
option, thanks @GHPS - #689: Update poetry to 1.1
- CI: Use poetry 1.1.7 and
install-poetry.py
installer - Relock poetry.lock at 1.1 (w/ 1.1.7's fix)
- CI: Use poetry 1.1.7 and
- #696: Typo fix, thanks @inkch
- #686: Allow click 8.0.x
- Remove
manual/
, move to https://github.com/tmux-python/tmux-manuals
-
libtmux: Update to 0.10.1+ to include
Window.select_window()
fix
- libtmux: Update to 0.10.x
- #474 Re-release with
python setup.py sdist bdist_wheel
to fix missing test files
- #681 Bump version to make homebrew release easier
- #681 tmuxp is now available on homebrew! Thank you @jvcarli!
-
#662 CI: Only update docs when changed
-
#666 CI: Move test plugin packages from pyproject.toml to pytest fixtures. Fixes #658
-
#661
- Bump minimum version 3.5 -> 3.6
- Drop python 2.7 support
- Modernize syntax (remove
__future__
and modesets) - Update black to 21.6b0
- #666 CI: Move test plugin packages from pyproject.toml to pytest fixtures. Fixes #658
- #665 Support for passing tmux config file (
-f
), thanks @jfindlay! Fixes #654
- #665 Support for passing tmux config file (
-f
), thanks @jfindlay! Fixes #654
This will be the last Python 2.7 release of tmuxp. Bug fixes for python 2.7 will live in the 1.7.x branch.
-
#530 New feature: Plugin system
- Add plugin system for user customization of tmuxp
- Add tests for the plugin system
- Update existing tests for the plugin system
- Add the plugin interface to the tmuxp package
- Add in depth documentation for the plugin system
Thank you @joseph-flinn!
-
#656 New feature: Ability to append windows to a session
tmuxp load -a configfile
will append a configuration to your current tmux session.Thank you @will-ockmore!
-
#647 Improvement: Logging to file:
tmuxp load <filename> --log-level outputfile.log
-
#643 New command: Debug information
Port
tmuxp debug-info
from via v1.6.2
- Port click package fix from 1.6.4
- Port
tmuxp load <filename> --log-level outputfile.log
from 1.6.3
- Port
tmuxp debug-info
from #643 from via v1.6.2
-
#530 Plugin system
- Add plugin system for user customization of tmuxp
- Add tests for the plugin system
- Update existing tests for the plugin system
- Add the plugin interface to the tmuxp package
- Add in depth documentation for the plugin system
Thank you @joseph-flinn!
- #651 Fix packaging issue with click, thanks @dougharris! Fixes #649
-
#647 Adding option to dump
load
output to log file, thank you @joseph-flinn!tmuxp load file.yaml --log-file yourfile.txt
Adjust log levels:
tmuxp --log-level DEBUG load file.yaml --log-file yourfile.txt
- #643 New command
tmuxp debug-info
for creating github issues, fixes #352. Thank you @joseph-flinn!
(v1-6-1)=
-
#641 Improvements to
shell
Thanks django-extensions (licensed MIT) for the shell detection abstraction.
-
Deprecate
shell_plus
-
tmuxp shell
now detects the best shell available by default -
Python 3.7+ with
PYTHONBREAKPOINT
set in env will drop intopdb
by default -
Drop into
code.interact
by default instead ofpdb
if no third party shells found -
New options, override:
-
-
#636 + #638 New command:
tmuxp shell
Automatically preloads session, window, and pane via libtmux {ref}
API objects <libtmux:api>
and makes them available in a python console.:width: 100%
As of {ref}
1.6.1 (above) <v1-6-1>
,tmuxp shell
will find the most feature-rich shell available. If you have ipython, or bpython available, it will be selected automatically. Pass--pdb
to use standard library pdb, or--code
to usecode.interact
.In python 3.7+, supports
PYTHONBREAKPOINT
:$ pip install --user ipdb $ env PYTHONBREAKPOINT=ipdb.set_trace tmuxp shell
You can execute python directly via
-c
:$ tmuxp shell -c 'print(session.name); print(window.name)' my_server my_window $ tmuxp shell my_server -c 'print(session.name); print(window.name)' my_server my_window $ tmuxp shell my_server my_window -c 'print(session.name); print(window.name)' my_server my_window $ tmuxp shell my_server my_window -c 'print(window.name.upper())' MY_WINDOW
- #639 Passes start_directory through to new tmux session Fixes #631, thank you @joseph-flinn!
-
#637 Support for loading directories with periods in it
tmuxp load ~/work/your.project
will now workEarlier workaround was to do
tmuxp load ~/work/your.project/.tmuxp.yaml
Fixes #212 and #201
- #618: allow passing
--overwrite
totmuxp freeze
. Thank you @betoSolares! - #589 added option for the the confirm command to auto-confirm the prompt. Thank you @aRkedos!
- #626 Add new session name option to cli. Thank you @joseph-flinn!
- #626 Add test for new session name option
- #626 Update docs for new session name option
- #623 Move docs from RTD to self-serve site
- #623 Modernize Makefiles
- #623 New development docs
- #623 Move doc -> docs
- #623 Move tests to GitHub Actions
- #623 Update pyproject.toml to experiment with poetry packaging
- #619 isort 5
- #629 Update black from 19.10b0 to 20.08b1
-
#616 (via: #599) New command:
tmuxp ls
List commands available via config directory. If the config is printed, it's loadable via
tmuxp load configfilename
without needing to type the full filepath. Thank you @pythops! -
#480 Fix typo, thanks @jstoja
-
#578 Fix typo, thanks @mauroporras
-
#519 Fix typo, thanks @timgates42
-
#506 Fix Makefile typo, thanks @wolfgangpfnuer
-
#619 Update isort to 5.x
-
Travis: Only run on master and PRs one time
-
Travis: Add caching for tmux builds
-
Travis: Test 2.9 and 3.0a
-
#613: Move from Pipenv to Poetry
- #500: Fix window focus
- Fix travis CI builds for python 3.7
- #377: Include examples in source distribution package
- Loosen libtmux version constraint to >0.8 and <0.9 (libtmux 0.8.2 released today)
- #484 CHANGES converted to plain reStructuredText
- #491
tmuxp freeze
will now infer active session with freezing - #490 Fix XDG's
$XDG_CONFIG_HOME
behavior - #483, #482, #480 Doc fixes
- #487 Simplifying handling of configs with no panes (Fixes #470)
- Add tests/*.sh scripts to MANIFEST.in to include them in Pypi package.
- Include twine to dev packages on requirements and Pipfile files.
-
Support Click 7.0
-
Remove unused
__future__
imports -
#471 Update libtmux 0.8.0 -> 0.8.1
-
#404 from @anddam, support XDG base directory
-
Sort imports
-
Add configuration and make command for isort.
-
Add sphinxcontrib-napoleon.
-
Assure requirements/dev.txt dependencies are in Pipfile
-
Update sphinx, releases to latest version
-
Sync requirements/.txt* dependencies with *Pipfile*.
-
Update docstring style to use numpy-style documentation. This enhances readability and plays nicely with sphinx documentation.
-
Documentation overhaul.
- Areas like {meth}
tmuxp.cli.load_workspace
are now documented verbosely. This is so contributors helping on the project can more quickly gain situational awareness in this tricky area of code.
- Areas like {meth}
- #431 Include tests in source distribution
- Loosen click restraint to <7
-
Bump libtmux to 0.8.0
-
#264 Update license from BSD to MIT
-
#348 Continuous integration updates and fixes for Travis CI
- Update builds to use trusty
- Remove older python 3 versions (before 3.6)
- Update pypy versions
-
#349 flake8 via continuous integration
-
Improve reliability of time-sensitive tests by using
while True
with a timeout. -
Update sphinx to 1.7.1
-
Update alagitpull (sphinx theme) to 0.0.19. External websites open in new window.
-
Update pytest to 3.4.1
-
#312 Support for tmux 2.6 layout setting (via hooks) in the following scenarios:
- loading outside tmux
- loading inside tmux, via switch-client
- loading inside tmux, with session in background (with -d), and reattaching/switching to after
- loading session outside tmux in background with -d, and reattaching/switching after
-
#308 Fix bug where layouts don't correctly set on tmux 2.6
-
Upgrade libtmux to 0.7.7
before_script
now respectsstart_directory
in the session root. This makes it easier to run things likepipenv install
as abefore_script
.
- Update libtmux to 0.7.5 for tmux 2.6 hotfix
- #184 - update libtmux to fix environmental variables in the session scope
- Update libtmux to 0.7.4
- Updates to pytest and pytest-rerunfailures
- #252 Fix bug where loading a session with a name matching a subset of current session causes undesired behavior.
- Update libtmux to 0.7.3
- Switch theme to alagitpull (alabaster subtheme)
- Remove unneeded doc dependency packages
- #239 Improve support for formatted options when freezing and using configs with them.
- #236 Support for symlinked directories, thanks @rafi.
- #235 Support for
options_after
, for setting options likesynchronize-panes
. Thanks @sebastianst. - #248 Drop python 2.6 support
- #248 Upgrade libtmux to 0.7.1
- Upgrade colorama from 0.3.7 to 0.3.9
- #229 More helpful error message on systems missing tmux.
- Update libtmux from 0.6.4 to 0.6.5.
- Support for OpenBSD.
- #218 Fix pane ordering by running
select-layout
before splits.
- #207 add custom tmuxp config directory via
TMUXP_CONFIGDIR
variable. - #199 support for running tmuxp on tmux
master
. - update libtmux from 0.6.2 to 0.6.3.
- #198 bump click from 6.6 to 6.7
- #195 pin packages for colorama and doc requirements
- bump libtmux 0.6.0 to 0.6.1
- #193 improve suppress history test, courtesy of @abeyer.
- #191 documentation typo from @modille
- #186 documentation typo from @joelwallis
- #181 Support tmux 2.3
- #132 Handle cases with invalid session names
- update libtmux from 0.5.0 to 0.6.0
-
#65 Ability to specify
options
andglobal_options
via configuration. Also you can specify environment variables via that.Include tests and add example.
- #167 fix attaching multiple sessions
- #165 fix typo in error output, thanks @fpietka
- #166 add new docs on zsh/bash completion
- Add back
tmuxp -V
for version info
- #160 load tmuxp configs by name
- #134 Use
click
for command-line completion, Rewrite command line functionality for importing, config finding, conversion and prompts. - Remove
-l
fromtmuxp import tmuxinator|teamocil
- #158 argparse bug overcome by switch to click
- #163 fix issue re-attaching sessions that are already loaded
- #159 improved support for tmuxinator imports, from @fpietka.
- #161 readme link fixes from @Omeryl.
- switch to readthedocs.io for docs
- #157 bump libtmux to 0.4.1
- version jump 0.11.1 to 1.0
- tests moved to py.test framework
- libtmux core split into its own project
- #145 Add new-window command functionality, @ikirudennis
- #146 Optionally disable shell history suppression, @kmactavish
- #147 Patching unittest timing for shell history suppression
- move doc building, tests and watcher to Makefile
- update .tmuxp.yaml and .tmuxp.json for Makefile change
- overhaul README
- #137 Support for environment settings in configs, thanks
@tasdomas
- Spelling correction, thanks @sehe.
- #135 Load multiple tmux sessions at once, thanks @madprog.
- #131 #133 README and Documentation fixes
- switch to
.venv
for virtualenv directory to not conflict with.env
(used by autoenv). - #130 move to entr(1) for file watching in tests. update docs.
- [compatibility] Support Anaconda Python 2 and 3
- #122 Update to support tmux 2.1, thank you @estin.
- use travis container infrastructure for faster tests
- change test in workspace builder test to use
top(1)
instead ofman(1)
.man(1)
caused errors on some systems wherePAGER
is set.
- #119 Add fix python 3 for sysutils/pytmuxp on FreeBSD ports. See GH issue 119 and #201564 @ FreeBSD Bugzilla. Thanks Ruslan Makhmatkhanov.
- Renamed
config.expandpath
toconfig.expandshell
. - compat 2.7/3.3 wrapper for
EnvironmentVarGuard
for testing. - You can now use environment variables inside of
start_directory
,before_script
,shell_command_before
,session_name
andwindow_name
. - [examples]: add example for environmental variables,
examples/env-variables.json
andexamples/env-variables.yaml
. - #110 de-vendorize colorama.
- #109 fix failure of test_pane_order on fedora machines from @marbu
- #105 append
.txt
extension to manuals (repo only) from @yegortimoshenko. - #107 Fix Server.attached_sessions return type by @thomasballinger.
- update travis to use new tmux git repository.
- [testing]: fix sniffer test runner in python 3
- new animated image demo for RTD and README
-
version bump 0.1.13 -> 0.8.0
-
tmux 2.0 support
-
Fix documentation for :meth:
Session.switch_client()
. -
Add
--log-level
argument. -
Refactor
{Server,Session,Window,Pane}.tmux
into:- {meth}
Server.cmd()
- {meth}
Session.cmd()
- {meth}
Window.cmd()
- {meth}
Pane.cmd()
(See conversation at https://github.com/bitprophet/dotfiles/issues/5)
- {meth}
-
Refactor
util.tmux
into {meth}util.tmux_cmd
.
- Remove
package_metadata.py
in favor of__about__.py
. scent.py
for building docs- docutils from 0.11 to 0.12
bootstrap_env.py
will check for linux, darwin (OS X) and windows and install the correct sniffer file watcher plugin.- testsuite for cli uses {py:func}
tempfile.mkdtemp()
insteadTMP_DIR
(which resolved to.tmuxp
in the testsuite directory. - replace watchingtestrunner in examples.
.tmuxp.conf
and.tmux.json
updated - updates to doc links
make checkbuild
for verifying internal / intersphinx doc references.- Add Warning tmux versions less than 1.4 from @techtonik.
- Add documentation on leading space in
send_keys
from @thomasballinger. - Update about page from teamocil and erb support from @raine.
-
[config] {meth}
config.expand
now resolves directories in configuration via {py:func}os.path.expanduser
and {py:func}os.path.expandvars
. -
[config] {meth}
config.expandpath
for helping resolve paths. -
improved support for loading tmuxp project files from outside current working directory. e.g.
$ tmuxp load /path/to/my/project/.tmuxp.yaml
Will behave better with relative directories.
before_script
now loads relative to project directory with./
.- Use
bootstrap_env.py
in tmuxp's.tmuxp.yaml
and.tmuxp.json
project files. - Improvements to {meth}
util.run_before_script()
, {class}exc.BeforeLoadScriptFailed
behavior to printstdout
and returnstderr
is a non-zero exit is returned. run_script_before
has moved toutil
.BeforeLoadScriptFailed
andBeforeLoadScriptNotExists
has moved to theexc
module.- Tests for
run_script_before
refactored.
- 2 bug fixes and allow panes with no shell commands to accept options, thanks for these 3 patches, @ThiefMaster:
- #73 Fix an error caused by spaces in
start_directory
. - #77 Fix bug where having a
-
in ashell_command
would cauesd a build error. - #76 Don't require
shell_command
to pass options to panes (likefocus: true
).
- The
--force
was not with us.
- #72 Create destination directory if it doesn't exist. Thanks @ThiefMaster.
- New context manager for tests,
temp_session
. - New testsuite,
testsuite.test_utils
for testing testsuite tools. - New command,
before_script
, which is a file to be executed with a return code. It can be a bash, perl, python etc. script. - #56 {ref}
python_api_quickstart <libtmux:quickstart>
- #55 where tmuxp would crash with letter numbers in version. Write tests.
-
{meth}
Window.split_window()
now allows-c start_directory
. -
#35 Builder will now use
-c start_directory
to create new windows and panes.This removes a hack where
default-path
would be set for new pane and window creations. This would bleed into tmux user sessions after creations.
- #49 bug where
package_manifest.py
missing fromMANIFEST.in
would cause error installing.
- section heading normalization.
- tao of tmux section now treated as a chatper. tao of tmux may be split off into its own project.
- use conventions from tony/cookiecutter-pypackage.
- Fix
$ tmuxp freeze
CLI output. - Update
_compat
support module. - Fix extra space in PEP 263.
- #48 Fix Python 3 CLI issue.
- #48
$ tmuxp
without option raises an error. - Add space before send-keys to not populate bash and zsh history.
- now using werkzeug / flask style testsuites.
- #43 Merge
tmuxp -d
for loading in detached mode. Thanks roxit.
- #32 Fix bug where special characters caused unicode caused unexpected outcomes loading and freezing sessions.
- fix duplicate print out of filename with using
tmuxp load .
. - version to 0.1. No
--pre
needed. Future versions will not use rc.
unicode_literals
- Move py2/py3 compliance code to
_compat
.
- #33 Partial rewrite of {meth}
config.expand
. - tmuxp will exit silently with
Ctrl-c
.
- #31 [examples] from stratoukos add
window_index
option, and example.
- #28 shell_command_before in session scope of config causing duplication. New test.
- #26 #29 for OS X tests. Thanks stratoukos.
- #27
$ tmuxp freeze
raises unhelpful message if session doesn't exist.
- fix bug were
focus: true
would not launch sessions when using$ tmuxp load
in a tmux session.
- #25
focus: true
not working in panes. Add tests for focusing panes in config. - {meth}
Pane.select_pane()
. - add new example for
focus: true
.
- #23 fix bug where workspace would not build with pane-base-index
set to 1. Update tests to fix if
pane-base-index
is not 0. - removed
$ tmuxp load --list
functionality. Update {ref}quickstart
accordingly.
- {meth}
Session.show_options
, {meth}Session.show_option
now acceptg
to pass in-g
.
- {meth}
Window.show_window_options
, {meth}Window.show_window_option
now acceptg
to pass in-g
. - #15 Behavioral changes in the WorkspaceBuilder to fix pane ordering.
- #21 Error with unit testing python 2.6 python configuration tests.
Use {py:mod}
tempfile
instead. - WorkspaceBuilder tests have been improved to use async better.
- fix a bug where missing tmux didn't show correct warning.
- Travis now tests python 2.6 as requirement and not allowed to fail.
- #19 accept
-y
argument to answer yes to questions. - {meth}
cli.SessionCompleter
no longer allows a duplicate session after one is added. - ongoing work on {ref}
about-tmux
.
- [translation] documentation in Chinese.
- More work done on the {ref}
about-tmux
page. - {meth}
Pane.split_window()
for splitting {class}Window
attarget-pane
location.
-
[freeze] -
$ tmuxp freeze
will now freeze a window with astart_directory
when all panes in a window are inside the same directory. -
[config] {meth}
config.inline
will now turn panes with no other attributes and 1 command into a single item value.- panes: - shell_command: top # will now inline to: - panes - top This will improve ``$ tmuxp freeze``
- Remove old logger (based on tornado's log.py), replace with new, simpler one.
- fix teamocil import.
- support import teamocil
root
tostart_directory
.
- tagged v0.0.37. Many fixes. Python 2.6 support. Will switch to per-version changelog after 0.1 release.
- support for blank panes (null,
pane
,blank
) and panes with empty strings. - tmuxp freeze supports exporting to blank panes.
- tmuxp freeze will now return a blank pane for panes that would previously return a duplicate shell command, or generic python, node interpreter.
- Support for
[-L socket-name]
and[-S socket-path]
in autocompletion and when loading. Note, switching client into another socket may cause an error. - Documentation tweaking to {ref}
API
, {ref}about-tmux
. - pep257.
- pep257.
- tagged version
v0.0.36
.
- Many documentation, pep257 fixes
- move old {class}
Server
methods__list_panes()
,__list_windows
and__list_sessions
into the single underscore. - #12 fix for
$ tmuxp freeze
by @finder. - Support for spaces in
$ tmuxp attach-session
and$ tmuxp kill-session
, and$ tmuxp freeze
. - [config] support for relative paths of
start_directory
. Add an update config in Start Directory on {ref}examples
.
- New servers for {class}
Server
argumentssocket_name
,socket_path
,config_file
. - {class}
Server
support for-2
withcolors=256
andcolors=8
. $ tmuxp -2
for forcing 256 colors andtmuxp -8
for forcing 88.- [config] Concatenation with
start_directory
via {meth}config.trickle()
if windowstart_directory
is alphanumeric / relative (doesn't start with/
). See {ref}Examples
in start directory. - Fix bug with import teamocil and tmuxinator
- Improve quality of tmuxinator imports. Especially
session_name
andstart_directory
. - Allow saving with
~
in file destination.
- {meth}
util.is_version()
- correctly {meth}
config.trickle()
thestart_directory
. - get
start_directory
working for configs - fix :meth:
Window.kill_window()
target tosession_id:window_index
for compatibility and pass tests. - [examples]: Example for
start_directory
. - fix bug where first and second window would load in mixed order
- {class}
Window.move_window()
for moving window. - doc overhaul. front page, renamed orm_al.rst to internals.rst.
- fix bug where if inside tmux, loading a workspace via switch_client wouldn't work.
- fix bug where
tmuxp load .
would return an error instead of a notice. tmuxp freeze <filename>
experimental- tmuxp now has experimental support for freezing live sessions.
- {meth}
Window.kill_window()
- support for
start_directory
(work in progress)
- {meth}
Window.select_pane
now accepts-l
,-U
,-D
,-L
,-R
. - support for
automatic-rename
option. - 3 new {ref}
examples
, 'main-pane-height', 'automatic-rename', and 'shorthands'. - enhancements to prompts
tmuxp import
for teamocil and tmuxinator now has a wizard and offers to save in JSON or YAML format.- [b6c2e84] Fix bug where tmuxp load w/ session already loaded would switch/attach even if no was entered
- when workspace loader crashes, give option to kill session, attach it or detach it.
- tmux 1.8
set-option
/set-window-options
commandtarget-window
fix. - {class}
WorkspaceBuilder
now has.session
attribute accessible publicly. - tmux will now use {meth}
Session.switch_client
and {meth}Session.attach_session
to open new sessions instead ofos.exec
. - [config] tmuxp now allows a new shorter form for panes. Panes can just be a
string. See the shorthand form in the {ref}
examples
section. - [config] support loading
.yml
.
- fix
tmuxp load .
fixed - fix
tmuxp convert <file>
fixed. - pep257 fixes.
- {class}
Pane
now has {meth}Pane.set_width
and {meth}Pane.set_height
. ./run_tests.py --tests
now automatically prependstmuxp.testsuite
to names.- {meth}
Window.tmux
and {meth}Pane.tmux
will automatically add their{window/pane}_id
if one isn't specific.
- argcomplete overhaul for CLI bash completion.
tmuxp load
,tmuxp convert
andtmuxp import
now support relative and full filenames in addition to searching the config directory.
- initial version of tmuxinator config importer. it does not support all options and it not guaranteed to fully convert window/pane size and state.
- {meth}
config.in_dir
supports a list ofextensions
for filetypes to search, i.e.['.yaml', '.json']
. - {meth}
config.is_config_file
now supportsextensions
argument as a string also. - fix
$ tmuxp load -l
to work correctly alongside$ tmuxp load filename
.
- fix bug where
-v
and--version
wouldn't print version. - property handle case where no tmux server exists when
attach-session
orkill-session
is used. - test fixtures and initial work for importing tmuxinator configs
- clean out old code for
automatic-rename
option. it will be reimplemented fresh. - check for
oh-my-zsh
when using$SHELL
zsh
. Prompt ifDISABLE_AUTO_TITLE
is unset or set totrue
. - tmuxp can now
$ tmuxp convert <file>
from JSON <=> YAML, back and forth. - New examples in JSON. Update the {ref}
examples
page in the docs. - [dev]
.tmuxp.json
now exists as a config for tmuxp development and as an example. - Fix bug where
tmuxp kill-session
would give bad output - Fix bug in tab completion for listing sessions with no tmux server is active.
- zsh/bash/tcsh completion improvements for tab-completion options
- tmuxp
kill-session
with tab-completion. - tmuxp
attach-session
with tab-completion. Attach session willswitch-client
for you if you are inside of of a tmux client. - tmuxp
load
for loading configs. - unit test fixes.
- Make 1.8 the official minimym version, give warning notice to upgrade tmux if out of date
- Fix regression causing unexpected build behavior due to unremoved code supporting old tmux versions.
- Added 2 new examples to the {ref}
examples
page. - Examples now have graphics
$ tmuxp -v
will print the version info.
-
tmuxp will now give warning and sys.exit() with a message if
tmux
not found in system PATH -
internal overhaul of {class}
Server
, {class}Session
, {class}Window
, and {class}Pane
continues.- {class}
Server
has @property {meth}Server.sessions
, which is forward to {meth}Server.list_sessions()
(kept to keep tmux commands in serendipty with api), {meth}Server._list_sessions()
returns dict object from {meth}Server.__list_sessions()
tmux command. {meth}Server.__list_sessions()
exists to keep the command layered so it can be tested against in a matrix with travis and compatibility methods can be made. - {class}
Session
now has @property {meth}Session.windows
returning a list of {class}Window
objects via {meth}Session.list_windows()
. @property {meth}Session._windows
to {meth}Session._list_windows()
to return a list of dicts without making objects. - {class}
Window
now has @property {meth}Window.panes
returning a list of {class}Pane
objects via {meth}Window.list_panes()
. @property {meth}Window._panes
to {meth}Window._list_panes()
to return a list of dicts without making objects.
- {class}
-
internal overhaul of {class}
Server
, {class}Session
, {class}Window
, and {class}Pane
.Session
,Window
andPane
now refer to a data object in {class}Server
internally and always pull the freshest data.- A lot of code and complexity regarding setting new data for objects
has been reduced since objects use their unique key identifier to
filter their objects through the windows and panes in
Server
object. Server
object is what does the updating now.
-
[project] some research into supporting legacy tmux versions. tmux 1.6 and 1.7 support seem likely eventually if there is enough demand.
-
python 3 support
- updated README docs with new project details, screenshots
- new example
.tmuxp.yaml
file updated to include development workflow. Removed nodemon as the tool for checking files for now. - Support for switching sessions from within tmux. In both cases after the the session is built and if session already exists.
- use {meth}
util.which()
from salt.util to find tmux binary. - add MANIFEST.in, fix issue where package would not install because missing file
- bash / zsh completion.
- New page on {ref}
internals
. - Updates to {ref}
about-tmux
page. - add vim modeline for rst to bottom of this page
- Server is now a subclass of
util.TmuxObject
. - subclasses of {class}
util.TmuxRelationalObject
, {class}Server
, {class}Session
, {class}Window
, {class}Pane
now have {meth}util.TmuxRelationalObject.getById
(similar to .get() in backbone.js collection), {meth}util.TmuxRelationalObject.where
and {meth}util.TmuxRelationalObject.findWhere
(.where() and .findWhere()), to easily find child objects. - tmux object mapping has been split into
{class}
util.TmuxMappingObject
. The mapping and the relational has been decoupled to allow {class}Server
to have children while not being a dict-like object. - {class}
Server
, {class}Session
, {class}Window
, {class}Pane
now explicitly mixin subclasses.
-
new theme
-
initial examples, misc. updates, front page update.
-
support for
$ tmux .
to load.tmuxp.{yaml/json/py}
in current working directory. -
support for
socket-name
(-L
) andsocket-path
(socket-path
) -
[config] Support for 1-command pane items.
session_name: my session windows: - window_name: hi panes: - bash - htop
-
If session name is already exists, prompt to attach.
- can now -l to list configs in current directory and $HOME/.tmuxp
- tmuxp can now launch configs and build sessions
- new exceptions
- {meth}
config.check_consistency()
to verify and diagnose issues with config files. - {meth}
cli.startup()
- {meth}
config.is_config_file()
- {meth}
config.in_dir()
- {meth}
config.in_cwd()
- {meth}
config.inline()
to produce far far better looking config exports and tests. - {meth}
Pane.resize_pane()
and tests - documentation fixes and updates
- {meth}
Session.refresh()
, {meth}Window.refresh()
, {meth}Pane.refresh()
. - {meth}
Server.find()
, {meth}Session.find()
, {meth}Window.find()
.
- Test documentation updates
- Builder is now {class}
WorkspaceBuilder
+ tests.- WorkspaceBuilder can build panes
- WorkspaceBuilder can build windows and set options
- {meth}
Window.show_window_options()
, {meth}Window.show_window_option()
, {meth}Window.set_window_option()
- {meth}
Session.show_options()
, {meth}Session.show_option()
, {meth}Session.set_option()
- More preparation for builder / session maker utility.
- test runner and test suite overhaul.
- Documentation for development environment and test runner updated.
- Travis now tests against tmux 1.8 and latest source. Door open for future testing against python 3 and earlier tmux versions in the future.
- Quiet logger down in some areas
- future imports for future python 3 compatibility
- setup.py import version via regex from tmuxp package
- move beginnings of cli to
tmuxp.cli
- New logging module
- Removed dependency logutils
- Removed dependency sh
- switch to semver