]> gitweb.fluxo.info Git - utils-x11.git/commitdiff
Xalarm: implements reset and reset-loop
authorSilvio Rhatto <rhatto@riseup.net>
Wed, 30 May 2018 13:48:15 +0000 (10:48 -0300)
committerSilvio Rhatto <rhatto@riseup.net>
Wed, 30 May 2018 13:48:15 +0000 (10:48 -0300)
xalarm

diff --git a/xalarm b/xalarm
index 6a3aab4335404f5ffcc695563c11956f518f136d..982c2eba60819a33d83199280057406e12d9e099 100755 (executable)
--- 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 $*