#!/bin/bash # # Simple alarm applicaton # Example run: xalarm 1m mymessage # See discussion at https://www.reddit.com/r/Gentoo/comments/1rryh1/kalarm_replacement/ # # Parameters FULLNAME="$0" BASENAME="`basename $0`" # List alarms function xalarm_list { ps -U $USER -o pid,lstart,command | grep xalarm | grep -v grep | grep -v list | grep -v cancel | \ sed -e "s|$FULLNAME||" -e "s|/bin/bash||" | grep -v -- "sed -e" } # Set alarm function xalarm_set { # Delay DELAY="${1:-10m}" # Message shift MESSAGE="${*:-Alarm!}" # AT(1) implementation # Example run: xalarm 1minute mymessage #echo "xmessage $MESSAGE" | at now +$DELAY # Sleep implementation sleep $DELAY if which sm 2> /dev/null; then sm -f '#ffffff' -b '#1c1c1c' $MESSAGE else xmessage $MESSAGE fi } # Cancel alarms function xalarm_cancel { if [ ! -z "$1" ]; then if xalarm_list | awk '{ print $1 }' | grep -q "^$1"; then kill $1 fi else for pid in `xalarm_list | awk '{ print $1 }'`; do kill $pid done fi } # Usage function xalarm_usage { echo "usage: $BASENAME [list|cancel|kill|help|usage|loop] [timedef] [message]" exit 1 } # Dispatch if [ "$1" == "list" ]; then xalarm_list elif [ "$1" == "cancel" ] || [ "$1" == "kill" ]; then xalarm_cancel $2 elif [ "$1" == "help" ] || [ "$1" == "usage" ]; then xalarm_usage elif [ "$1" == "loop" ]; then shift while true; do xalarm_set $* done else xalarm_set $* fi