From 263e33b30db5f3878652cae3f120ce440aa6d0e5 Mon Sep 17 00:00:00 2001 From: Andrew Cady Date: Mon, 12 Aug 2024 08:26:27 -0400 Subject: two socat solution --- twopane.bash | 46 ++++++++++++++++++++++++++++++---------------- 1 file 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 focus bottom resize $BOT_SIZE screen -ln -t "$BOT_TITLE" 0 bash --noprofile --rcfile "$TWOPANE"/bashrc -i - source "$TWOPANE"/screenrc.startpane +layout save 0 . save_screenrc 'startpane' <<. focus top screen -ln -t "\$TOP_TITLE" 1 $TOP_CMD -exec .!. sh -c 'socat -u UNIX-RECV:"\$TWOPANE"/socket STDOUT & socat -u STDIN,rawer UNIX-SEND:"\$TWOPANE"/socket' +exec .!. sh -c 'socat -u UNIX-RECV:"\$TWOPANE"/socket STDOUT & socat -u STDIN,rawer UNIX-SEND:"\$TWOPANE"/rsocket' title 'output' -focus bottom -layout save 0 -. - -save_screenrc 'restart' <<. focus top -screen -ln -t "\$TOP_TITLE" 1 $TOP_CMD -exec .!. sh -c 'socat -u UNIX-RECV:"\$TWOPANE"/socket STDOUT & socat -u STDIN,rawer UNIX-SEND:"\$TWOPANE"/socket' -title 'output' -focus bottom . restart() { - while screen -p1 -Q info + while screen -p1 -Q info >/dev/null do screen -p1 -X kill done - screen -X source "$TWOPANE"/screenrc.restart + screen -X source "$TWOPANE"/screenrc.startpane } sendp() { @@ -139,11 +130,21 @@ start() done } +recvstream() +{ + socat -u UNIX-RECV:"$TWOPANE"/rsocket STDOUT | + tee >(socat -u STDIN UNIX-SENDTO:"$TWOPANE"/socket) | + cat -v +} + sendstream() { - #trap ': SIGPIPE ;' SIGPIPE - #trap ': SIGCHLD ;' SIGCHLD - trap '' SIGPIPE SIGCHLD + while ! recvstream + do + continue + done & + trap "kill $!" EXIT + trap '' SIGPIPE trap 'SOCAT=(); RETRY=$REPLY;' SIGUSR1 raw while [ "$RETRY" ] || read -t 0.1 -r -N1 || [ $? -gt 128 ] @@ -153,10 +154,23 @@ sendstream() if [ "$REPLY" ] then sendc "$REPLY" + elif ! [ -e "$TWOPANE"/socket ] + then + restart fi done } +focus() +{ + screen -X focus "$@" +} + +quit() +{ + screen -X quit +} + save_file bashrc <<. set -f set -b -- cgit v1.2.3