From 0b8b478ccb86944c264788499eb2a380b3945ae4 Mon Sep 17 00:00:00 2001 From: Silvio Rhatto Date: Wed, 30 May 2018 10:48:15 -0300 Subject: Xalarm: implements reset and reset-loop --- xalarm | 63 ++++++++++++++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 54 insertions(+), 9 deletions(-) (limited to 'xalarm') diff --git a/xalarm b/xalarm index 6a3aab4..982c2eb 100755 --- a/xalarm +++ b/xalarm @@ -23,18 +23,30 @@ function xalarm_set { #echo "xmessage $MESSAGE" | at now +$DELAY # Sleep implementation - sleep $DELAY - if which sm &> /dev/null; then - #sm -f '#ffffff' -b '#1c1c1c' $MESSAGE - (count=0; while sleep 1; do let count++; echo $MESSAGE - $count; echo -e '\f'; done) | sm -f '#ffffff' -b '#1c1c1c' - + # + # We put sleep into background and tell bash to wait it + # This way we can grab sleep PID and then be able to reset the timer if needed + sleep $DELAY & + SLEEP_PID="$!" + wait + + if [ "$ALARM_RESET" == "1" ]; then + ALARM_RESET=0 + echo "Resetting alarm..." + xalarm_set $DELAY $MESSAGE else - xmessage $MESSAGE + if which sm &> /dev/null; then + #sm -f '#ffffff' -b '#1c1c1c' $MESSAGE + (timer=0; while sleep 1; do let timer++; echo $MESSAGE - $timer; echo -e '\f'; done) | sm -f '#ffffff' -b '#1c1c1c' - + else + xmessage $MESSAGE + fi fi } # List alarms function xalarm_list { - ps -U $USER -o pid,state,lstart,command | grep xalarm | grep -v grep | grep -v list | grep -v cancel | grep -v pause | grep -v resume | \ + ps -U $USER -o pid,state,lstart,command | grep xalarm | grep -v grep | grep -v list | grep -v cancel | grep -v pause | grep -v resume | grep -v reset | grep -v reset-loop | \ sed -e "s|$FULLNAME||" -e "s|/bin/bash||" | grep -v -- "sed -e" } @@ -70,12 +82,41 @@ function xalarm_resume { done } +# Reset alarms +function xalarm_reset { + for pid in `xalarm_pids $1`; do + kill -USR1 $pid + done +} + +# Reset alarm loop counter +function xalarm_reset_loop { + for pid in `xalarm_pids $1`; do + kill -USR2 $pid + done +} + # Usage function xalarm_usage { echo "usage: $BASENAME [list|cancel|kill|help|usage|loop] [timedef] [message]" exit 1 } +# Respond to SIGUSR1 +function xalarm_sigusr1 { + ALARM_RESET="1" + kill $SLEEP_PID 2> /dev/null +} + +# Respond to SIGUSR2 +function xalarm_sigusr2 { + COUNT=0 +} + +# Register traps +trap xalarm_sigusr1 SIGUSR1 +trap xalarm_sigusr2 SIGUSR2 + # Dispatch if [ "$1" == "list" ]; then xalarm_list @@ -85,15 +126,19 @@ elif [ "$1" == "pause" ]; then xalarm_pause $2 elif [ "$1" == "resume" ]; then xalarm_resume $2 +elif [ "$1" == "reset" ]; then + xalarm_reset $2 +elif [ "$1" == "reset-loop" ]; then + xalarm_reset_loop $2 elif [ "$1" == "help" ] || [ "$1" == "usage" ]; then xalarm_usage elif [ "$1" == "loop" ]; then - count="0" + COUNT="0" shift while true; do - let count++ - xalarm_set $* $count + let COUNT++ + xalarm_set $* $COUNT done else xalarm_set $* -- cgit v1.2.3