Add function sss (reattaches screen/tmux sessions)
authorMikael Berthe <mikael@lilotux.net>
Sun, 23 Aug 2015 11:50:43 +0200
changeset 31 c293e65d905f
parent 30 e26330cd408f
child 32 0df5ad40ffb9
Add function sss (reattaches screen/tmux sessions)
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."
+}