X-Git-Url: https://git.distorted.org.uk/~mdw/profile/blobdiff_plain/4cc1582bb02ad2771b491767882812eb0aca7015..7e571efe63719ddef999d78deccb42fb76a81aca:/bin/xzoomscr diff --git a/bin/xzoomscr b/bin/xzoomscr index b9551d8..eaf6254 100755 --- a/bin/xzoomscr +++ b/bin/xzoomscr @@ -4,22 +4,32 @@ case $# in 1) ;; *) echo >&2 "usage: $1 ZOOM"; exit 2 ;; esac zoom=$1 ok=nil +case $zoom in + */*/*) ;; + *[!0-9/]*) ;; + */*) ok=t mul=${zoom%/*} div=${zoom#*/} ;; + *) ok=t mul=1 div=$zoom ;; +esac +case $ok in nil) echo >&2 "$0: bad zoom $zoom"; exit 2 ;; esac +case $(( $mul > $div )) in 1) echo >&2 "$0: zoom too high"; exit 2 ;; esac + +ok=nil case ${DISPLAY-nil} in *:*[!0-9.]*) ;; *:*.*.*) ;; *:*.*) ok=t dpybase=${DISPLAY%.*} ;; *:*) ok=t dpybase=$DISPLAY ;; esac -case ok in nil) echo >&2 "$0: bad DISPLAY"; exit 2 ;; esac +case $ok in nil) echo >&2 "$0: bad DISPLAY"; exit 2 ;; esac set -- $(xqueryptr); scr=$1 x=$2 y=$3 DISPLAY=$dpybase.$scr; export DISPLAY eval $(xscsize -b) -case $(( $XWIDTH%$zoom || $XHEIGHT%$zoom )) in +case $(( $XWIDTH%$div || $XHEIGHT%$div )) in 0) ;; - *) echo >&2 "$0: zoom multiplier doesn't divide screen size"; exit 2 ;; + *) echo >&2 "$0: zoom divisor doesn't divide screen size"; exit 2 ;; esac { read _ @@ -40,12 +50,12 @@ EOF case $found in nil) echo >&2 "$0: pointer not on any screen?"; exit 2 ;; esac -case $zoom in +case $(( $mul == $div )) in 1) pan= ;; *) pan="--panning ${XWIDTH}x${XHEIGHT}" ;; esac xrandr --fb ${XWIDTH}x${XHEIGHT} \ --output $name \ - --mode $(( $XWIDTH/$zoom ))x$(( $XHEIGHT/$zoom )) \ + --mode $(( $mul*$XWIDTH/$div ))x$(( $mul*$XHEIGHT/$div )) \ $pan