Unix "remind" file for US holidays
Am I the only one who's always confused about when holidays happen?
Partly it's software, I guess. In these days of everybody keeping their schedules on Google's or Apple's servers, maybe most people keep up on these things.
But being the dinosaur I am, I'm still resistant to keeping my schedule in the cloud on a public server. What if I need to check for upcoming events while I'm on a trip out in the remote desert somewhere? (Not to mention the obvious privacy considerations.) For years I used PalmOS PDAs, but when I switched to Android and discovered how poor the offline calendar options are, I decided that I should learn how to use the old Unix standby.
It's been pretty handy. I run
remind ~/[remind-file-name]
when I log in in the
morning, and it gives me a nice summary of upcoming events:
DPU Solar surcharge meeting, 5:30-8:30 tomorrow NMGLUG meeting in 2 days' time
Of course, I can also have it email me with reminders, or pop up a window, but so far I haven't felt the need.
I can also display a nice calendar showing upcoming events for this month or the next several months. I made a couple of aliases:
mycal () { months=$1 if [[ x$months = x ]] then months=1 fi remind -c$months ~/Docs/Lists/remind } mycalp () { months=$1 if [[ x$months = x ]] then months=2 fi remind -p$months ~/Docs/Lists/remind | rem2ps -e -l > /tmp/mycal.ps gv /tmp/mycal.ps & }
The first prints an ascii calendar; the second displays a nice postscript calendar complete with little icons for phases of the moon.
But what about those holidays?
Okay, that gives me a good way of storing reminders about appointments. But I still don't know when holidays are. (I had that problem with the PalmOS scheduling program, too -- it never knew about holidays either.)
Web searching didn't help much. Unfortunately, "remind" is a terrible name in this age of search engines. If someone has already solved this problem, I sure wasn't able to find any evidence of it. So instead, I went to Wikipedia's list of US holidays, with the remind man page in another tab, and wrote remind stanzas for each one -- except Easter, which is much more complicated.
But wait -- it turns out that remind already has code to calculate Easter! It just needs a slightly more complicated stanza: instead of the standard form of
REM 1 Apr +1 MSG April Fool's Day %bI need to use this form:
REM [trigger(easterdate(today()))] +1 MSG Easter %b
The %b in each case is what gives you the notice of when the event is in your reminders, e.g. "Easter tomorrow" or "Easter in two days' time". The +1 is how far beforehand you want to be reminded of each event.
So here's my remind file for US holidays. I make no guarantees that every one is right, though I did check them for the next 12 months and they all seem to be working.
# # US Holidays # REM 1 Jan +3 MSG New Year's Day %b REM Mon 15 Jan +2 MSG MLK Day %b REM 2 Feb MSG Groundhog Day %b REM 14 Feb +2 MSG Valentine's Day %b REM Mon 15 Feb +2 MSG President's Day %b REM 17 Mar +2 MSG St Patrick's Day %b REM 1 Apr +9 MSG April Fool's Day %b REM [trigger(easterdate(today()))] +1 MSG Easter %b REM 22 Apr +2 MSG Earth Day %b REM Fri 1 May -7 +2 MSG Arbor Day %b REM Sun 8 May +2 MSG Mother's Day %b REM Mon 1 Jun -7 +2 MSG Memorial Day %b REM Sun 15 Jun MSG Father's Day REM 4 Jul +2 MSG 4th of July %b REM Mon 1 Sep +2 MSG Labor Day %b REM Mon 8 Oct +2 MSG Columbus Day %b REM 31 Oct +2 MSG Halloween %b REM Tue 2 Nov +4 MSG Election Day %b REM 11 Nov +2 MSG Veteran's Day %b REM Thu 22 Nov +3 MSG Thanksgiving %b REM 25 Dec +3 MSG Christmas %b
[ 14:07 Nov 18, 2014 More linux | permalink to this entry | ]