Jérôme Belleman
Home  •  Tools  •  Posts  •  Talks  •  Travels  •  Graphics  •  About Me

Remind: Sophisticated Calendar and Alarm Program

7 Aug 2010

I'm sharing here a few configuration and integration notes to describe how I'm using the Remind calendar program, along with its Wyrd user interface.

1 Before Remind

The first calendar program I used was Microsoft Outlook, quickly followed by Mozilla Sunbird which appears to have been abandoned. I actually spent a fair few years with Sunbird. But what was striking about it is how impossibly slow it became to start as soon as you gathered more than a few hundreds of events. This was the reason why I craved for something fast. Very fast. And so I came across Remind.

2 About Remind

You enter events by writing them to files, typically under the ~/.reminders directory, in a sophisticated language – too sophisticated, maybe. I once took on the challenge of mastering it but that just went too far. Thankfully, though, you don't need to understand much to get your way and the manpage gives a few helpful examples to get you started.

What I praise is the decision the developers make to leave it to users to organise their events in plain text, which gives them the freedom to use their favourite editor to ease the task. Being simple files, you can also use common UNIX tools to further work with your calendars: diff, git, sort, grep, gzip. But what came most naturally was in fact to store my ~/.reminders on AFS, so that my calendars are synchronised live on all my devices with absolutely no effort from my part.

And because it's all just text files, I don't have to use the scripting language Remind provides if it doesn't suit me. Yes, I can program recurring events and define variables. But if I find them to cumbersome to use, nothing keeps me from writing a little wrapper using a template language to write my events the way I enjoy it. Inspiring.

3 Integration for Alarming

You can run Remind in daemon mode, by passing it the -z option. In this mode, Remind issues reminders when events are due. With the -k option, you can specify what to do when that happens.

rem -z -k "urxvt -hold -name notsink -title %s -e echo %s &" &

With this command, I'm instructing Remind to launch a urxvt terminal setting its title and contents to the message of the event (as defined with MSG). The -hold option ensures the window stays opened even after echo exits.

See the difference between:

The -name option gives the name notsink to the window. This is particularly useful if you use some sort of notification sink with your window manager, whereby windows having a given name are sent to a specific frame, so as to display notifications without getting in the way.

One last note of integration, particularly if you keep your reminder files on a remote filesystem: the Remind daemon can crash if the reminder files aren't accessible, which is bound to happen if you've lost the network. I wrote the remd wrapper to work around this with a loop. Last thing you want is to no longer be notified without knowing about it.

4 Wyrd: a User Interface for Remind

While Remind offers options to print calendars to stdout in a more graphical and readable format, it is no substitute for a true graphical and interactive tool to manage and see events. The best I found was Wyrd, which does e.g. a good job of allowing you to move over an existing event and send you to the right file at the right line to edit it with your editor.

Sadly, though, it appears to have been abandoned. Its original website – http://pessimization.com/software/wyrd – no longer exists. Some people have already pushed its source code to various GitHub repositories.

5 References