resize.sh revision d522f475
1#!/bin/sh
2# $XFree86: xc/programs/xterm/vttests/resize.sh,v 1.5 2003/05/19 00:52:30 dickey Exp $
3#
4# -- Thomas Dickey (1999/3/27)
5# Obtain the current screen size, then resize the terminal to the nominal
6# screen width/height, and restore the size.
7
8ESC=""
9CMD='echo'
10OPT='-n'
11SUF=''
12TMP=/tmp/xterm$$
13eval '$CMD $OPT >$TMP || echo fail >$TMP' 2>/dev/null
14( test ! -f $TMP || test -s $TMP ) &&
15for verb in printf print ; do
16    rm -f $TMP
17    eval '$verb "\c" >$TMP || echo fail >$TMP' 2>/dev/null
18    if test -f $TMP ; then
19	if test ! -s $TMP ; then
20	    CMD="$verb"
21	    OPT=
22	    SUF='\c'
23	    break
24	fi
25    fi
26done
27rm -f $TMP
28
29exec </dev/tty
30old=`stty -g`
31stty raw -echo min 0  time 5
32
33$CMD $OPT "${ESC}[18t${SUF}" > /dev/tty
34IFS=';' read junk high wide
35
36$CMD $OPT "${ESC}[19t${SUF}" > /dev/tty
37IFS=';' read junk maxhigh maxwide
38
39stty $old
40
41wide=`echo $wide|sed -e 's/t.*//'`
42maxwide=`echo $maxwide|sed -e 's/t.*//'`
43original=${ESC}[8\;${high}\;${wide}t${SUF}
44
45test $maxwide = 0 && maxwide=`expr $wide \* 2`
46test $maxhigh = 0 && maxhigh=`expr $high \* 2`
47
48if ( trap "echo exit" EXIT 2>/dev/null ) >/dev/null
49then
50    trap '$CMD $OPT "$original" >/dev/tty; exit' EXIT HUP INT TRAP TERM
51else
52    trap '$CMD $OPT "$original" >/dev/tty; exit' 0    1   2   5    15
53fi
54
55w=$wide
56h=$high
57a=1
58while true
59do
60#	sleep 1
61	echo resizing to $h by $w
62	$CMD $OPT "${ESC}[8;${h};${w}t" >/dev/tty
63	if test $a = 1 ; then
64		if test $w = $maxwide ; then
65			h=`expr $h + $a`
66			if test $h = $maxhigh ; then
67				a=-1
68			fi
69		else
70			w=`expr $w + $a`
71		fi
72	else
73		if test $w = $wide ; then
74			h=`expr $h + $a`
75			if test $h = $high ; then
76				a=1
77			fi
78		else
79			w=`expr $w + $a`
80		fi
81	fi
82done
83