summaryrefslogtreecommitdiff
path: root/src/twopane.bash
diff options
context:
space:
mode:
Diffstat (limited to 'src/twopane.bash')
-rwxr-xr-xsrc/twopane.bash32
1 files changed, 27 insertions, 5 deletions
diff --git a/src/twopane.bash b/src/twopane.bash
index 59077fe..327d246 100755
--- a/src/twopane.bash
+++ b/src/twopane.bash
@@ -22,8 +22,8 @@ then
22 TOP_CMD="$SHELL -i" 22 TOP_CMD="$SHELL -i"
23 BOT_CMD=start 23 BOT_CMD=start
24 #TOP_EXIT=quit 24 #TOP_EXIT=quit
25 TOP_EXIT=prompt 25 #TOP_EXIT=prompt
26 #TOP_EXIT=restart 26 TOP_EXIT=restart
27elif [ "$TWOPANE" -a "$*" = detach ] 27elif [ "$TWOPANE" -a "$*" = detach ]
28then 28then
29 kill_tty_forward -TSTP 29 kill_tty_forward -TSTP
@@ -245,18 +245,19 @@ start()
245tty_forward() 245tty_forward()
246{ 246{
247 printf '%d\n' "$BASHPID" > "$TWOPANE"/tty_forward.pid 247 printf '%d\n' "$BASHPID" > "$TWOPANE"/tty_forward.pid
248 trap 'kill -INT $$' INT
248 read-tty 249 read-tty
249} 250}
250 251
251TOP_PANE() 252TOP_PANE()
252{ 253{
253 (exec -a bottom-pane-tty-forward socat - UNIX-CONNECT:"$TWOPANE"/socket,forever) 254 (exec -a bottom-pane-tty-forward socat - UNIX-CONNECT:"$TWOPANE"/socket,forever)
254 x kill_tty_forward 255 x kill_tty_forward -STOP
255 case "$TOP_EXIT" in 256 case "$TOP_EXIT" in
256 restart ) 257 restart )
257 # x kill -USR1 $$ 258 # x kill -USR1 $$
258 x kill -INT $$ 259 x kill -INT $$
259 with_screen_pane 1 start_screen_pane "$@" 260 # with_screen_pane 1 start_screen_pane "$@"
260 ;; 261 ;;
261 quit ) 262 quit )
262 kill -INT $$ 263 kill -INT $$
@@ -313,7 +314,7 @@ background()
313 disconnect_sink ECHOSEND 314 disconnect_sink ECHOSEND
314 connect 315 connect
315 connect_sink ECHOSEND echo_sender 316 connect_sink ECHOSEND echo_sender
316 kill %tty_forward 317 kill %tty_forward 2>/dev/null
317 %tty_forward & 318 %tty_forward &
318 disown %tty_forward 319 disown %tty_forward
319 i 'starting tty_forward' 320 i 'starting tty_forward'
@@ -379,6 +380,26 @@ SIGCHLD()
379 i "SIGCHILD: ${BASH_COMMAND@A}" 380 i "SIGCHILD: ${BASH_COMMAND@A}"
380} 381}
381 382
383prompt_command()
384{
385 set -- 'unset PROMPT_COMMAND; restart'
386
387 exec {FINALLY_0}<&0 {FINALLY_1}>&1 {FINALLY_2}>&2
388 if ! [ "$DEBUG" ]
389 then
390 exec &>/dev/null
391 fi
392 cmd="history -d -1; exec <&$FINALLY_0 >&$FINALLY_1 >&$FINALLY_2; $*"
393 exec <<< "$cmd"
394}
395
396SIGINT()
397{
398 i INT "${BASH_COMMAND@A}"
399 kill $TOP_PANE_PID $ECHOSEND_PID 2>/dev/null
400 PROMPT_COMMAND=prompt_command
401}
402
382our_bashrc_main() 403our_bashrc_main()
383{ 404{
384 BASH_ARGV0=twopane 405 BASH_ARGV0=twopane
@@ -388,6 +409,7 @@ our_bashrc_main()
388 set -o pipefail 409 set -o pipefail
389 trap 'SIGUSR1' USR1 410 trap 'SIGUSR1' USR1
390 # trap 'SIGCHLD' CHLD 411 # trap 'SIGCHLD' CHLD
412 trap 'SIGINT' INT
391 trap '! [ "$DEBUG" ] || read -p "Exit> "; quit' EXIT 413 trap '! [ "$DEBUG" ] || read -p "Exit> "; quit' EXIT
392 export PS1="$BOT_TITLE\\\$ " 414 export PS1="$BOT_TITLE\\\$ "
393} 415}