# HG changeset patch # User Mikael Berthe # Date 1440323443 -7200 # Node ID c293e65d905f0d8ebfe293ef7e0790415c6521c4 # Parent e26330cd408f799552daec87c6aafe7466ea001b Add function sss (reattaches screen/tmux sessions) diff -r e26330cd408f -r c293e65d905f zshrc.d/30-functions-tmux.zrc --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/zshrc.d/30-functions-tmux.zrc Sun Aug 23 11:50:43 2015 +0200 @@ -0,0 +1,44 @@ + +# sss +# Reattach a GNU Screen session, or a TMux session. +# +# For GNU Screen a custom lock tool (LOCKPRG) can be used +# if ~/bin/ttylocker exists or TTYLOCKER is set (not yet +# implemented for tmux). +# Mikael Berthe, 2015-08 + +function sss() { + local TTYLOCKER="${TTYLOCKER:-$HOME/bin/ttylocker}" + local SCREENBIN="/usr/bin/screen" + local TMUXBIN="/usr/bin/tmux" + + if [[ -x $SCREENBIN ]]; then + $SCREENBIN -q -list + local r=$? + if (( r == 11 )); then + # There is 1 usable Screen session, let's go + [[ -x "$TTYLOCKER" ]] && export LOCKPRG="$TTYLOCKER" + exec $SCREENBIN -r -x + elif (( r > 11 )); then + # There are several usable Screen sessions, heh + echo "There are several usable Screen sessions..." + return + fi + fi + + # No usable GNU/Screen session, let's try tmux then. + if [[ -x "$TMUXBIN" ]]; then + # Number of tmux sessions + integer n=$($TMUXBIN list-sessions 2>/dev/null | wc -l) + if (( n == 1 )); then + # Attach the session + exec $TMUXBIN attach # -t "$($TMUXBIN list-session -F '#{session_id}')" + elif (( n > 1 )); then + # There are several usable tmux sessions, heh + echo "There are several usable tmux sessions..." + return + fi + fi + + echo "No terminal multiplexer session found." +}