#!/bin/sh # # resize - script to detect actual terminal window size # and set the appropriate tty kernel params # similarly to the 20+ year old resize program from X11. # # Kaz Kylheku # October 2006 # # LICENSE: Permission is granted to use or redistribute this program in # original or modified form, provided the copyright notice is kept intact. Use # of this program consititutes agreement that the author is not to be held # liable for the consequences of any problem imagined to be connected to # this program, under any theory of liability. # if [ $# -ne 0 ] ; then echo This is not the X11 resize program, but a shell script imitation. echo It does not process any arguments. exit 1 fi # put tty in raw mode saved_tty=$(stty -g) stty raw isig -echo # Save cursor position printf "\0337" > /dev/tty # Position the cursor to location 999,999 printf "\033[999;999H" > /dev/tty # Query the actual cursor position printf "\033[6n" > /dev/tty # read tty response # We use dd to read character by character # until encountering the R letter, # The response syntax is ESC[;R while true; do char=$(dd bs=1 count=1 2> /dev/null) if [ "$char" = "R" ] ; then break; fi tty_response="$tty_response$char" done # Restore cursor position printf "\0338" > /dev/tty # restore tty stty $saved_tty # Set up tty set_tty_params() { stty rows $2 columns $3 cat < and will be # extracted as tokens, and passed to the # function as $1, $2 and $3. IFS='[;R' set_tty_params $tty_response