#!/bin/rc # Usage: # First save the current windows # ./tile.rc save >saved.s # Next switch to tall # ./tile.rc tall |tee tall.s |rc # Can go back if you want # cat saved.s |rc # dont pee in the pool rfork e # get the position from the image input fn winpos { dd -bs 1 -skip 20 -count 40 -quiet 1 } # get just width and height fn winsize { winpos | awk '{print ($3-$1),($4-$2)}' } # of the screen fn screen { cat /mnt/wsys/screen | winsize } # get the width of the current windo. We use this # for wall - where the width of current window # is kept unchanged. fn getwidth { w=`{cat /mnt/wsys/window | winsize} echo $w(1) } # generate a move command for the input # move -r minx miny maxx maxy does not seem # to work. (see save cmd). So until then fn movcmd { mx=`{echo $2 $4 + p|dc} my=`{echo $3 $5 + p|dc} echo (echo resize -r $2 $3 $mx $my '>' $1/wctl) } # print the commands to get the windows back to # the original positions. This does not seem to # work always. (can use wloc too.) fn savewin { windows=/dev/wsys/* for (i in $windows) { loc=`{cat $i/window | winpos} echo (echo resize -r $loc '>' $i/wctl) } } # Tall configuration, with a main window, on one # half of the screen, and child windows on the other # the main window is the window from which command is # invoked fn tall { maxx=$1 maxy=$2 mywin=$3 windows=/dev/wsys/* childht=`{echo $maxy $#windows 1 - / p| dc} ylast=0 xhalf=`{getwidth} halfx=`{echo $maxx $xhalf - p| dc} for (i in $windows) { switch ($i) { case /dev/wsys/$mywin movcmd $i 0 0 $xhalf $maxy case * movcmd $i $xhalf $ylast $halfx $childht ylast=`{echo $ylast $childht + p| dc} } } } # Rows configuration fn rows { maxx=$1 maxy=$2 windows=/dev/wsys/* childht=`{echo $maxy $#windows / p| dc} ylast=0 for (i in $windows) { movcmd $i 0 $ylast $maxx $childht ylast=`{echo $ylast $childht + p| dc} } } fn main { myscreen=`{screen} mywin=`{cat /mnt/wsys/winid} switch ($1) { case rows rows $myscreen $mywin case tall tall $myscreen $mywin case save savewin case * echo (supported: tall rows save) exit } # For some reason, this line does not # really get the original window focus. echo (echo current '>' /dev/wsys/$mywin/wctl) } main $*