diff options
Diffstat (limited to 'src/twopane.bash')
-rwxr-xr-x | src/twopane.bash | 32 |
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 |
27 | elif [ "$TWOPANE" -a "$*" = detach ] | 27 | elif [ "$TWOPANE" -a "$*" = detach ] |
28 | then | 28 | then |
29 | kill_tty_forward -TSTP | 29 | kill_tty_forward -TSTP |
@@ -245,18 +245,19 @@ start() | |||
245 | tty_forward() | 245 | tty_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 | ||
251 | TOP_PANE() | 252 | TOP_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 | ||
383 | prompt_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 | |||
396 | SIGINT() | ||
397 | { | ||
398 | i INT "${BASH_COMMAND@A}" | ||
399 | kill $TOP_PANE_PID $ECHOSEND_PID 2>/dev/null | ||
400 | PROMPT_COMMAND=prompt_command | ||
401 | } | ||
402 | |||
382 | our_bashrc_main() | 403 | our_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 | } |