The remind program doesn't actually put reminders into the calendars it
renders (for good reason), o had to use part of the MSG. I could have used a
SPECIAL ALARM, but then I only get the date.
For example, I use this:
REM Monday 2005 AT 09:00 DURATION 1:00 MSG +90 Weekly meeting
To provide a 90 minute reminder of the event. This meant that my parsing of the output of remind had to get smarter. So I rewrote it in perl:
<font color="#8080ff"><b>#!/usr/bin/env perl</b></font>
<font color="#ffff00"><b>use warnings</b></font>;
<font color="#ffff00"><b>use strict</b></font>;
<font color="#ffff00"><b>use </b></font>Date::Parse;
<font color="#ffff00"><b>my</b></font> <font color="#00ffff"><b>$CALENDAR</b></font>=<font color="#ff40ff"><b>"</b></font><font color="#ff40ff"><b>./calendar</b></font><font color="#ff40ff"><b>"</b></font>;
<font color="#ffff00"><b>my</b></font> <font color="#00ffff"><b>$WEEKS</b></font>=<font color="#ff40ff"><b>2</b></font>;
<font color="#ffff00"><b>print</b></font> <font color="#ff40ff"><b>"</b></font><font color="#ff40ff"><b>BEGIN:VCALENDAR</b></font><font color="#ff6060"><b>\n</b></font><font color="#ff40ff"><b>"</b></font>;
<font color="#ffff00"><b>print</b></font> <font color="#ff40ff"><b>"</b></font><font color="#ff40ff"><b>VERSION:1.0</b></font><font color="#ff6060"><b>\n</b></font><font color="#ff40ff"><b>"</b></font>;
<font color="#ffff00"><b>open</b></font>(<font color="#00ffff"><b>CAL</b></font>, <font color="#ff40ff"><b>'</b></font><font color="#ff40ff"><b>-|</b></font><font color="#ff40ff"><b>'</b></font>, <font color="#ff40ff"><b>"</b></font><font color="#ff40ff"><b>remind -s+${WEEKS} -b1 ${CALENDAR}</b></font><font color="#ff40ff"><b>"</b></font>)
<font color="#ffff00"><b>or</b></font> <font color="#ffff00"><b>die</b></font> <font color="#ff40ff"><b>"</b></font><font color="#ff40ff"><b>can't start remind: </b></font><font color="#00ffff"><b>$!</b></font><font color="#ff40ff"><b>"</b></font>;
<font color="#ffff00"><b>while</b></font> (<font color="#00ffff"><b><CAL></b></font>) {
<font color="#ffff00"><b>chomp</b></font>;
<font color="#ffff00"><b>my</b></font> (<font color="#00ffff"><b>$date</b></font>, <font color="#00ffff"><b>$x</b></font>, <font color="#00ffff"><b>$y</b></font>, <font color="#00ffff"><b>$duration</b></font>, <font color="#00ffff"><b>$z</b></font>, <font color="#00ffff"><b>$msg</b></font>)
= <font color="#ffff00"><b>split</b></font>( <font color="#ffff00"><b>/</b></font><font color="#ff6060"><b>\s</b></font><font color="#ffff00"><b>/</b></font>, <font color="#00ffff"><b>$_</b></font>, <font color="#ff40ff"><b>6</b></font>);
<font color="#ffff00"><b>my</b></font> <font color="#00ffff"><b>@msg</b></font>=<font color="#ffff00"><b>split</b></font>(<font color="#ffff00"><b>/</b></font><font color="#ff6060"><b>\s</b></font><font color="#ffff00"><b>/</b></font>, <font color="#00ffff"><b>$msg</b></font>);
<font color="#ffff00"><b>my</b></font> (<font color="#00ffff"><b>$start</b></font>,<font color="#00ffff"><b>$alarm</b></font>);
<font color="#ffff00"><b>next</b></font> <font color="#ffff00"><b>if</b></font> ( <font color="#00ffff"><b>$date</b></font> =~ <font color="#ffff00"><b>m/</b></font><font color="#ff40ff"><b>^#</b></font><font color="#ffff00"><b>/</b></font> ) ;
<font color="#ffff00"><b>if</b></font> ( <font color="#00ffff"><b>$duration</b></font> <font color="#ffff00"><b>eq</b></font> <font color="#ff40ff"><b>'</b></font><font color="#ff40ff"><b>*</b></font><font color="#ff40ff"><b>'</b></font> ) { <font color="#00ffff"><b>$duration</b></font>=<font color="#ff40ff"><b>60</b></font> ; }
<font color="#ffff00"><b>if</b></font> ( <font color="#00ffff"><b>$z</b></font> <font color="#ffff00"><b>eq</b></font> <font color="#ff40ff"><b>'</b></font><font color="#ff40ff"><b>*</b></font><font color="#ff40ff"><b>'</b></font> ) {
<font color="#00ffff"><b>$start</b></font>=<font color="#ff40ff"><b>"</b></font><font color="#ff40ff"><b>00:00</b></font><font color="#ff40ff"><b>"</b></font>;
<font color="#00ffff"><b>$duration</b></font>=<font color="#ff40ff"><b>1439</b></font>;
<font color="#00ffff"><b>$alarm</b></font>=<font color="#ff40ff"><b>0</b></font>;
} <font color="#ffff00"><b>else</b></font> {
<font color="#00ffff"><b>$start</b></font>=<font color="#ffff00"><b>shift</b></font> <font color="#00ffff"><b>@msg</b></font>;
<font color="#ffff00"><b>if</b></font> ( <font color="#00ffff"><b>$msg</b></font>[<font color="#ff40ff"><b>0</b></font>] =~<font color="#ffff00"><b> /</b></font><font color="#ff6060"><b>\+</b></font><font color="#ff6060"><b>.*</b></font><font color="#ffff00"><b>/</b></font> ) {
<font color="#00ffff"><b>$alarm</b></font> = <font color="#ffff00"><b>shift</b></font> <font color="#00ffff"><b>@msg</b></font>;
<font color="#00ffff"><b>$alarm</b></font> =~ <font color="#ffff00"><b>s/</b></font><font color="#ff6060"><b>\+</b></font><font color="#ffff00"><b>//</b></font>
} <font color="#ffff00"><b>else</b></font> {
<font color="#00ffff"><b>$alarm</b></font> = <font color="#ff40ff"><b>0</b></font>
}
<font color="#00ffff"><b>$msg</b></font>=<font color="#ffff00"><b>join</b></font>(<font color="#ff40ff"><b>"</b></font><font color="#ff40ff"><b> </b></font><font color="#ff40ff"><b>"</b></font>,<font color="#00ffff"><b>@msg</b></font>);
}
<font color="#ffff00"><b>my</b></font> <font color="#00ffff"><b>$t</b></font>=str2time(<font color="#ff40ff"><b>"</b></font><font color="#00ffff"><b>$date</b></font><font color="#ff40ff"><b> </b></font><font color="#00ffff"><b>$start</b></font><font color="#ff40ff"><b>"</b></font>);
<font color="#ffff00"><b>die</b></font> <font color="#ff40ff"><b>"</b></font><font color="#ff40ff"><b>unable to parse </b></font><font color="#00ffff"><b>$date</b></font><font color="#ff40ff"><b> </b></font><font color="#00ffff"><b>$start</b></font><font color="#ff40ff"><b>"</b></font> <font color="#ffff00"><b>if</b></font> <font color="#ffff00"><b>not</b></font> <font color="#ffff00"><b>defined</b></font> <font color="#00ffff"><b>$t</b></font>;
<font color="#ffff00"><b>my</b></font> <font color="#00ffff"><b>$d</b></font>=<font color="#00ffff"><b>$duration</b></font>*<font color="#ff40ff"><b>60</b></font>;
<font color="#ffff00"><b>my</b></font> <font color="#00ffff"><b>$a</b></font>=<font color="#00ffff"><b>$alarm</b></font>*<font color="#ff40ff"><b>60</b></font>;
<font color="#ffff00"><b>my</b></font> (<font color="#00ffff"><b>$sec</b></font>,<font color="#00ffff"><b>$min</b></font>,<font color="#00ffff"><b>$hour</b></font>,<font color="#00ffff"><b>$mday</b></font>,<font color="#00ffff"><b>$mon</b></font>,<font color="#00ffff"><b>$year</b></font>) = <font color="#ffff00"><b>localtime</b></font>(<font color="#00ffff"><b>$t</b></font>);
<font color="#00ffff"><b>$year</b></font> += <font color="#ff40ff"><b>1900</b></font>; <font color="#00ffff"><b>$mon</b></font>++;
<font color="#ffff00"><b>my</b></font> <font color="#00ffff"><b>$s_string</b></font>=<font color="#ffff00"><b>sprintf</b></font>(<font color="#ff40ff"><b>"</b></font><font color="#ff40ff"><b>%04d%02d%02dT%02d%02d%02d</b></font><font color="#ff40ff"><b>"</b></font>,
<font color="#00ffff"><b>$year</b></font>, <font color="#00ffff"><b>$mon</b></font>, <font color="#00ffff"><b>$mday</b></font>, <font color="#00ffff"><b>$hour</b></font>, <font color="#00ffff"><b>$min</b></font>, <font color="#00ffff"><b>$sec</b></font>);
(<font color="#00ffff"><b>$sec</b></font>,<font color="#00ffff"><b>$min</b></font>,<font color="#00ffff"><b>$hour</b></font>,<font color="#00ffff"><b>$mday</b></font>,<font color="#00ffff"><b>$mon</b></font>,<font color="#00ffff"><b>$year</b></font>) = <font color="#ffff00"><b>localtime</b></font>(<font color="#00ffff"><b>$t</b></font>+<font color="#00ffff"><b>$d</b></font>);
<font color="#00ffff"><b>$year</b></font> += <font color="#ff40ff"><b>1900</b></font>; <font color="#00ffff"><b>$mon</b></font>++;
<font color="#ffff00"><b>my</b></font> <font color="#00ffff"><b>$e_string</b></font>=<font color="#ffff00"><b>sprintf</b></font>(<font color="#ff40ff"><b>"</b></font><font color="#ff40ff"><b>%04d%02d%02dT%02d%02d%02d</b></font><font color="#ff40ff"><b>"</b></font>,
<font color="#00ffff"><b>$year</b></font>, <font color="#00ffff"><b>$mon</b></font>, <font color="#00ffff"><b>$mday</b></font>, <font color="#00ffff"><b>$hour</b></font>, <font color="#00ffff"><b>$min</b></font>, <font color="#00ffff"><b>$sec</b></font>);
(<font color="#00ffff"><b>$sec</b></font>,<font color="#00ffff"><b>$min</b></font>,<font color="#00ffff"><b>$hour</b></font>,<font color="#00ffff"><b>$mday</b></font>,<font color="#00ffff"><b>$mon</b></font>,<font color="#00ffff"><b>$year</b></font>) = <font color="#ffff00"><b>localtime</b></font>(<font color="#00ffff"><b>$t</b></font>-<font color="#00ffff"><b>$a</b></font>);
<font color="#00ffff"><b>$year</b></font> += <font color="#ff40ff"><b>1900</b></font>; <font color="#00ffff"><b>$mon</b></font>++;
<font color="#ffff00"><b>my</b></font> <font color="#00ffff"><b>$a_string</b></font>=<font color="#ffff00"><b>sprintf</b></font>(<font color="#ff40ff"><b>"</b></font><font color="#ff40ff"><b>%04d%02d%02dT%02d%02d%02d</b></font><font color="#ff40ff"><b>"</b></font>,
<font color="#00ffff"><b>$year</b></font>, <font color="#00ffff"><b>$mon</b></font>, <font color="#00ffff"><b>$mday</b></font>, <font color="#00ffff"><b>$hour</b></font>, <font color="#00ffff"><b>$min</b></font>, <font color="#00ffff"><b>$sec</b></font>);
<font color="#ffff00"><b>print</b></font> <font color="#ff40ff"><b>"</b></font><font color="#ff6060"><b>\n</b></font><font color="#ff40ff"><b>"</b></font>;
<font color="#ffff00"><b>print</b></font> <font color="#ff40ff"><b>"</b></font><font color="#ff40ff"><b>BEGIN:VEVENT</b></font><font color="#ff6060"><b>\n</b></font><font color="#ff40ff"><b>"</b></font>;
<font color="#ffff00"><b>print</b></font> <font color="#ff40ff"><b>"</b></font><font color="#ff40ff"><b>CATEGORIES:MEETING</b></font><font color="#ff6060"><b>\n</b></font><font color="#ff40ff"><b>"</b></font>;
<font color="#ffff00"><b>print</b></font> <font color="#ff40ff"><b>"</b></font><font color="#ff40ff"><b>SUMMARY:</b></font><font color="#00ffff"><b>$msg</b></font><font color="#ff6060"><b>\n</b></font><font color="#ff40ff"><b>"</b></font>;
<font color="#ffff00"><b>print</b></font> <font color="#ff40ff"><b>"</b></font><font color="#ff40ff"><b>DTSTART:</b></font><font color="#00ffff"><b>$s_string</b></font><font color="#ff6060"><b>\n</b></font><font color="#ff40ff"><b>"</b></font>;
<font color="#ffff00"><b>print</b></font> <font color="#ff40ff"><b>"</b></font><font color="#ff40ff"><b>DTEND:</b></font><font color="#00ffff"><b>$e_string</b></font><font color="#ff6060"><b>\n</b></font><font color="#ff40ff"><b>"</b></font>;
<font color="#ffff00"><b>print</b></font> <font color="#ff40ff"><b>"</b></font><font color="#ff40ff"><b>AALARM:</b></font><font color="#00ffff"><b>$a_string</b></font><font color="#ff6060"><b>\n</b></font><font color="#ff40ff"><b>"</b></font> <font color="#ffff00"><b>if</b></font> ( <font color="#00ffff"><b>$alarm</b></font> != <font color="#ff40ff"><b>0</b></font> ) ;
<font color="#ffff00"><b>print</b></font> <font color="#ff40ff"><b>"</b></font><font color="#ff40ff"><b>END:VEVENT</b></font><font color="#ff6060"><b>\n</b></font><font color="#ff40ff"><b>"</b></font>;
<font color="#ffff00"><b>print</b></font> <font color="#ff40ff"><b>"</b></font><font color="#ff6060"><b>\n</b></font><font color="#ff40ff"><b>"</b></font>;
}
<font color="#ffff00"><b>print</b></font> <font color="#ff40ff"><b>"</b></font><font color="#ff6060"><b>\n</b></font><font color="#ff40ff"><b>"</b></font>;
<font color="#ffff00"><b>print</b></font> <font color="#ff40ff"><b>"</b></font><font color="#ff40ff"><b>END:VCALENDAR</b></font><font color="#ff6060"><b>\n</b></font><font color="#ff40ff"><b>"</b></font>;
jack |
posted Thu Sep 22 23:09:16 2005 |
#
category:
projects/calendar
A weblog by Jack Cummings