summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Cady <d@jerkface.net>2024-08-12 08:26:27 -0400
committerAndrew Cady <d@jerkface.net>2024-08-12 08:26:27 -0400
commit263e33b30db5f3878652cae3f120ce440aa6d0e5 (patch)
treeb95364b24a0afaec6d968ee5bad63e1e1c7db041
parentdb3e063b6b12cb4e0ef44c4cba5962aa391560b1 (diff)
two socat solution
-rwxr-xr-xtwopane.bash46
1 files changed, 30 insertions, 16 deletions
diff --git a/twopane.bash b/twopane.bash
index 2aacab2..c4587e6 100755
--- a/twopane.bash
+++ b/twopane.bash
@@ -44,34 +44,25 @@ split
44focus bottom 44focus bottom
45resize $BOT_SIZE 45resize $BOT_SIZE
46screen -ln -t "$BOT_TITLE" 0 bash --noprofile --rcfile "$TWOPANE"/bashrc -i 46screen -ln -t "$BOT_TITLE" 0 bash --noprofile --rcfile "$TWOPANE"/bashrc -i
47
48source "$TWOPANE"/screenrc.startpane 47source "$TWOPANE"/screenrc.startpane
48layout save 0
49. 49.
50 50
51save_screenrc 'startpane' <<. 51save_screenrc 'startpane' <<.
52focus top 52focus top
53screen -ln -t "\$TOP_TITLE" 1 $TOP_CMD 53screen -ln -t "\$TOP_TITLE" 1 $TOP_CMD
54exec .!. sh -c 'socat -u UNIX-RECV:"\$TWOPANE"/socket STDOUT & socat -u STDIN,rawer UNIX-SEND:"\$TWOPANE"/socket' 54exec .!. sh -c 'socat -u UNIX-RECV:"\$TWOPANE"/socket STDOUT & socat -u STDIN,rawer UNIX-SEND:"\$TWOPANE"/rsocket'
55title 'output' 55title 'output'
56focus bottom
57layout save 0
58.
59
60save_screenrc 'restart' <<.
61focus top 56focus top
62screen -ln -t "\$TOP_TITLE" 1 $TOP_CMD
63exec .!. sh -c 'socat -u UNIX-RECV:"\$TWOPANE"/socket STDOUT & socat -u STDIN,rawer UNIX-SEND:"\$TWOPANE"/socket'
64title 'output'
65focus bottom
66. 57.
67 58
68restart() 59restart()
69{ 60{
70 while screen -p1 -Q info 61 while screen -p1 -Q info >/dev/null
71 do 62 do
72 screen -p1 -X kill 63 screen -p1 -X kill
73 done 64 done
74 screen -X source "$TWOPANE"/screenrc.restart 65 screen -X source "$TWOPANE"/screenrc.startpane
75} 66}
76sendp() 67sendp()
77{ 68{
@@ -139,11 +130,21 @@ start()
139 done 130 done
140} 131}
141 132
133recvstream()
134{
135 socat -u UNIX-RECV:"$TWOPANE"/rsocket STDOUT |
136 tee >(socat -u STDIN UNIX-SENDTO:"$TWOPANE"/socket) |
137 cat -v
138}
139
142sendstream() 140sendstream()
143{ 141{
144 #trap ': SIGPIPE ;' SIGPIPE 142 while ! recvstream
145 #trap ': SIGCHLD ;' SIGCHLD 143 do
146 trap '' SIGPIPE SIGCHLD 144 continue
145 done &
146 trap "kill $!" EXIT
147 trap '' SIGPIPE
147 trap 'SOCAT=(); RETRY=$REPLY;' SIGUSR1 148 trap 'SOCAT=(); RETRY=$REPLY;' SIGUSR1
148 raw 149 raw
149 while [ "$RETRY" ] || read -t 0.1 -r -N1 || [ $? -gt 128 ] 150 while [ "$RETRY" ] || read -t 0.1 -r -N1 || [ $? -gt 128 ]
@@ -153,10 +154,23 @@ sendstream()
153 if [ "$REPLY" ] 154 if [ "$REPLY" ]
154 then 155 then
155 sendc "$REPLY" 156 sendc "$REPLY"
157 elif ! [ -e "$TWOPANE"/socket ]
158 then
159 restart
156 fi 160 fi
157 done 161 done
158} 162}
159 163
164focus()
165{
166 screen -X focus "$@"
167}
168
169quit()
170{
171 screen -X quit
172}
173
160save_file bashrc <<. 174save_file bashrc <<.
161set -f 175set -f
162set -b 176set -b