#!/bin/sh ## # USAGE: # icewm-resize-window [] ## # Mode: # -hv : half vertically # -hh : half orizontally # -hsv : half screen vertically # -hsh : half screen orizontally # -1 : 1024x768 # -8 : 800x600 # -6 : 640x480 ## # REQUIREMENTS: # icesh # xdpyinfo # xprop # xwininfo # sed # grep ## # altblue 2006.10.10 # window ID (default: "focused window") win=${2:-$(xdpyinfo | sed -ne 's/^focus.*window \(.\+\),.*/\1/ p')} if [ -z "$win" ] ; then echo "invalid window ID" exit 1 fi # window increment steps incw=$(xprop -id $win | grep -Po '(?<=program specified resize increment: )(\d+)') inch=$(xprop -id $win | grep 'program specified resize increment: ' |grep -Po '(\d+)$') # window geometry winw=$(( $(xwininfo -id $win | grep -Po '(?<=Width: )(\d+)') / ${incw:-1} )) winh=$(( $(xwininfo -id $win | grep -Po '(?<=Height: )(\d+)') / ${inch:-1} )) winp=$(xwininfo -id $win |sed -n 's/^.*-geometry [0-9]\+x[0-9]\+// p' |sed 's/--[0-9]\+/-0/g') # screen geometry X11W=$(( $(xwininfo -root | grep -Po '(?<=Width: )(\d+)') / ${incw:-1} )) X11H=$(( $(xwininfo -root | grep -Po '(?<=Height: )(\d+)') / ${inch:-1} )) # maximization states: 12 - Max, 4 - Vert, 8 - Horiz states="4 8 12" case "$1" in -hv) states="4 12" geo=${winw}x$((${winh}/2)) ;; -hh) states="8 12" geo=$((${winw}/2))x${winh} ;; -hsv) states="4 12" geo=${winw}x$((${X11H}/2)) ;; -hsh) states="8 12" geo=$((${X11W}/2))x${winh} ;; -1) geo=$(( 1024 / ${incw:-1} ))x$(( 768 / ${inch:-1} )) ;; -8) geo=$(( 800 / ${incw:-1} ))x$((600 / ${inch:-1} )) ;; -6) geo=$(( 640 / ${incw:-1} ))x$((480 / ${inch:-1} )) ;; *) echo $"Invalid ! Valid modes are: -hv, -hh, -hsv, -hsh, -1, -8, -6" exit 1 esac # reset maximization state for state in $states ; do icesh -window $win setState $state 0 done # echo icesh -window $win setGeometry ${geo}${winp} icesh -window $win setGeometry ${geo}${winp}