Plan 9 from Bell Labs’s /usr/web/sources/contrib/vrtra/rc/tile.rc

Copyright © 2021 Plan 9 Foundation.
Distributed under the MIT License.
Download the Plan 9 distribution.


#!/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 $*

Bell Labs OSI certified Powered by Plan 9

(Return to Plan 9 Home Page)

Copyright © 2021 Plan 9 Foundation. All Rights Reserved.
Comments to webmaster@9p.io.