author | Mikael Berthe <mikael@lilotux.net> |
Sat, 06 Jan 2024 20:51:19 +0100 | |
changeset 58 | 86928b7b5adb |
parent 39 | fc97d6cf8de4 |
permissions | -rw-r--r-- |
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" |
33
1400f5ed243c
sss: Add an optional session name
Mikael Berthe <mikael@lilotux.net>
parents:
32
diff
changeset
|
14 |
local session="$1" |
31
c293e65d905f
Add function sss (reattaches screen/tmux sessions)
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
15 |
|
c293e65d905f
Add function sss (reattaches screen/tmux sessions)
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
16 |
if [[ -x $SCREENBIN ]]; then |
33
1400f5ed243c
sss: Add an optional session name
Mikael Berthe <mikael@lilotux.net>
parents:
32
diff
changeset
|
17 |
$SCREENBIN -q -list $session |
31
c293e65d905f
Add function sss (reattaches screen/tmux sessions)
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
18 |
local r=$? |
c293e65d905f
Add function sss (reattaches screen/tmux sessions)
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
19 |
if (( r == 11 )); then |
c293e65d905f
Add function sss (reattaches screen/tmux sessions)
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
20 |
# 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
|
21 |
[[ -x "$TTYLOCKER" ]] && export LOCKPRG="$TTYLOCKER" |
33
1400f5ed243c
sss: Add an optional session name
Mikael Berthe <mikael@lilotux.net>
parents:
32
diff
changeset
|
22 |
exec $SCREENBIN -r -x $session |
31
c293e65d905f
Add function sss (reattaches screen/tmux sessions)
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
23 |
elif (( r > 11 )); then |
c293e65d905f
Add function sss (reattaches screen/tmux sessions)
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
24 |
# There are several usable Screen sessions, heh |
c293e65d905f
Add function sss (reattaches screen/tmux sessions)
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
25 |
echo "There are several usable Screen sessions..." |
c293e65d905f
Add function sss (reattaches screen/tmux sessions)
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
26 |
return |
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 |
fi |
c293e65d905f
Add function sss (reattaches screen/tmux sessions)
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
29 |
|
c293e65d905f
Add function sss (reattaches screen/tmux sessions)
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
30 |
# 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
|
31 |
if [[ -x "$TMUXBIN" ]]; then |
33
1400f5ed243c
sss: Add an optional session name
Mikael Berthe <mikael@lilotux.net>
parents:
32
diff
changeset
|
32 |
if [[ -n $session ]]; then |
1400f5ed243c
sss: Add an optional session name
Mikael Berthe <mikael@lilotux.net>
parents:
32
diff
changeset
|
33 |
$TMUXBIN has-session -t "$session" && |
1400f5ed243c
sss: Add an optional session name
Mikael Berthe <mikael@lilotux.net>
parents:
32
diff
changeset
|
34 |
exec $TMUXBIN attach-session -t "$1" |
1400f5ed243c
sss: Add an optional session name
Mikael Berthe <mikael@lilotux.net>
parents:
32
diff
changeset
|
35 |
return # Exit function with error code |
1400f5ed243c
sss: Add an optional session name
Mikael Berthe <mikael@lilotux.net>
parents:
32
diff
changeset
|
36 |
fi |
31
c293e65d905f
Add function sss (reattaches screen/tmux sessions)
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
37 |
# Number of tmux sessions |
c293e65d905f
Add function sss (reattaches screen/tmux sessions)
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
38 |
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
|
39 |
if (( n == 1 )); then |
c293e65d905f
Add function sss (reattaches screen/tmux sessions)
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
40 |
# Attach the session |
c293e65d905f
Add function sss (reattaches screen/tmux sessions)
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
41 |
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
|
42 |
elif (( n > 1 )); then |
c293e65d905f
Add function sss (reattaches screen/tmux sessions)
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
43 |
# There are several usable tmux sessions, heh |
c293e65d905f
Add function sss (reattaches screen/tmux sessions)
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
44 |
echo "There are several usable tmux sessions..." |
39
fc97d6cf8de4
sss: tmux: display list of sessions if there are more than one
Mikael Berthe <mikael@lilotux.net>
parents:
33
diff
changeset
|
45 |
$TMUXBIN list-session |
31
c293e65d905f
Add function sss (reattaches screen/tmux sessions)
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
46 |
return |
c293e65d905f
Add function sss (reattaches screen/tmux sessions)
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
47 |
fi |
c293e65d905f
Add function sss (reattaches screen/tmux sessions)
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
48 |
fi |
c293e65d905f
Add function sss (reattaches screen/tmux sessions)
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
49 |
|
c293e65d905f
Add function sss (reattaches screen/tmux sessions)
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
50 |
echo "No terminal multiplexer session found." |
c293e65d905f
Add function sss (reattaches screen/tmux sessions)
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
51 |
} |
32
0df5ad40ffb9
Add tmux_takeover (from Chris Johnsen' S.O. post)
Mikael Berthe <mikael@lilotux.net>
parents:
31
diff
changeset
|
52 |
|
0df5ad40ffb9
Add tmux_takeover (from Chris Johnsen' S.O. post)
Mikael Berthe <mikael@lilotux.net>
parents:
31
diff
changeset
|
53 |
|
0df5ad40ffb9
Add tmux_takeover (from Chris Johnsen' S.O. post)
Mikael Berthe <mikael@lilotux.net>
parents:
31
diff
changeset
|
54 |
# From http://stackoverflow.com/questions/7814612/is-there-any-way-to-redraw-tmux-window-when-switching-smaller-monitor-to-bigger |
0df5ad40ffb9
Add tmux_takeover (from Chris Johnsen' S.O. post)
Mikael Berthe <mikael@lilotux.net>
parents:
31
diff
changeset
|
55 |
# A big thank-you to Chris Johnsen for this one. |
0df5ad40ffb9
Add tmux_takeover (from Chris Johnsen' S.O. post)
Mikael Berthe <mikael@lilotux.net>
parents:
31
diff
changeset
|
56 |
# (Code slightly modified - Mikael) |
0df5ad40ffb9
Add tmux_takeover (from Chris Johnsen' S.O. post)
Mikael Berthe <mikael@lilotux.net>
parents:
31
diff
changeset
|
57 |
function tmux_takeover() { |
0df5ad40ffb9
Add tmux_takeover (from Chris Johnsen' S.O. post)
Mikael Berthe <mikael@lilotux.net>
parents:
31
diff
changeset
|
58 |
# create a temporary session that displays the "how to go back" message |
0df5ad40ffb9
Add tmux_takeover (from Chris Johnsen' S.O. post)
Mikael Berthe <mikael@lilotux.net>
parents:
31
diff
changeset
|
59 |
tmp='takeover_temp_session' |
0df5ad40ffb9
Add tmux_takeover (from Chris Johnsen' S.O. post)
Mikael Berthe <mikael@lilotux.net>
parents:
31
diff
changeset
|
60 |
if ! tmux has-session -t "$tmp" >/dev/null 2>&1; then |
0df5ad40ffb9
Add tmux_takeover (from Chris Johnsen' S.O. post)
Mikael Berthe <mikael@lilotux.net>
parents:
31
diff
changeset
|
61 |
tmux new-session -d -s "$tmp" |
0df5ad40ffb9
Add tmux_takeover (from Chris Johnsen' S.O. post)
Mikael Berthe <mikael@lilotux.net>
parents:
31
diff
changeset
|
62 |
tmux set-option -t "$tmp" set-remain-on-exit on >/dev/null |
0df5ad40ffb9
Add tmux_takeover (from Chris Johnsen' S.O. post)
Mikael Berthe <mikael@lilotux.net>
parents:
31
diff
changeset
|
63 |
tmux new-window -kt "$tmp":0 \ |
0df5ad40ffb9
Add tmux_takeover (from Chris Johnsen' S.O. post)
Mikael Berthe <mikael@lilotux.net>
parents:
31
diff
changeset
|
64 |
'echo -e "\nUse Prefix + L (i.e. ^B L) to return to session."' |
0df5ad40ffb9
Add tmux_takeover (from Chris Johnsen' S.O. post)
Mikael Berthe <mikael@lilotux.net>
parents:
31
diff
changeset
|
65 |
fi |
0df5ad40ffb9
Add tmux_takeover (from Chris Johnsen' S.O. post)
Mikael Berthe <mikael@lilotux.net>
parents:
31
diff
changeset
|
66 |
|
0df5ad40ffb9
Add tmux_takeover (from Chris Johnsen' S.O. post)
Mikael Berthe <mikael@lilotux.net>
parents:
31
diff
changeset
|
67 |
# switch any clients attached to the target session to the temp session |
0df5ad40ffb9
Add tmux_takeover (from Chris Johnsen' S.O. post)
Mikael Berthe <mikael@lilotux.net>
parents:
31
diff
changeset
|
68 |
session="$1" |
0df5ad40ffb9
Add tmux_takeover (from Chris Johnsen' S.O. post)
Mikael Berthe <mikael@lilotux.net>
parents:
31
diff
changeset
|
69 |
for client in $(tmux list-clients -t "$session" -F '#{client_tty}'); do |
0df5ad40ffb9
Add tmux_takeover (from Chris Johnsen' S.O. post)
Mikael Berthe <mikael@lilotux.net>
parents:
31
diff
changeset
|
70 |
tmux switch-client -c "$client" -t "$tmp" |
0df5ad40ffb9
Add tmux_takeover (from Chris Johnsen' S.O. post)
Mikael Berthe <mikael@lilotux.net>
parents:
31
diff
changeset
|
71 |
done |
0df5ad40ffb9
Add tmux_takeover (from Chris Johnsen' S.O. post)
Mikael Berthe <mikael@lilotux.net>
parents:
31
diff
changeset
|
72 |
|
0df5ad40ffb9
Add tmux_takeover (from Chris Johnsen' S.O. post)
Mikael Berthe <mikael@lilotux.net>
parents:
31
diff
changeset
|
73 |
# attach to the target session |
0df5ad40ffb9
Add tmux_takeover (from Chris Johnsen' S.O. post)
Mikael Berthe <mikael@lilotux.net>
parents:
31
diff
changeset
|
74 |
tmux attach -t "$session" |
0df5ad40ffb9
Add tmux_takeover (from Chris Johnsen' S.O. post)
Mikael Berthe <mikael@lilotux.net>
parents:
31
diff
changeset
|
75 |
} |