Skip to content

Commit 850bdf8

Browse files
authored
Merge pull request #29 from TheSast/promote-window
added prefix + ctrl + @ key binding for promoting windows to sessions
2 parents ab3e4e0 + 2f2e74f commit 850bdf8

File tree

2 files changed

+56
-0
lines changed

2 files changed

+56
-0
lines changed

scripts/promote_window.sh

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
#!/usr/bin/env bash
2+
3+
CURRENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
4+
5+
source "$CURRENT_DIR/helpers.sh"
6+
7+
# global vars passed to the script as arguments
8+
CURRENT_SESSION_NAME="$1"
9+
CURRENT_WINDOW_ID="$2"
10+
CURRENT_WINDOW_NAME="$3"
11+
WINDOW_CURRENT_PATH="$4"
12+
13+
number_of_windows() {
14+
tmux list-windows -t "$CURRENT_SESSION_NAME" |
15+
wc -l |
16+
tr -d ' '
17+
}
18+
19+
create_new_session() {
20+
TMUX="" tmux -S "$(tmux_socket)" new-session -c "$WINDOW_CURRENT_PATH" -s "se-$CURRENT_WINDOW_NAME" -d -P -F "#{session_name}"
21+
}
22+
23+
new_session_window_id() {
24+
local session_name="$1"
25+
tmux list-windows -t "$session_name" -F "#{window_id}"
26+
}
27+
28+
promote_window() {
29+
local session_name="$(create_new_session)"
30+
local new_session_window_id="$(new_session_window_id "$session_name")"
31+
tmux swap-window -s "$CURRENT_WINDOW_ID" -t "$new_session_window_id"
32+
tmux kill-window -t "$new_session_window_id"
33+
switch_to_session "$session_name"
34+
}
35+
36+
main() {
37+
if [ "$(number_of_windows)" -gt 1 ]; then
38+
promote_window
39+
else
40+
display_message "Can't promote with only one window in session"
41+
fi
42+
}
43+
main

sessionist.tmux

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@ tmux_option_new="@sessionist-new"
1414
default_key_bindings_promote_pane="@"
1515
tmux_option_promote_pane="@sessionist-promote-pane"
1616

17+
default_key_bindings_promote_window="C-@"
18+
tmux_option_promote_window="@sessionist-promote-window"
19+
1720
default_key_bindings_join_pane="t"
1821
tmux_option_join_pane="@sessionist-join-pane"
1922

@@ -59,6 +62,15 @@ set_promote_pane_binding() {
5962
done
6063
}
6164

65+
# "Promote" the current window to a new session
66+
set_promote_window_binding() {
67+
local key_bindings=$(get_tmux_option "$tmux_option_promote_window" "$default_key_bindings_promote_window")
68+
local key
69+
for key in $key_bindings; do
70+
tmux bind "$key" run "$CURRENT_DIR/scripts/promote_window.sh '#{session_name}' '#{window_id}' '#{window_name}' '#{pane_current_path}'"
71+
done
72+
}
73+
6274
set_join_pane_secondary_bindings() {
6375
local secondary_key_table="$1"
6476
local break_pane_flag="$2"
@@ -103,6 +115,7 @@ main() {
103115
set_alternate_session_binding
104116
set_new_session_binding
105117
set_promote_pane_binding
118+
set_promote_window_binding
106119
set_join_pane_binding
107120
set_kill_session_binding
108121
}

0 commit comments

Comments
 (0)