-
-
Save jyurek/7be666a88e06f68d45cf to your computer and use it in GitHub Desktop.
#!/bin/sh | |
tm() { | |
if [ -z $1 ]; then | |
tmux switch-client -l | |
else | |
if [ -z "$TMUX" ]; then | |
tmux new-session -As $1 | |
else | |
if ! tmux has-session -t $1 2>/dev/null; then | |
TMUX= tmux new-session -ds $1 | |
fi | |
tmux switch-client -t $1 | |
fi | |
fi | |
} | |
tm $1 |
# tmux session tab complete function | |
_tmux_complete_session() { | |
local IFS=$'\n' | |
local cur=${COMP_WORDS[COMP_CWORD]} | |
COMPREPLY=( ${COMPREPLY[@]:-} $(compgen -W "$(tmux -q list-sessions | cut -f 1 -d ':')" -- "${cur}") ) | |
} | |
complete -F _tmux_complete_session tm |
# Toggle between the last two sessions | |
bind m switch-client -l | |
bind M command-prompt -p 'switch session:' "run \"tm '%%'\"" |
Yeah, I'm not looking for "session management". I just want to be able to switch without thinking.
Updated: Now by running tm
with no arguments you can switch to the previous session. Running tm
over and over will toggle you between two sessions.
Bonus: C-a m
in tmux will do the same thing. C-a M
will let you name a session. I found this useful today, as I have a fleet of Rails servers running. Those are in one session and I do my development in another. This lets me create and destroy windows without worrying about being tangled up with the one running the servers, but I can still check on them easily if I need to.
Ok, so that was dumb. @calebthompson let me know about tmux switch-client -l
which does the same thing as the empty tm
command. ahem So I changed that.
Zsh completion:
#compdef tm
_arguments "1: :(`tmux list-sessions -F'#S'`)"
# vim: filetype=zsh
Put that in a file called _tm somewhere in your fpath. I put mine in ~/.dotfiles/zsh/completions/_tm.
You'll need to run autoload -U compinit
and compinit
after _tm is added to your fpath in your .zshrc or wherever.
#!/bin/zsh
WORKING_DIRECTORY=$(cdpath=(. ~/code) cd $1 > /dev/null 2>&1 && pwd)
if [ -z "$TMUX" ]; then
# not in tmux
if [ -n "$WORKING_DIRECTORY" ]; then
tmux new-session -As $1 -c $WORKING_DIRECTORY
else
tmux new-session -As $1 -c $HOME
fi
else
# inside tmux
if tmux has-session -t $1 2> /dev/null; then
tmux switch-client -t $1
else
if [ -n "$WORKING_DIRECTORY" ]; then
TMUX= tmux new-session -ds $1 -c $WORKING_DIRECTORY
else
TMUX= tmux new-session -ds $1
fi
tmux switch-client -t $1
fi
fi
Updated to automatically set the working directory (for the initial and successive windows) of new sessions to project folders, assuming that they live in ~/code
. The cdpath
portion of line 3 could be removed if you actually use cdpath.
No longer works with only sh
.
Jon do you think it's time to move this to a project with a proper homebrew package and stuff?
Because 14 lines are better than a gem?