|
我写了个dwm的启动脚本。能够在dwm的任务栏显示事件提醒和当前时间。
我每天在linux上工作,但有另一台windows上跑着outlook来接受邮件和会议appointment。通过rdeskop访问这台windows。问题是当有了新邮件或者要开会了,我得不到提醒,经常错过开会。
所以我就写了一个简单的脚本,读取一个事先添加好的会议事件文件,将当天即将到来的会议事件传给dwm,显示在dwm的任务栏。
会议事件可以被定义为一次性的事件,或周期性事件。过时的一次性事件会被删除。周期性不会。
一次性事件可以定义为:
05/26/2007 12:00 - XXX
周期性事件可以定义为:
每天下午2点XXX,或者
每周一上午10点XXX,或者
每单周周四12点XXX,或者
每双周周五下午5点XXX
这些事件需要手工添加到一个文件中,默认为~/schedule.log
------------------
对很多朋友来说,这个脚本用处不大。不过还是希望感兴趣的朋友提些意见。另外outlook的邮件提醒还没搞定。现在有三个思路:
1)我的linux的home可以mount到windows的系统上,所以如果可以找到outlook的接口API,写个windows的程序,当有新邮件时将信息写入~/schedule.log,这个脚本就可以处理了。
2)当outlook有新邮件时,windows右下角会有一个小信封的图标,所以如果可以找到windows的systray的接口API,也可以将新邮件信息写入~/schedule.log。
3)当outlook有新邮件时,向我的linux机器发个邮件。
思路1和2要windows编程,我不熟。思路3大概要配置linux机器,我也不熟。
欢迎有其他的思路的兄弟指教,谢谢。
- #!/bin/sh
- #############################################################################
- # This script starts dwm and sends schedule message to dwm periodically. The
- # message will be shown in dwm taskbar. It could be used as a schedule alarm.
- #
- # This script checks schedules from a text file, sends today's earliest
- # schedule message to dwm. If the shedule is 5 minuts earlier than current
- # time, it will be deleted from the file.
- #
- # Everyday's, weekly, and bi-weekly schedules are supported, which will NOT
- # be deleted by this script.
- #############################################################################
- #
- # Syntax of Schedules
- #
- # The schedules are defined in a text file, ~/schedule.log by default,
- # in format of:
- #
- # date time - message
- # -- Defines an one time schedule.
- #
- # weekday? time - message
- # -- Defines an weekly schedule.
- # ?=0 means every day shedule.
- # ?=1-7 means Monday to Sunday.
- #
- # biwkday?? time - message
- # -- Defines an bi-weekly schedule.
- # ??=1-7 means from Monday to Sunday in every odd week.
- # ??=8-14 means from Monday to Sunday in every even week.
- #
- # The space between date and time is needed. The dash symbol '-' following
- # starting time is also needed.
- #
- # Only time and message will be sent to dwm.
- #############################################################################
- #
- # Schedule Examples
- #
- # 05/28/07 14:00-15:30 - SoW review @ Engineering room 1)
- # 05/30/07 2:00pm - Doctor appointment 2)
- # weekday0 11:00-12:00 Staff meeting 3)
- # weekday3 4:00pm - Tennis course 4)
- # biwkday5 5:00pm - Submit time sheet 5)
- # biwkday8 9:00 - Submit project report 6)
- #
- # Example 1) and 2) define an one time schedule.
- # Example 3) defines an every day schedule.
- # Example 4) defines an shedule on every Wenesday.
- # Example 5) defines an shedule on Friday of every odd week.
- # Example 6) defines an shedule on Monday of every event week.
- #
- # Example 1) will be removed when time passed more than 5 minites. But
- # 3) - 6) will not.
- #############################################################################
- # constant defined
- evtfile=~/schedule.log
- secdiff=300 # 5 mins, if event old than this, do not show it
- updfreq=2 # update message in every 2 sec
- while true; do
- current_sec=$(date +%s) # current time in sec
- new_evt="" # empty event message
- # set $earliest_evt_sec to the end of today in seconds
- earliest_evt_sec=$(date -d "23:59" +%s)
- while read evt; do
- [[ -n "$evt" ]] || continue
- # get the event time from the message string
- evt_time=${evt%%-*}
- # get the first 4 chars to check if it is a periodical event
- evt_sec=${evt_time:0:4}
- # event non-removable
- f_nodel=no
- if [[ $evt_sec = "week" ]]; then # weekly event
- evt_sec=${evt_time:7:2} # get the day
- if [[ $evt_sec -eq 0 ]] || # everyday event?
- [[ $evt_sec -eq $(date +%u) ]]; then # today's event?
- evt_sec=$(date -d ${evt_time#* } +%s)
- else
- continue # not today's weekly event
- fi
- elif [[ $evt_sec = "biwk" ]]; then # bi-weekly event?
- # if this week is even, add 7 to the day of today
- evt_sec=$(( (($(date +%U)-1)*7 + $(date +%u)) % 14 ))
- if [[ ${evt_time:7:2} -eq $evt_sec ]];then # today's event?
- evt_sec=$(date -d ${evt_time#* } +%s)
- else
- continue # not today's bi-weekly event
- fi
- else # one time event
- f_nodel=yes # event removable
- evt_sec=$(date -d "$evt_time" +%s)
- fi
- [[ $evt_sec -lt $earliest_evt_sec ]] && { \
- if [[ $(( evt_sec + secdiff )) -gt $current_sec ]]; then
- # coming event
- earliest_evt_sec=$evt_sec
- new_evt="$evt |"
- elif [[ $f_nodel = "yes" ]]; then
- # one time event passed, remove it: $evt_time
- grep -v "^$evt_time" $evtfile > $evtfile.$$
- mv -f $evtfile.$$ $evtfile
- fi
- }
- done < $evtfile
- echo "${new_evt#* } $(date '+%b %d %a %r')"
- sleep $updfreq
- done|dwm
复制代码 |
|