diff --git a/bin/settrans b/bin/settrans index 5c4984d..609d178 100755 --- a/bin/settrans +++ b/bin/settrans @@ -1,21 +1,21 @@ #!/bin/bash # transset in a bash script -# copyright (c) 2011-2012, christopher jeffrey +# Copyright (c) 2011-2012, Christopher Jeffrey -# usage: +# Usage: # by window id -#trans -w "$WINDOWID" -o 75 +# settrans -w "$WINDOWID" -o 75 # by name -#trans -n "urxvt" -o 75 +# settrans -n "urxvt" -o 75 # by current window -#trans -c -o 75 +# settrans -c -o 75 # by selection -#trans -s -o 75 +# settrans -s -o 75 # increment current window 5% -#trans -c -o +5 +# settrans -c -o +5 -if [ -z "$(which xprop)" -o -z "$(which xwininfo)" ]; then +if test -z "$(which xprop)" -o -z "$(which xwininfo)"; then echo "Please install x11-utils/xorg-xprop/xorg-xwininfo." >&2 exit 1 fi @@ -46,34 +46,45 @@ root=$(xwininfo -all -root \ | sed 's/^.*\(0x\S*\).*$/\1/') parent=$window -while [ true ]; do +i=0 +while true; do parent=$(xwininfo -all $parent \ | grep Parent \ | sed 's/^.*\(0x\S*\).*$/\1/') + if [ "$parent" = "$root" ]; then break fi + parent="-id $parent" window=$parent + + i=$((i+1)) + if test $i -ge 1000; then + echo "An error occurred while traversing up the window tree." >&2 + echo "Please report this to https://github.com/chjj/compton/issues." >&2 + echo "Please mention your WM and versions of xwininfo/xprop." >&2 + exit 1 + fi done inc=$(echo "$opacity" | sed 's/^\(+\|-\).*$\|^.*$/\1/') -if [ -n "$inc" ]; then +if test -n "$inc"; then cur=$(xprop $window -notype "_NET_WM_WINDOW_OPACITY" \ | sed 's/^.*\b\([0-9]\+\).*$\|^.*$/\1/') - [ -z "$cur" ] && cur=$((0xffffffff)) + test -z "$cur" && cur=$((0xffffffff)) cur=$((cur*100/0xffffffff)) opacity=$(echo "$opacity" | sed 's/\(\+\|\-\)//') - if [ "$inc" = "+" ]; then + if test "$inc" = "+"; then opacity=$((cur+opacity)) else opacity=$((cur-opacity)) fi fi -if [ -n "$opacity" ] && [ -n "$window" ]; then - [ $opacity -le 0 ] && opacity=0 - [ $opacity -ge 100 ] && opacity=100 +if test -n "$opacity" -a -n "$window"; then + test $opacity -lt 0 && opacity=0 + test $opacity -gt 100 && opacity=100 opacity=$((opacity*0xffffffff/100)) xprop $window -f _NET_WM_WINDOW_OPACITY 32c \ -set _NET_WM_WINDOW_OPACITY "$opacity"