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