#!/bin/zsh screen=0 catch_signal() { echo $GAMMACALL -s $screen | xargs xgamma exit $1 } GAMMACALL=`xgamma 2>&1 | sed -e "s/Red/-rgamma/" -e "s/Green/-ggamma/" -e "s/Blue/-bgamma/" -e "s/-> //"` trap 'catch_signal' SIGTERM SIGHUP SIGKILL SIGINT SIGSTOP delaytime=0.03 usagestr="usage: xrave [--help (-h) | --boxes (-b) | --delay (-d) SECONDS | --tap-beat (-t) | --screen (-s) N]" for a in $* do if [ "$nextscreen" ] then screen=$a unset nextscreen else if [ "$nextdelay" ] then delaytime=$a unset nextdelay else case "$a" in --help|-h) echo $usagestr exit 0 ;; --boxes|-b) boxes=true ;; --tap-beat|-t) beat=true ;; --delay|-d) nextdelay=$a ;; --screen|-s) nextscreen=$a ;; *) echo $usagestr >&2 exit 1 ;; esac fi fi done if [ "$nextdelay" ] then echo "Delay argument for option \"$nextdelay\" required but not specified" >&2 exit 1 fi if [ "$nextdelay" ] then echo "Screen argument for option \"$nextscreen\" required but not specified" >&2 exit 1 fi if [ "$boxes" = "true" ] then randrout=`xrandr -q | grep "current"` x=$(echo $randrout | sed -e "s/.*current \([0-9]*\) x \([0-9]*\),.*/\1/") y=$(echo $randrout | sed -e "s/.*current \([0-9]*\) x \([0-9]*\),.*/\2/") maxsize=100 maxx=$(($x-$maxsize)) maxy=$(($y-$maxsize)) fi while true do xgamma -quiet -s $screen -rgamma "$((1.1**(1+16*$RANDOM/32768.0)-1))" -bgamma "$((1.1**(1+16*$RANDOM/32768.0)-1))" -ggamma "$((1.1**(1+16*$RANDOM/32768.0)-1))" || catch_signal 1 if [ "$beat" = "true" ] then read -k 1 dummy || catch-signal 1 else sleep $delaytime || catch_signal 1 fi if [ "$boxes" = "true" ] then for ((i=0; i<5; i++ )) do xrefresh -solid \#$(($RANDOM%10))$(($RANDOM%10))$(($RANDOM%10))$(($RANDOM%10))$(($RANDOM%10))$(($RANDOM%10)) -geometry $((($RANDOM*$maxsize)/16383+1))x$((($RANDOM)*$maxsize/16383+1))+$((($RANDOM)*$maxx/32767))+$((($RANDOM)*$maxy/32767)) sleep 0.01 done fi done