Since I've been doing a lot of work remotely lately I've been brushing up my GNU Screen skillz.
One thing I'd like is to be able to reattach a screen with a number of regions (AKA split screens) setup automatically. Screen is supposed to get this in the next release, but it's been a while.
In the meantime, the following kludge seems to work well enough: (sleep 0.1; screen -X split) & screen -r. Basically, this says: "reattach to my screen and at the same time in the background wait a fraction of a second and then send the split command to screen from a separate thread".
This was a common enough pattern that I wrote it into a little shell script:
#!/bin/sh splits=$1 if [ -z $splits ] ; then splits=1 fi sleep=$2 if [ -z $sleep ] ; then sleep=0.1 fi sleep $sleep i=0 while [ $i -lt $splits ] ; do screen -X split screen -X focus bottom screen -X select `expr $i + 1` i=`expr $i + 1` donewhich is used: splitscreen 4 & screen -r.
There's plenty of room for improvement. A more principled replacement for the call to sleep would be to monitor the socket files. In my Mac OS 10.5 these are under /tmp/uscreens/.... (I believe the standard location is /usr/tmp/screens/...) This is purely empirical, but it appears the user permission on the socket file changes from -x to +x (i.e. becomes executable) when the screen is attached. So instead of sleep we should be able to do a wait until that permission change occurs.
In principle I think this could even be used to save and restore region settings. For example, rebind the split key to not only split but also save a flag to filesystem indicating how many regions, then read this flag when reattaching. Or we could just wait for the next release...
No comments:
Post a Comment