LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1059|回复: 2

[共享] 具有事件提醒功能的dwm启动脚本

[复制链接]
发表于 2007-5-27 10:06:50 | 显示全部楼层 |阅读模式
我写了个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机器,我也不熟。
欢迎有其他的思路的兄弟指教,谢谢。

  1. #!/bin/sh
  2. #############################################################################
  3. # This script starts dwm and sends schedule message to dwm periodically. The
  4. # message will be shown in dwm taskbar. It could be used as a schedule alarm.
  5. #
  6. # This script checks schedules from a text file, sends today's earliest
  7. # schedule message to dwm. If the shedule is 5 minuts earlier than current
  8. # time, it will be deleted from the file.
  9. #
  10. # Everyday's, weekly, and bi-weekly schedules are supported, which will NOT
  11. # be deleted by this script.
  12. #############################################################################
  13. #
  14. # Syntax of Schedules
  15. #
  16. # The schedules are defined in a text file, ~/schedule.log by default,
  17. # in format of:
  18. #
  19. #   date time - message
  20. #       -- Defines an one time schedule.
  21. #
  22. #   weekday? time - message
  23. #       -- Defines an weekly schedule.
  24. #          ?=0 means every day shedule.
  25. #          ?=1-7 means Monday to Sunday.
  26. #
  27. #   biwkday?? time - message
  28. #       -- Defines an bi-weekly schedule.
  29. #          ??=1-7 means from Monday to Sunday in every odd week.
  30. #          ??=8-14 means from Monday to Sunday in every even week.
  31. #
  32. # The space between date and time is needed. The dash symbol '-' following
  33. # starting time is also needed.
  34. #
  35. # Only time and message will be sent to dwm.
  36. #############################################################################
  37. #
  38. # Schedule Examples
  39. #
  40. #   05/28/07 14:00-15:30 - SoW review @ Engineering room    1)
  41. #   05/30/07 2:00pm - Doctor appointment                    2)
  42. #   weekday0 11:00-12:00 Staff meeting                      3)
  43. #   weekday3 4:00pm - Tennis course                         4)
  44. #   biwkday5 5:00pm - Submit time sheet                     5)
  45. #   biwkday8 9:00 - Submit project report                   6)
  46. #
  47. # Example 1) and 2) define an one time schedule.
  48. # Example 3) defines an every day schedule.
  49. # Example 4) defines an shedule on every Wenesday.
  50. # Example 5) defines an shedule on Friday of every odd week.
  51. # Example 6) defines an shedule on Monday of every event week.
  52. #
  53. # Example 1) will be removed when time passed more than 5 minites. But
  54. # 3) - 6) will not.
  55. #############################################################################

  56. # constant defined
  57. evtfile=~/schedule.log
  58. secdiff=300         # 5 mins, if event old than this, do not show it
  59. updfreq=2           # update message in every 2 sec

  60. while true; do
  61.     current_sec=$(date +%s)         # current time in sec
  62.     new_evt=""                      # empty event message

  63.     # set $earliest_evt_sec to the end of today in seconds
  64.     earliest_evt_sec=$(date -d "23:59" +%s)

  65.     while read evt; do
  66.         [[ -n "$evt" ]] || continue

  67.         # get the event time from the message string
  68.         evt_time=${evt%%-*}

  69.         # get the first 4 chars to check if it is a periodical event
  70.         evt_sec=${evt_time:0:4}

  71.         # event non-removable
  72.         f_nodel=no

  73.         if [[ $evt_sec = "week" ]]; then                # weekly event
  74.             evt_sec=${evt_time:7:2}                     # get the day
  75.             if [[ $evt_sec -eq 0 ]] ||                  # everyday event?
  76.                [[ $evt_sec -eq $(date +%u) ]]; then     # today's event?
  77.                 evt_sec=$(date -d ${evt_time#* } +%s)
  78.             else
  79.                 continue                                # not today's weekly event
  80.             fi
  81.         elif [[ $evt_sec = "biwk" ]]; then              # bi-weekly event?
  82.             # if this week is even, add 7 to the day of today
  83.             evt_sec=$(( (($(date +%U)-1)*7 + $(date +%u)) % 14 ))

  84.             if [[ ${evt_time:7:2} -eq $evt_sec ]];then   # today's event?
  85.                 evt_sec=$(date -d ${evt_time#* } +%s)
  86.             else
  87.                 continue                            # not today's bi-weekly event
  88.             fi
  89.         else    # one time event
  90.             f_nodel=yes                             # event removable
  91.             evt_sec=$(date -d "$evt_time" +%s)
  92.         fi

  93.         [[ $evt_sec -lt $earliest_evt_sec ]] && { \
  94.             if [[ $(( evt_sec + secdiff )) -gt $current_sec ]]; then
  95.                 # coming event
  96.                 earliest_evt_sec=$evt_sec
  97.                 new_evt="$evt  |"
  98.             elif [[ $f_nodel = "yes" ]]; then
  99.                 # one time event passed, remove it: $evt_time
  100.                 grep -v "^$evt_time" $evtfile > $evtfile.$$
  101.                 mv -f $evtfile.$$ $evtfile
  102.             fi
  103.         }
  104.     done < $evtfile

  105.     echo "${new_evt#* } $(date '+%b %d %a %r')"
  106.     sleep $updfreq
  107. done|dwm
复制代码
发表于 2007-6-25 10:40:53 | 显示全部楼层
Good!!!
赞一个
回复 支持 反对

使用道具 举报

发表于 2007-6-27 18:22:19 | 显示全部楼层
好东东````````````

三味小说
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表