Changelogs >

Tmuxp

PyUp actively tracks 437,546 Python packages for vulnerabilities to keep your Python environments secure.

Scan your dependencies

1.12.1

Bug fix

- {issue}`787` Fix {issue}`724` Fix `start_directory` issue with first pane,
credit: nvasilas.

1.12.0

_Mostly internal cleanups, no features_

Tests

- {issue}`774` Fix {issue}`620` tests not finishing
- {issue}`777` Fix {issue}`778` to move the old, broken `retry()` to the new
`retry_until()`, credit: categulario.
- {issue}`783` Fix {issue}`620` Symlink edge for for pane order tests, credit: categulario.
- {issue}`781` Testing with ZSH will mock `~/.zshrc` startup file for cleaner
pane outputs.

1.11.1

Bug fix

- {issue}`775`: Assure click 8+

tmuxp 1.10 supports click 7.x.

1.11.0

Compatibility

- {issue}`773`: Allow click 8.1.x
- {issue}`770`: Fix shell completion for `tmuxp load` {kbd}`tab` and `tmuxp freeze`
{kbd}`tab`
- Note: Requires click 8+ ({issue}`770`)

Maintenance

- {issue}`762`: CLI: Break up into modules in _cli.py_ -> _cli/{command}_
- {issue}`761`: Refactor _tests/_ constants and fixtures
- Show libtmux version with `-V` / `--version`

Development

- 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.

1.10.1

Compatibility

- {issue}`773` (backport): Allow click 8.1.x

1.10.0

Compatibility

- Final python 3.7 and 3.8 release

Bug fixes and security updates will go to
[`v1.10.x`](https://github.com/tmux-python/tmuxp/tree/v1.10.x)

What's new

- {issue}`747`: Skip execution via `enter: false`

See {ref}`enter`.

:::{note}

_Experimental setting_: behavior and api is subject to change until stable.

:::

yaml
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


- {issue}`750`: Pause execution via `sleep_before: [int]` and `sleep_after: [int]`

See {ref}`sleep`.

:::{note}

_Experimental setting_: behavior and api is subject to change until stable.

:::

yaml
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"


- {issue}`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](https://github.com/davidatbu)

- {issue}`672`: Panes now accept `shell` for their initial command.

Equivalent to `tmux split-windows`'s `[shell-command]`

yaml
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

Improvements

- Improve `tmuxp freeze` UX flow, credit joseph-flinn ({issue}`657`, in re: {issue}`627`)
- `tmuxp freeze` will now detect the attached session if no session name
is specified. Credit: will-ockmore. ({issue}`660`)

Bugs

- Fix loading of `.yml` files with `tmuxp convert`, thank you kalixi! ({issue}`725`)

Internal API

- {issue}`752`: Command structure (internal API)

To pave the way for per-command options such as `enter: false` ({issue}`53`), commands are now a different format:

Before, [`str`](str):

python
"echo hello"


After, [`dict`](dict):

python
{
"cmd": "echo hello"
}


This is purely internal. Normal usage should be the same since the
configuration emits the equivalent result.

- {issue}`752`: Configuration parsing refactorings

Development

- Run through black + isort with string normalization ({issue}`738`). This way we can
use black without any configuration. (One-time, big diff)
- Run codebase through pyupgrade ({issue}`745`)
- Add `codeql-analysis.yml` to try it out

Documentation

- Move to `furo` sphinx theme
- Reorganize documentation into sections
- Added examples for `enter: false` and `sleep: [second]`

1.9.4

Packaging

- `poetry build` used to package in place of `python setup.py build` ({issue}`729`)

Package maintainers: If you run into any issues check in at {issue}`625` and file an issue.

Additionally, `libtmux` has been pinned to a similar release at
[0.10.3](https://pypi.org/project/libtmux/0.10.3/) which has used the new
build process.

- `poetry publish` instead of `twine upload dist/*` ({issue}`729`)

Similar to the above, reach out to the {issue}`625` issue if you bump into problems.

What's new

- `tmuxp edit` for configuration changes ({issue}`707`, GlebPoljakov)

Inside of configuration directory: `tmuxp edit yourconfig`

Inside a project: `tmuxp edit .`

Removed support

- Python 3.6 support has been removed ({issue}`726`)

Development

- We are trying `.pre-commit-config.yaml` in pull requests to automate
black, isort and flake8 for those who forget ({issue}`726`)
- Poetry update 1.1.7 -> 1.1.12 and use new installer URL ({issue}`726`)
- Black updated 21.9b0 -> 21.12b0 ({issue}`726`)

1.9.3

- {issue}`700`: Add `-h` / `--help` option, thanks GHPS
- {issue}`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)
- {issue}`696`: Typo fix, thanks inkch

1.9.2

- {issue}`686`: Allow click 8.0.x
- Remove `manual/`, move to https://github.com/tmux-python/tmux-manuals

1.9.1

- libtmux: Update to 0.10.1+ to include `Window.select_window()` fix

https://github.com/tmux-python/libtmux/pull/271

1.9.0

- libtmux: Update to 0.10.x

1.8.2

- {issue}`474` Re-release with `python setup.py sdist bdist_wheel` to
fix missing test files

1.8.1

- {issue}`681` Bump version to make homebrew release easier

1.8.0.post0

- {issue}`681` tmuxp is now available on homebrew! Thank you jvcarli!

1.8.0

- {issue}`662` CI: Only update docs when changed
- {issue}`666` CI: Move test plugin packages from pyproject.toml to
pytest fixtures. Fixes {issue}`658`
- {issue}`661`

- Bump minimum version 3.5 -> 3.6
- Drop python 2.7 support
- Modernize syntax (remove `__future__` and modesets)
- Update black to 21.6b0

1.7.2

- {issue}`666` CI: Move test plugin packages from pyproject.toml to
pytest fixtures. Fixes {issue}`658`

1.7.1

- {issue}`665` Support for passing tmux config file (`-f`), thanks
jfindlay! Fixes {issue}`654`

1.7.0

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][1.7.x branch].

- {issue}`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!

- {issue}`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!

- {issue}`647` Improvement: Logging to file:

`tmuxp load <filename> --log-level outputfile.log`

- {issue}`643` New command: Debug information

Port `tmuxp debug-info` from via v1.6.2

[1.7.x branch]: https://github.com/tmux-python/tmuxp/tree/v1.7.x

1.7.0a4

- Port click package fix from 1.6.4

1.7.0a3

- Port `tmuxp load <filename> --log-level outputfile.log` from
1.6.3

1.7.0a2

- Port `tmuxp debug-info` from {issue}`643` from via v1.6.2

1.7.0a1

- {issue}`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!

1.6.5

- {issue}`665` Support for passing tmux config file (`-f`), thanks jfindlay! Fixes
{issue}`654`

1.6.4

- {issue}`651` Fix packaging issue with click, thanks dougharris! Fixes
{issue}`649`

1.6.3

- {issue}`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`

1.6.2

- {issue}`643` New command `tmuxp debug-info` for creating github
issues, fixes {issue}`352`. Thank you joseph-flinn!

(v1-6-1)=

1.6.1

- {issue}`641` Improvements to `shell`

Thanks [django-extensions][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 into `pdb` by
default
- Drop into `code.interact` by default instead of `pdb` if no third
party shells found
- New options, override:

- `--pdb`: Use plain old `breakpoint()` (python 3.7+) or
`pdb.set_trace`
- `--code`: Drop into `code.interact`, accepts `--use-pythonrc`
- `--bpython`: Drop into [bpython][bpython]
- `--ipython`: Drop into [ipython][ipython]
- `--ptpython`: Drop into [ptpython][ptpython], accepts `--use-vi-mode`
- `--ptipython`: Drop into [ipython][ipython] + [ptpython][ptpython], accepts
`--use-vi-mode`

[django-extensions]: https://github.com/django-extensions/django-extensions

1.6.0

- {issue}`636` + {issue}`638` New command: `tmuxp shell`

Automatically preloads session, window, and pane via [libtmux][libtmux]
{ref}`API objects <libtmux:api>` and makes them available in a python
console.

{image} _static/tmuxp-shell.gif
: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][ipython], [ptpython][ptpython], or
[bpython][bpython] available, it will be selected automatically. Pass `--pdb`
to use standard library pdb, or `--code` to use `code.interact`.

In python 3.7+, supports `PYTHONBREAKPOINT`:

{code-block} sh

$ pip install --user ipdb
$ env PYTHONBREAKPOINT=ipdb.set_trace tmuxp shell



You can execute python directly via `-c`:

{code-block} sh

$ 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



[bpython]: https://bpython-interpreter.org/
[ipython]: https://ipython.org/
[ptpython]: https://github.com/prompt-toolkit/ptpython

1.5.8

- {issue}`639` Passes start_directory through to new tmux session
Fixes {issue}`631`, thank you joseph-flinn!

1.5.7

- {issue}`637` Support for loading directories with periods in it

`tmuxp load ~/work/your.project` will now work

Earlier workaround was to do `tmuxp load ~/work/your.project/.tmuxp.yaml`

Fixes {issue}`212` and {issue}`201`

1.5.6

- {issue}`618`: allow passing `--overwrite` to `tmuxp freeze`. Thank you
betoSolares!
- {issue}`589` added option for the the confirm command to auto-confirm the prompt.
Thank you aRkedos!
- {issue}`626` Add new session name option to cli. Thank you joseph-flinn!
- {issue}`626` Add test for new session name option
- {issue}`626` Update docs for new session name option
- {issue}`623` Move docs from RTD to self-serve site
- {issue}`623` Modernize Makefiles
- {issue}`623` New development docs
- {issue}`623` Move doc -> docs
- {issue}`623` Move tests to GitHub Actions
- {issue}`623` Update pyproject.toml to experiment with poetry packaging
- {issue}`619` isort 5
- {issue}`629` Update black from 19.10b0 to 20.08b1

1.5.5

- {issue}`616` (via: {issue}`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!

- {issue}`480` Fix typo, thanks jstoja
- {issue}`578` Fix typo, thanks mauroporras
- {issue}`519` Fix typo, thanks timgates42
- {issue}`506` Fix Makefile typo, thanks wolfgangpfnuer
- {issue}`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
- {issue}`613`: Move from Pipenv to Poetry

1.5.4

- {issue}`500`: Fix window focus
- Fix travis CI builds for python 3.7

1.5.3

- {issue}`377`: Include examples in source distribution package

1.5.2

- Loosen libtmux version constraint to >0.8 and <0.9 (libtmux 0.8.2
released today)
- {issue}`484` CHANGES converted to plain reStructuredText
- {issue}`491` `tmuxp freeze` will now infer active session with freezing
- {issue}`490` Fix XDG's `$XDG_CONFIG_HOME` behavior
- {issue}`483`, {issue}`482`, {issue}`480` Doc fixes
- {issue}`487` Simplifying handling of configs with no panes (Fixes
{issue}`470`)

1.5.1

- Add tests/\*.sh scripts to MANIFEST.in to include them in Pypi package.
- Include twine to dev packages on requirements and Pipfile files.

1.5.0

- Support Click 7.0
- Remove unused `__future__` imports
- {issue}`471` Update libtmux 0.8.0 -> 0.8.1
- {issue}`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.

1.4.2

- {issue}`431` Include tests in source distribution

1.4.1

- Loosen click restraint to <7

1.4.0

- Bump libtmux to 0.8.0
- {issue}`264` Update license from BSD to MIT
- {issue}`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

- {issue}`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

1.3.5

- {issue}`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

- {issue}`308` Fix bug where layouts don't correctly set on tmux 2.6
- Upgrade libtmux to 0.7.7

1.3.4

- {}`before_script` now respects {}`start_directory`
in the session root. This makes it easier to run things like {}`pipenv install` as a {}`before_script`.

1.3.3

- Update libtmux to 0.7.5 for tmux 2.6 hotfix

1.3.2

- {issue}`184` - update libtmux to fix environmental variables in the
session scope
- Update libtmux to 0.7.4
- Updates to pytest and pytest-rerunfailures

1.3.1

- {issue}`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

1.3.0

- {issue}`239` Improve support for formatted options when freezing and
using configs with them.
- {issue}`236` Support for symlinked directories, thanks rafi.
- {issue}`235` Support for `options_after`, for setting options like
`synchronize-panes`. Thanks sebastianst.
- {issue}`248` Drop python 2.6 support
- {issue}`248` Upgrade libtmux to 0.7.1
- Upgrade colorama from 0.3.7 to 0.3.9

1.2.8

- {issue}`229` More helpful error message on systems missing
tmux.
- Update libtmux from 0.6.4 to 0.6.5.

1.2.7

- Support for OpenBSD.

1.2.6

- {issue}`218` Fix pane ordering by running `select-layout` before
splits.

1.2.5

- {issue}`207` add custom tmuxp config directory via
`TMUXP_CONFIGDIR` variable.
- {issue}`199` support for running tmuxp on tmux `master`.
- update libtmux from 0.6.2 to 0.6.3.

1.2.4

- {issue}`198` bump click from 6.6 to 6.7
- {issue}`195` pin packages for colorama and doc requirements

1.2.3

- bump libtmux 0.6.0 to 0.6.1
- {issue}`193` improve suppress history test, courtesy of abeyer.
- {issue}`191` documentation typo from modille
- {issue}`186` documentation typo from joelwallis

1.2.2

- {issue}`181` Support tmux 2.3

1.2.1

- {issue}`132` Handle cases with invalid session names
- update libtmux from 0.5.0 to 0.6.0

1.2.0

- {issue}`65` Ability to specify `options` and `global_options` via
configuration. Also you can specify environment variables via that.

Include tests and add example.

1.1.1

- {issue}`167` fix attaching multiple sessions
- {issue}`165` fix typo in error output, thanks fpietka
- {issue}`166` add new docs on zsh/bash completion
- Add back `tmuxp -V` for version info

1.1.0

- {issue}`160` load tmuxp configs by name
- {issue}`134` Use `click` for command-line completion, Rewrite command
line functionality for importing, config finding, conversion and prompts.
- Remove `-l` from `tmuxp import tmuxinator|teamocil`
- {issue}`158` argparse bug overcome by switch to click

1.0.2

- {issue}`163` fix issue re-attaching sessions that are already loaded
- {issue}`159` improved support for tmuxinator imports, from fpietka.
- {issue}`161` readme link fixes from Omeryl.

1.0.1

- switch to readthedocs.io for docs
- {issue}`157` bump libtmux to 0.4.1

1.0

[raine]: https://github.com/raine
[techtonik]: https://github.com/techtonik
[thiefmaster]: https://github.com/ThiefMaster
[pep 263]: http://www.python.org/dev/peps/pep-0263/
[roxit]: https://github.com/roxit
[documentation in chinese]: http://tmuxp-zh.readthedocs.io
[wrongwaycn]: https://github.com/wrongwaycn
[tornado's log.py]: https://github.com/facebook/tornado/blob/master/tornado/log.py
[underscore.js]: http://underscorejs.org/
[backbone.js]: http://backbonejs.org/
[.get()]: http://backbonejs.org/#Collection-get
[.where()]: http://underscorejs.org/#where
[.findwhere()]: http://underscorejs.org/#findWhere
[libtmux]: https://github.com/tmux-python/libtmux

<!---
vim: set filetype=markdown:
-->

1.0.0rc1

- version jump 0.11.1 to 1.0
- tests moved to py.test framework
- [libtmux][libtmux] core split into its own project
- {issue}`145` Add new-window command functionality, ikirudennis
- {issue}`146` Optionally disable shell history suppression, kmactavish
- {issue}`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

0.11.0

- {issue}`137` Support for environment settings in configs, thanks
{}`tasdomas`
- Spelling correction, thanks [sehe][sehe].

0.10.0

- {issue}`135` Load multiple tmux sessions at once, thanks [madprog][madprog].
- {issue}`131` {issue}`133` README and Documentation fixes

0.9.3

- switch to `.venv` for virtualenv directory to not conflict
with `.env` (used by [autoenv][autoenv]).
- {issue}`130` move to [entr(1)][entr(1)] for file watching in tests. update docs.
- [compatibility] Support [Anaconda Python][anaconda python] 2 and 3

0.9.2

- {issue}`122` Update to support tmux 2.1, thank you [estin][estin].
- use travis container infrastructure for faster tests
- change test in workspace builder test to use `top(1)` instead of
`man(1)`. `man(1)` caused errors on some systems where `PAGER` is set.

0.9.1

- {issue}`119` Add fix python 3 for [sysutils/pytmuxp][sysutils/pytmuxp] on FreeBSD ports.
See GH issue 119 and [201564][201564] FreeBSD Bugzilla. Thanks Ruslan
Makhmatkhanov.

0.9.0

- Renamed `config.expandpath` to `config.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` and `window_name`.
- [examples]: add example for environmental variables,
`examples/env-variables.json` and `examples/env-variables.yaml`.
- {issue}`110` de-vendorize [colorama][colorama]. Thanks [marbu][marbu].
- {issue}`109` fix failure of test_pane_order on fedora machines from
[marbu][marbu]
- {issue}`105` append `.txt` extension to manuals (repo ony)
from [yegortimoshenko][yegortimoshenko].
- {issue}`107` Fix Server.attached_sessions return type by
[thomasballinger][thomasballinger].
- update travis to use new tmux git repository.

0.8.1

- [testing]: fix sniffer test runner in python 3
- new animated image demo for RTD and README

0.8.0

- 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>)

- Refactor `util.tmux` into {meth}`util.tmux_cmd`.

0.1.51

- {issue}`49` bug where `package_manifest.py` missing
from `MANIFEST.in` would cause error installing.

0.1.13

- 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][sniffer] file watcher plugin.
- testsuite for cli uses {py:func}`tempfile.mkdtemp()` instead
`TMP_DIR` (which resolved to `.tmuxp` in the testsuite directory.
- replace [watchingtestrunner][watchingtestrunner] with [sniffer][sniffer] 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][techtonik].
- Add documentation on leading space in `send_keys`
from [thomasballinger][thomasballinger].
- Update about page from teamocil and erb support from [raine][raine].

0.1.12

- [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.

0.1.11

- `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 print `stdout` and
return `stderr` is a non-zero exit is returned.
- `run_script_before` has moved to `util`.
- `BeforeLoadScriptFailed` and `BeforeLoadScriptNotExists`
has moved to the `exc` module.
- Tests for `run_script_before` refactored.

0.1.10

- 2 bug fixes and allow panes with no shell commands to accept options,
thanks for these 3 patches, [ThiefMaster][thiefmaster]:
- {issue}`73` Fix an error caused by spaces in
`start_directory`.
- {issue}`77` Fix bug where having a `-` in a
`shell_command` would cauesd a build error.
- {issue}`76` Don't require `shell_command` to
pass options to panes (like `focus: true`).

0.1.9

- The `--force` was not with us.

0.1.8

- {issue}`72` Create destination directory if it doesn't exist. Thanks
[ThiefMaster][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.
- {issue}`56` {ref}`python_api_quickstart <libtmux:quickstart>`

0.1.7

- {issue}`55` where tmuxp would crash with letter numbers in version.
Write tests.

0.1.6

- {meth}`Window.split_window()` now allows `-c start_directory`.
- {issue}`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.

0.1.5

- 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][tony/cookiecutter-pypackage].

0.1.4

- Fix `$ tmuxp freeze` CLI output.
- Update `_compat` support module.
- Fix extra space in [PEP 263][pep 263].

0.1.3

- {issue}`48` Fix Python 3 CLI issue.
- {issue}`48` `$ tmuxp` without option raises an error.
- Add space before send-keys to not populate bash and zsh
history.

0.1.2

- now using werkzeug / flask style testsuites.
- {issue}`43` Merge `tmuxp -d` for loading in detached mode.
Thanks [roxit][roxit].

0.1.1

- {issue}`32` Fix bug where special characters caused unicode caused
unexpected outcomes loading and freezing sessions.

0.1.0

- fix duplicate print out of filename with using `tmuxp load .`.
- version to 0.1. No `--pre` needed. Future versions will not use rc.

0.1rc8

- `unicode_literals`
- Move py2/py3 compliancy code to `_compat`.

0.1rc7

- {issue}`33` Partial rewrite of {meth}`config.expand`.
- tmuxp will exit silently with `Ctrl-c`.

0.1rc6

- {issue}`31` [examples] from stratoukos add `window_index` option,
and example.

0.1rc5

- {issue}`28` shell_command_before in session scope of config causing
duplication. New test.
- {issue}`26` {issue}`29` for OS X tests. Thanks stratoukos.
- {issue}`27` `$ tmuxp freeze` raises unhelpful message if session doesn't
exist.

0.1rc4

- fix bug were `focus: true` would not launch sessions when using
`$ tmuxp load` in a tmux session.

0.1rc3

- {issue}`25` `focus: true` not working in panes. Add
tests for focusing panes in config.
- {meth}`Pane.select_pane()`.
- add new example for `focus: true`.

0.1rc2

- {issue}`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.

0.1rc1

- [pep8][pep8] and [pep257][pep257] in unit tests.
- Changelog will now be updated on a version basis, use [pep440][pep440]
versioning.

0.1dev

- switch to semver

[tmuxinator]: https://github.com/aziz/tmuxinator
[teamocil]: https://github.com/remiprev/teamocil
[argcomplete]: https://github.com/kislyuk/argcomplete
[pep257]: http://www.python.org/dev/peps/pep-0257/
[pep8]: http://www.python.org/dev/peps/pep-0008/
[pep440]: http://www.python.org/dev/peps/pep-0440/
[tony/cookiecutter-pypackage]: https://github.com/tony/cookiecutter-pypackage
[tasdomas]: https://github.com/tasdomas
[sehe]: https://github.com/sehe
[madprog]: https://github.com/madprog
[autoenv]: https://github.com/kennethreitz/autoenv
[entr(1)]: http://entrproject.org/
[anaconda python]: http://docs.continuum.io/anaconda/index
[estin]: https://github.com/estin
[sysutils/pytmuxp]: http://www.freshports.org/sysutils/py-tmuxp/
[201564]: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=201564
[colorama]: https://pypi.python.org/pypi/colorama
[marbu]: https://github.com/marbu
[yegortimoshenko]: https://github.com/yegortimoshenko
[thomasballinger]: https://github.com/thomasballinger
[sniffer]: https://github.com/jeffh/sniffer