(examples)=
tmuxp has a short-hand syntax to for those who wish to keep their configs punctual.
::::{sidebar} short hand
.. aafig::
:textual:
+-------------------+
| 'did you know' |
| 'you can inline' |
+-------------------+
| 'single commands' |
| |
+-------------------+
| 'for panes' |
| |
+-------------------+
::::
:language: yaml
:language: json
No need to repeat pwd
or a dummy command. A null
, 'blank'
,
'pane'
are valid.
Note ''
counts as an empty carriage return.
:language: yaml
:language: json
::::{sidebar} 2 pane
.. aafig::
+-----------------+
| $ pwd |
| |
| |
+-----------------+
| $ pwd |
| |
| |
+-----------------+
::::
:language: yaml
:language: json
::::{sidebar} 3 panes
.. aafig::
+-----------------+
| $ pwd |
| |
| |
+--------+--------+
| $ pwd | $ pwd |
| | |
| | |
+--------+--------+
::::
:language: yaml
:language: json
::::{sidebar} 4 panes
.. aafig::
+--------+--------+
| $ pwd | $ pwd |
| | |
| | |
+--------+--------+
| $ pwd | $ pwd |
| | |
| | |
+--------+--------+
::::
:language: yaml
:language: json
Equivalent to tmux new-window -c <start-directory>
.
:language: yaml
:language: json
tmuxp will replace environment variables wrapped in curly brackets for values of these settings:
start_directory
before_script
session_name
window_name
shell_command_before
global_options
options
in session scope and window scope
tmuxp replaces these variables before-hand with variables in the
terminal tmuxp
invokes in.
In this case of this example, assuming the username "user":
$ MY_ENV_VAR=foo tmuxp load examples/env-variables.yaml
and your session name will be session - user (foo)
.
Shell variables in shell_command
do not support this type of
concatenation. shell_command
and shell_command_before
both
support normal shell variables, since they are sent into panes
automatically via send-key
in tmux(1)
. See ls $PWD
in
example.
If you have a special case and would like to see behavior changed, please make a ticket on the issue tracker.
:language: yaml
:language: json
tmuxp will set session environment variables.
:language: yaml
:language: json
tmuxp allows focus: true
for assuring windows and panes are attached /
selected upon loading.
:language: yaml
:language: json
tmuxp allows suppress_history: false
to override the default command /
suppression when building the workspace.
This will add the shell_command
to the bash history in the pane.
:language: yaml
:language: json
You can specify a window's index using the window_index
property. Windows
without window_index
will use the lowest available window index.
:language: yaml
:language: json
Every pane can have its own shell or application started. This allows for usage
of the remain-on-exit
setting to be used properly, but also to have
different shells on different panes.
:language: yaml
:language: json
Works with global (server-wide) options, session options and window options.
Including automatic-rename
, default-shell
,
default-command
, etc.
:language: yaml
:language: json
Apply window options after panes have been created. Useful for
synchronize-panes
option after executing individual commands in each
pane during creation.
:language: yaml
:language: json
:language: yaml
:language: json
:::{seealso}
{ref}tmuxp developer config
in the {ref}developing
section.
:::
:language: yaml
:language: json
You can use YAML's multiline syntax to easily split multiple commands into the same shell command: https://stackoverflow.com/a/21699210
session_name: my project
shell_command_before:
- >
[ -d `.venv/bin/activate` ] &&
source .venv/bin/activate &&
reset
- sleep 1
windows:
- window_name: first window
layout: main-horizontal
focus: true
panes:
- focus: True
- blank
- >
poetry run ./manage.py migrate &&
npm -C js run start
- poetry run ./manage.py runserver
options:
main-pane-height: 35
You can use before_script
to run a script before the tmux session
starts building. This can be used to start a script to create a virtualenv
or download a virtualenv/rbenv/package.json's dependency files before
tmuxp even begins building the session.
It works by using the Exit Status code returned by a script. Your script can be any type, including bash, python, ruby, etc.
A successful script will exit with a status of 0
.
Important: the script file must be chmod executable +x
or 755
.
Run a python script (and check for it's return code), the script is
relative to the .tmuxp.yaml
's root (Windows and panes omitted in
this example):
session_name: my session
before_script: ./bootstrap.py
# ... the rest of your config
{
"session_name": "my session",
"before_script": "./bootstrap.py"
}
Run a shell script + check for return code on an absolute path. (Windows and panes omitted in this example)
session_name: another example
before_script: /absolute/path/this.sh # abs path to shell script
# ... the rest of your config
{
"session_name": "my session",
"before_script": "/absolute/path/this.sh"
}
You can load your software project in tmux by placing a .tmuxp.yaml
or
.tmuxp.json
in the project's config and loading it.
tmuxp supports loading configs via absolute filename with tmuxp load
and via $ tmuxp load .
if config is in directory.
$ tmuxp load ~/workspaces/myproject.yaml
See examples of tmuxp
in the wild. Have a project config to show off?
Edit this page.
- https://github.com/tony/dockerfiles/blob/master/.tmuxp.yaml
- https://github.com/tony/vcspull/blob/master/.tmuxp.yaml
- https://github.com/tony/sphinxcontrib-github/blob/master/.tmuxp.yaml
You can use start_directory: ./
to make the directories relative to
the config file / project root.
:::{versionadded} 1.3.4
before_script
CWD's into the root (session)-level
start_directory
.
:::
If you use pipenv / poetry, you can use a script like this to ensure your packages are installed:
# assuming your .tmuxp.yaml is in your project root directory
session_name: my pipenv project
start_directory: ./
before_script: pipenv install --dev --skip-lock # ensure dev deps install
windows:
- window_name: django project
focus: true
panes:
- blank
- pipenv run ./manage.py runserver
You can also source yourself into the virtual environment using
shell_command_before
:
# assuming your .tmuxp.yaml is in your project root directory
session_name: my pipenv project
start_directory: ./
before_script: pipenv install --dev --skip-lock # ensure dev deps install
shell_command_before:
- '[ -d `pipenv --venv` ] && source `pipenv --venv`/bin/activate && reset'
windows:
- window_name: django project
focus: true
panes:
- blank
- ./manage.py runserver
:::{note}
tmuxp sessions can be scripted in python. The first way is to use the
ORM in the {ref}API
. The second is to pass a {py:obj}dict
into
{class}~tmuxp.workspacebuilder.WorkspaceBuilder
with a correct schema.
See: {meth}tmuxp.config.validate_schema
.
:::
Add yours? Submit a pull request to the github site!