File tree Expand file tree Collapse file tree 2 files changed +56
-0
lines changed Expand file tree Collapse file tree 2 files changed +56
-0
lines changed Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change @@ -14,6 +14,9 @@ tmux_option_new="@sessionist-new"
14
14
default_key_bindings_promote_pane=" @"
15
15
tmux_option_promote_pane=" @sessionist-promote-pane"
16
16
17
+ default_key_bindings_promote_window=" C-@"
18
+ tmux_option_promote_window=" @sessionist-promote-window"
19
+
17
20
default_key_bindings_join_pane=" t"
18
21
tmux_option_join_pane=" @sessionist-join-pane"
19
22
@@ -59,6 +62,15 @@ set_promote_pane_binding() {
59
62
done
60
63
}
61
64
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
+
62
74
set_join_pane_secondary_bindings () {
63
75
local secondary_key_table=" $1 "
64
76
local break_pane_flag=" $2 "
@@ -103,6 +115,7 @@ main() {
103
115
set_alternate_session_binding
104
116
set_new_session_binding
105
117
set_promote_pane_binding
118
+ set_promote_window_binding
106
119
set_join_pane_binding
107
120
set_kill_session_binding
108
121
}
You can’t perform that action at this time.
0 commit comments