diff options
author | Andrew Cady <d@jerkface.net> | 2024-07-31 16:54:56 -0400 |
---|---|---|
committer | Andrew Cady <d@jerkface.net> | 2024-07-31 16:54:56 -0400 |
commit | 0f2f278b46f35ad27e18c39c102a528bc0f162c3 (patch) | |
tree | 46bb93c045e0231e1bc466802534773096210bab /twopane.bash | |
parent | a3a4b4f1af814bb1f50afc0677b09bb1f955d0e0 (diff) |
support restarting
Diffstat (limited to 'twopane.bash')
-rw-r--r-- | twopane.bash | 39 |
1 files changed, 29 insertions, 10 deletions
diff --git a/twopane.bash b/twopane.bash index 2b30a3b..f135d29 100644 --- a/twopane.bash +++ b/twopane.bash | |||
@@ -7,37 +7,55 @@ shopt -s lastpipe | |||
7 | BOT_SIZE=8 | 7 | BOT_SIZE=8 |
8 | BOT_TITLE=input | 8 | BOT_TITLE=input |
9 | BOT_CMD='PS1="$BOT_TITLE\$ " bash --noprofile --norc -i' | 9 | BOT_CMD='PS1="$BOT_TITLE\$ " bash --noprofile --norc -i' |
10 | TOP_CMD='PS1="$TOP_TITLE\$ " bash --noprofile --norc -i; screen -X quit' | 10 | TOP_CMD='PS1="$TOP_TITLE\$ " bash --noprofile --norc -i' |
11 | TOP_TITLE=output | 11 | TOP_TITLE=output |
12 | 12 | ||
13 | TWOPANE=$(mktemp -d) | 13 | TWOPANE=$(mktemp -d) |
14 | export TWOPANE TOP_CMD BOT_CMD TOP_TITLE BOT_TITLE BOT_SIZE | 14 | export TWOPANE TOP_CMD BOT_CMD TOP_TITLE BOT_TITLE BOT_SIZE |
15 | trap 'rm -r "$TWOPANE"' EXIT | 15 | trap 'rm -r "$TWOPANE"' EXIT |
16 | STY=twopane.${TWOPANE##*/} | 16 | STY=twopane.${TWOPANE##*/} |
17 | SCREENRC=$TWOPANE/screenrc | 17 | cat > "$TWOPANE"/screenrc <<'.' |
18 | cat > "$SCREENRC" <<'.' | ||
19 | unbindall | 18 | unbindall |
20 | escape \0\0 | 19 | escape \0\0 |
21 | escape `` | ||
22 | caption string '%t' | 20 | caption string '%t' |
23 | layout new | 21 | layout new |
24 | split | 22 | split |
25 | focus bottom | 23 | focus bottom |
26 | resize $BOT_SIZE | 24 | resize $BOT_SIZE |
27 | screen -ln -t "$BOT_TITLE" 1 bash "$TWOPANE"/bashrc | 25 | screen -ln -t "$BOT_TITLE" 0 bash "$TWOPANE"/bashrc |
26 | |||
27 | source "$TWOPANE"/screenrc.startpane | ||
28 | . | ||
29 | |||
30 | cat > "$TWOPANE"/screenrc.startpane <<'.' | ||
28 | focus top | 31 | focus top |
29 | screen -ln -t "$TOP_TITLE" sh -c "$TOP_CMD" | 32 | screen -ln -t "$TOP_TITLE" 1 sh -c "$TOP_CMD; screen -X focus top; screen -X remove" |
30 | exec :!:| socat -u UNIX-RECV:"$TWOPANE"/socket STDOUT | 33 | exec :!:| socat -u UNIX-RECV:"$TWOPANE"/socket STDOUT |
31 | title 'output' | 34 | title 'output' |
32 | focus bottom | 35 | focus bottom |
33 | layout save 0 | 36 | layout save 0 |
34 | . | 37 | . |
35 | 38 | ||
39 | cat > "$TWOPANE"/screenrc.restart <<'.' | ||
40 | layout new | ||
41 | split | ||
42 | focus bottom | ||
43 | resize $BOT_SIZE | ||
44 | select 0 | ||
45 | title 'input' | ||
46 | |||
47 | source "$TWOPANE"/screenrc.startpane | ||
48 | . | ||
49 | |||
36 | cat > "$TWOPANE"/bashrc <<'.' | 50 | cat > "$TWOPANE"/bashrc <<'.' |
37 | trap "screen -X quit" EXIT | 51 | trap "screen -X quit" EXIT |
52 | restart() | ||
53 | { | ||
54 | screen -X source "$TWOPANE"/screenrc.restart | ||
55 | } | ||
38 | sendp() | 56 | sendp() |
39 | { | 57 | { |
40 | socat -u STDIN UNIX-SENDTO:"$TWOPANE"/socket | 58 | socat -U UNIX-SENDTO:"$TWOPANE"/socket STDIN |
41 | } | 59 | } |
42 | sendc() | 60 | sendc() |
43 | { | 61 | { |
@@ -47,8 +65,9 @@ send() | |||
47 | { | 65 | { |
48 | sendc "$*"$'\n' | 66 | sendc "$*"$'\n' |
49 | } | 67 | } |
50 | export -f send sendc sendp | 68 | export -f send sendc sendp restart |
51 | eval "$BOT_CMD" | 69 | bash -c "$BOT_CMD" || read -p "Error: process terminated with exit code $? |
70 | Press enter to quit." | ||
52 | . | 71 | . |
53 | 72 | ||
54 | screen -c "$SCREENRC" -m -S "$STY" -ln | 73 | screen -c "$TWOPANE"/screenrc -m -S "$STY" -ln |