zshrc.d/30-functions-tmux.zrc
author Mikael Berthe <mikael@lilotux.net>
Sun, 23 Aug 2015 11:50:43 +0200
changeset 31 c293e65d905f
child 32 0df5ad40ffb9
permissions -rw-r--r--
Add function sss (reattaches screen/tmux sessions)
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
31
c293e65d905f Add function sss (reattaches screen/tmux sessions)
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
     1
c293e65d905f Add function sss (reattaches screen/tmux sessions)
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
     2
# sss
c293e65d905f Add function sss (reattaches screen/tmux sessions)
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
     3
# Reattach a GNU Screen session, or a TMux session.
c293e65d905f Add function sss (reattaches screen/tmux sessions)
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
     4
#
c293e65d905f Add function sss (reattaches screen/tmux sessions)
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
     5
# For GNU Screen a custom lock tool (LOCKPRG) can be used
c293e65d905f Add function sss (reattaches screen/tmux sessions)
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
     6
# if ~/bin/ttylocker exists or TTYLOCKER is set (not yet
c293e65d905f Add function sss (reattaches screen/tmux sessions)
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
     7
# implemented for tmux).
c293e65d905f Add function sss (reattaches screen/tmux sessions)
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
     8
# Mikael Berthe, 2015-08
c293e65d905f Add function sss (reattaches screen/tmux sessions)
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
     9
c293e65d905f Add function sss (reattaches screen/tmux sessions)
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    10
function sss() {
c293e65d905f Add function sss (reattaches screen/tmux sessions)
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    11
    local TTYLOCKER="${TTYLOCKER:-$HOME/bin/ttylocker}"
c293e65d905f Add function sss (reattaches screen/tmux sessions)
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    12
    local SCREENBIN="/usr/bin/screen"
c293e65d905f Add function sss (reattaches screen/tmux sessions)
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    13
    local TMUXBIN="/usr/bin/tmux"
c293e65d905f Add function sss (reattaches screen/tmux sessions)
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    14
c293e65d905f Add function sss (reattaches screen/tmux sessions)
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    15
    if [[ -x $SCREENBIN ]]; then
c293e65d905f Add function sss (reattaches screen/tmux sessions)
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    16
        $SCREENBIN -q -list
c293e65d905f Add function sss (reattaches screen/tmux sessions)
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    17
        local r=$?
c293e65d905f Add function sss (reattaches screen/tmux sessions)
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    18
        if (( r == 11 )); then
c293e65d905f Add function sss (reattaches screen/tmux sessions)
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    19
            # There is 1 usable Screen session, let's go
c293e65d905f Add function sss (reattaches screen/tmux sessions)
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    20
            [[ -x "$TTYLOCKER" ]] && export LOCKPRG="$TTYLOCKER"
c293e65d905f Add function sss (reattaches screen/tmux sessions)
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    21
            exec $SCREENBIN -r -x
c293e65d905f Add function sss (reattaches screen/tmux sessions)
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    22
        elif (( r > 11 )); then
c293e65d905f Add function sss (reattaches screen/tmux sessions)
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    23
            # There are several usable Screen sessions, heh
c293e65d905f Add function sss (reattaches screen/tmux sessions)
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    24
            echo "There are several usable Screen sessions..."
c293e65d905f Add function sss (reattaches screen/tmux sessions)
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    25
            return
c293e65d905f Add function sss (reattaches screen/tmux sessions)
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    26
        fi
c293e65d905f Add function sss (reattaches screen/tmux sessions)
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    27
    fi
c293e65d905f Add function sss (reattaches screen/tmux sessions)
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    28
c293e65d905f Add function sss (reattaches screen/tmux sessions)
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    29
    # No usable GNU/Screen session, let's try tmux then.
c293e65d905f Add function sss (reattaches screen/tmux sessions)
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    30
    if [[ -x "$TMUXBIN" ]]; then
c293e65d905f Add function sss (reattaches screen/tmux sessions)
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    31
        # Number of tmux sessions
c293e65d905f Add function sss (reattaches screen/tmux sessions)
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    32
        integer n=$($TMUXBIN list-sessions 2>/dev/null | wc -l)
c293e65d905f Add function sss (reattaches screen/tmux sessions)
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    33
        if (( n == 1 )); then
c293e65d905f Add function sss (reattaches screen/tmux sessions)
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    34
            # Attach the session
c293e65d905f Add function sss (reattaches screen/tmux sessions)
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    35
            exec $TMUXBIN attach # -t "$($TMUXBIN list-session -F '#{session_id}')"
c293e65d905f Add function sss (reattaches screen/tmux sessions)
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    36
        elif (( n > 1 )); then
c293e65d905f Add function sss (reattaches screen/tmux sessions)
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    37
            # There are several usable tmux sessions, heh
c293e65d905f Add function sss (reattaches screen/tmux sessions)
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    38
            echo "There are several usable tmux sessions..."
c293e65d905f Add function sss (reattaches screen/tmux sessions)
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    39
            return
c293e65d905f Add function sss (reattaches screen/tmux sessions)
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    40
        fi
c293e65d905f Add function sss (reattaches screen/tmux sessions)
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    41
    fi
c293e65d905f Add function sss (reattaches screen/tmux sessions)
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    42
c293e65d905f Add function sss (reattaches screen/tmux sessions)
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    43
    echo "No terminal multiplexer session found."
c293e65d905f Add function sss (reattaches screen/tmux sessions)
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    44
}