From c3f17945103e7913435e8ccfb89b53d891ff83e8 Mon Sep 17 00:00:00 2001 From: Caleb Maclennan Date: Wed, 19 Aug 2015 15:26:20 +0300 Subject: [PATCH] Allow tmux session name to be passed as env var For normal usage this change should be a NOOP. However it enables the use case where the user might want to predefine what session gets connected to when the shell is launched. Running `zsh` will still net you a connection to the last used tmux session or a new one named "zprezto" if none exists. However `env tmux_session=myname zsh` will connect you specifically to a session called 'myname' including creating it if it doesn't exist. This is particularly useful in window managers where a key binding might open a terminal with a predefined session or even show a list of current sessions and open a new terminal connected to that session. The default session name may still be set using zstyle as documented. --- modules/tmux/README.md | 11 +++++++++++ modules/tmux/init.zsh | 11 ++++++----- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/modules/tmux/README.md b/modules/tmux/README.md index 0738d7cf..9ce1416f 100644 --- a/modules/tmux/README.md +++ b/modules/tmux/README.md @@ -33,6 +33,17 @@ You can change the default session name with: zstyle ':prezto:module:tmux:session' name '' ``` +A session name may also be specified in an environment variable before ZSH runs. + +```sh +env tmux_session='' zsh +``` + +This can be useful for example to connect to a specific remote session +connecting via SSH (note that OpenSSH needs to be configured to pass on that +environment variable). It can also be used with window managers to set keybindings +that launch terminals with specific sessions. + With `auto-start` enabled, you may want to control how multiple sessions are managed. The `destroy-unattached` option of tmux controls if the unattached sessions must be kept alive, making sessions available for later use, configured diff --git a/modules/tmux/init.zsh b/modules/tmux/init.zsh index fb56d076..8b086d5b 100644 --- a/modules/tmux/init.zsh +++ b/modules/tmux/init.zsh @@ -29,16 +29,17 @@ if [[ -z "$TMUX" && -z "$EMACS" && -z "$VIM" && -z "$INSIDE_EMACS" && -z "$VSCOD ); then tmux start-server - # Create a 'prezto' session if no session has been defined in tmux.conf. - if ! tmux has-session 2> /dev/null; then - zstyle -s ':prezto:module:tmux:session' name tmux_session || tmux_session='prezto' + # Make sure we have a session to connect to, either named via an environment + # variable, the default style as documented, or 'prezto' for last resort + [[ -z "${tmux_session:// }" ]] && zstyle -s ':prezto:module:tmux:session' name tmux_session || : ${tmux_session:=prezto} + if ! tmux has-session -t "$tmux_session" 2> /dev/null; then tmux \ new-session -d -s "$tmux_session" \; \ set-option -t "$tmux_session" destroy-unattached off &> /dev/null fi - # Attach to the 'prezto' session or to the last session used. (detach first) - exec tmux $_tmux_iterm_integration attach-session -d + # Attach to the session name requested in an environment variable or the default (detaching others) + exec tmux $_tmux_iterm_integration attach-session -t "$tmux_session" -d fi #