From 7e571efe63719ddef999d78deccb42fb76a81aca Mon Sep 17 00:00:00 2001 From: Mark Wooding Date: Sat, 18 Mar 2023 14:12:11 +0000 Subject: [PATCH] bin/xzoomscr, dot/e16-bindings: Allow fractional zooming. This works and is useful. Add a fractional zoom setting to the hotkeys and shift the others along. --- bin/xzoomscr | 20 +++++++++++++++----- dot/e16-bindings | 5 +++-- 2 files changed, 18 insertions(+), 7 deletions(-) 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 diff --git a/dot/e16-bindings b/dot/e16-bindings index 593c35c..6280c30 100644 --- a/dot/e16-bindings +++ b/dot/e16-bindings @@ -42,8 +42,9 @@ KeyDown 5 Down area move 0 1 KeyDown 5 Left area move -1 0 KeyDown 5 Right area move 1 0 KeyDown C5 1 exec xzoomscr 1 -KeyDown C5 2 exec xzoomscr 2 -KeyDown C5 3 exec xzoomscr 3 +KeyDown C5 2 exec xzoomscr 2/3 +KeyDown C5 3 exec xzoomscr 2 +KeyDown C5 4 exec xzoomscr 3 KeyDown C5 4 exec xzoomscr 4 KeyDown C5 a desk arrange KeyDown C5 c cm start -- 2.11.0