Skip to content

Commit d4ae93e

Browse files
authored
refactor: not alter user's default shell when opening popups (#61)
1 parent d3094ae commit d4ae93e

14 files changed

Lines changed: 59 additions & 186 deletions

src/toggle.sh

Lines changed: 10 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ prepare_init() {
8282

8383
declare name id id_format toggle_keys=() init_args=() display_args=()
8484
declare on_init before_open after_close toggle_mode socket_name socket_path
85-
declare default_shell popup_caller opened_name current_pane_id
85+
declare popup_caller opened_name current_pane_id
8686
main() {
8787
# Load internal variables
8888
popup_caller=${__tmux_popup_caller} # content: {pane_id}:$TMUX
@@ -104,7 +104,6 @@ main() {
104104
toggle_mode="#{@popup-toggle-mode}" \
105105
socket_name="#{@popup-socket-name}" \
106106
socket_path="#{@popup-socket-path}" \
107-
default_shell="#{default-shell}" \
108107
current_pane_id="#{pane_id}" \
109108
"${batch_expand_args[@]}"
110109

@@ -192,31 +191,23 @@ main() {
192191

193192
# Command sequence to open the popup window, including hooks.
194193
open_cmds=()
195-
# Script to initialize the popup session inside a popup window.
196-
open_script=""
197194

198195
# Handle hook: before-open
199196
if check_hook "$before_open"; then open_cmds+=(run -C "$before_open" \;); fi
200197

201-
# Starting from version 3.5, tmux uses the user's `default-shell` to execute
202-
# shell commands. However, our scripts require sh(1) and may not be parsed
203-
# correctly by some incompatible shells. In this case, we change the default
204-
# shell to `/bin/sh` and then revert it immediately.
205-
open_script+="tmux set default-shell '$default_shell';"
206-
open_cmds+=(set default-shell "/bin/sh" \;)
207-
208-
# Set $TMUX_POPUP_SERVER to identify the popup server.
209-
open_script+="export TMUX_POPUP_SERVER='$popup_server' SHELL='$default_shell';"
210-
211-
# Suppress stdout to hide the `[detached] ...` message
212-
open_script+="exec $(escape tmux "${popup_socket[@]}" "${init_cmds[@]}")>/dev/null;"
213-
open_cmds+=(display-popup "${display_args[@]}" "$open_script" \;)
198+
# Add commands that actually open the popup.
199+
open_cmds+=(
200+
display-popup "${display_args[@]}"
201+
-e TMUX_POPUP_SERVER="$popup_server" # used to identify the popup server
202+
/bin/sh -c
203+
"exec $(escape tmux "${popup_socket[@]}" "${init_cmds[@]}")>/dev/null"
204+
\;
205+
)
214206

215207
# Handle hook: after-close
216208
if check_hook "$after_close"; then open_cmds+=(run -C "$after_close" \;); fi
217209

218-
# Do open the popup window
219-
# printf '%s\n'
210+
# Do open the popup window.
220211
tmux "${open_cmds[@]}"
221212

222213
# Undo temporary changes on the popup server

src/toggle_tests/escape_session_name.stdout

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -7,24 +7,13 @@ TMUX:BEGIN[1] {
77
-C
88
run '#{@popup_before_open}'
99
;
10-
set
11-
default-shell
12-
/bin/sh
13-
;
1410
display-popup
11+
-e
12+
TMUX_POPUP_SERVER=popup_test
1513
TMUX:BEGIN[2] {
1614
TMUX=tmux-test
1715
TMUX_POPUP_SERVER=
1816
SHELL=/system/shell
19-
}
20-
set
21-
default-shell
22-
/default/shell
23-
TMUX:END[2]
24-
TMUX:BEGIN[3] {
25-
TMUX=tmux-test
26-
TMUX_POPUP_SERVER=popup_test
27-
SHELL=/default/shell
2817
}
2918
-L
3019
popup_test
@@ -42,7 +31,7 @@ TMUX:BEGIN[1] {
4231
-C
4332
run '#{@popup_on_init}'
4433
;
45-
TMUX:END[3]
34+
TMUX:END[2]
4635
;
4736
run
4837
-C

src/toggle_tests/open_nested_popup.stdout

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -7,28 +7,17 @@ TMUX:BEGIN[1] {
77
-C
88
run '#{@popup_before_open}'
99
;
10-
set
11-
default-shell
12-
/bin/sh
13-
;
1410
display-popup
11+
-e
12+
TMUX_POPUP_SERVER=popup_test
1513
TMUX:BEGIN[2] {
1614
TMUX=tmux-test
1715
TMUX_POPUP_SERVER=
1816
SHELL=/system/shell
19-
}
20-
set
21-
default-shell
22-
/default/shell
23-
TMUX:END[2]
24-
TMUX:BEGIN[3] {
25-
TMUX=tmux-test
26-
TMUX_POPUP_SERVER=popup_test
27-
SHELL=/default/shell
2817
}
2918
-L
3019
popup_test
31-
TMUX:END[3]
20+
TMUX:END[2]
3221
;
3322
run
3423
-C

src/toggle_tests/open_nested_with_id.stdout

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -7,28 +7,17 @@ TMUX:BEGIN[1] {
77
-C
88
run '#{@popup_before_open}'
99
;
10-
set
11-
default-shell
12-
/bin/sh
13-
;
1410
display-popup
11+
-e
12+
TMUX_POPUP_SERVER=popup_test
1513
TMUX:BEGIN[2] {
1614
TMUX=tmux-test
1715
TMUX_POPUP_SERVER=
1816
SHELL=/system/shell
19-
}
20-
set
21-
default-shell
22-
/default/shell
23-
TMUX:END[2]
24-
TMUX:BEGIN[3] {
25-
TMUX=tmux-test
26-
TMUX_POPUP_SERVER=popup_test
27-
SHELL=/default/shell
2817
}
2918
-L
3019
popup_test
31-
TMUX:END[3]
20+
TMUX:END[2]
3221
;
3322
run
3423
-C

src/toggle_tests/open_nested_with_toggle_key.stdout

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -7,28 +7,17 @@ TMUX:BEGIN[1] {
77
-C
88
run '#{@popup_before_open}'
99
;
10-
set
11-
default-shell
12-
/bin/sh
13-
;
1410
display-popup
11+
-e
12+
TMUX_POPUP_SERVER=popup_test
1513
TMUX:BEGIN[2] {
1614
TMUX=tmux-test
1715
TMUX_POPUP_SERVER=
1816
SHELL=/system/shell
19-
}
20-
set
21-
default-shell
22-
/default/shell
23-
TMUX:END[2]
24-
TMUX:BEGIN[3] {
25-
TMUX=tmux-test
26-
TMUX_POPUP_SERVER=popup_test
27-
SHELL=/default/shell
2817
}
2918
-L
3019
popup_test
31-
TMUX:END[3]
20+
TMUX:END[2]
3221
;
3322
run
3423
-C

src/toggle_tests/open_popup.stdout

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -7,24 +7,13 @@ TMUX:BEGIN[1] {
77
-C
88
run '#{@popup_before_open}'
99
;
10-
set
11-
default-shell
12-
/bin/sh
13-
;
1410
display-popup
11+
-e
12+
TMUX_POPUP_SERVER=popup_test
1513
TMUX:BEGIN[2] {
1614
TMUX=tmux-test
1715
TMUX_POPUP_SERVER=
1816
SHELL=/system/shell
19-
}
20-
set
21-
default-shell
22-
/default/shell
23-
TMUX:END[2]
24-
TMUX:BEGIN[3] {
25-
TMUX=tmux-test
26-
TMUX_POPUP_SERVER=popup_test
27-
SHELL=/default/shell
2817
}
2918
-L
3019
popup_test
@@ -42,7 +31,7 @@ TMUX:BEGIN[1] {
4231
-C
4332
run '#{@popup_on_init}'
4433
;
45-
TMUX:END[3]
34+
TMUX:END[2]
4635
;
4736
run
4837
-C

src/toggle_tests/open_with_environment.stdout

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -7,24 +7,13 @@ TMUX:BEGIN[1] {
77
-C
88
run '#{@popup_before_open}'
99
;
10-
set
11-
default-shell
12-
/bin/sh
13-
;
1410
display-popup
11+
-e
12+
TMUX_POPUP_SERVER=popup_test
1513
TMUX:BEGIN[2] {
1614
TMUX=tmux-test
1715
TMUX_POPUP_SERVER=
1816
SHELL=/system/shell
19-
}
20-
set
21-
default-shell
22-
/default/shell
23-
TMUX:END[2]
24-
TMUX:BEGIN[3] {
25-
TMUX=tmux-test
26-
TMUX_POPUP_SERVER=popup_test
27-
SHELL=/default/shell
2817
}
2918
-L
3019
popup_test
@@ -44,7 +33,7 @@ TMUX:BEGIN[1] {
4433
-C
4534
run '#{@popup_on_init}'
4635
;
47-
TMUX:END[3]
36+
TMUX:END[2]
4837
;
4938
run
5039
-C

src/toggle_tests/open_with_id.stdout

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -7,24 +7,13 @@ TMUX:BEGIN[1] {
77
-C
88
run '#{@popup_before_open}'
99
;
10-
set
11-
default-shell
12-
/bin/sh
13-
;
1410
display-popup
11+
-e
12+
TMUX_POPUP_SERVER=popup_test
1513
TMUX:BEGIN[2] {
1614
TMUX=tmux-test
1715
TMUX_POPUP_SERVER=
1816
SHELL=/system/shell
19-
}
20-
set
21-
default-shell
22-
/default/shell
23-
TMUX:END[2]
24-
TMUX:BEGIN[3] {
25-
TMUX=tmux-test
26-
TMUX_POPUP_SERVER=popup_test
27-
SHELL=/default/shell
2817
}
2918
-L
3019
popup_test
@@ -42,7 +31,7 @@ TMUX:BEGIN[1] {
4231
-C
4332
run '#{@popup_on_init}'
4433
;
45-
TMUX:END[3]
34+
TMUX:END[2]
4635
;
4736
run
4837
-C

src/toggle_tests/open_with_overrides.stdout

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -7,24 +7,13 @@ TMUX:BEGIN[1] {
77
-C
88
run '#{@popup-focus} --enter'
99
;
10-
set
11-
default-shell
12-
/bin/sh
13-
;
1410
display-popup
11+
-e
12+
TMUX_POPUP_SERVER=popup_server
1513
TMUX:BEGIN[2] {
1614
TMUX=tmux-test
1715
TMUX_POPUP_SERVER=
1816
SHELL=/system/shell
19-
}
20-
set
21-
default-shell
22-
/default/shell
23-
TMUX:END[2]
24-
TMUX:BEGIN[3] {
25-
TMUX=tmux-test
26-
TMUX_POPUP_SERVER=popup_server
27-
SHELL=/default/shell
2817
}
2918
-S
3019
/local/socket_path/popup_server
@@ -38,7 +27,7 @@ TMUX:BEGIN[1] {
3827
__tmux_popup_caller
3928
%current_pane_id:tmux-test
4029
;
41-
TMUX:END[3]
30+
TMUX:END[2]
4231
;
4332
run
4433
-C

src/toggle_tests/open_with_socket_path.stdout

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -7,24 +7,13 @@ TMUX:BEGIN[1] {
77
-C
88
run '#{@popup_before_open}'
99
;
10-
set
11-
default-shell
12-
/bin/sh
13-
;
1410
display-popup
11+
-e
12+
TMUX_POPUP_SERVER=socket_path_server
1513
TMUX:BEGIN[2] {
1614
TMUX=tmux-test
1715
TMUX_POPUP_SERVER=
1816
SHELL=/system/shell
19-
}
20-
set
21-
default-shell
22-
/default/shell
23-
TMUX:END[2]
24-
TMUX:BEGIN[3] {
25-
TMUX=tmux-test
26-
TMUX_POPUP_SERVER=socket_path_server
27-
SHELL=/default/shell
2817
}
2918
-S
3019
/path/to/socket_path_server
@@ -42,7 +31,7 @@ TMUX:BEGIN[1] {
4231
-C
4332
run '#{@popup_on_init}'
4433
;
45-
TMUX:END[3]
34+
TMUX:END[2]
4635
;
4736
run
4837
-C

0 commit comments

Comments
 (0)