Remind FAQ
- Main article: Remind
Overview
What is Remind?
Remind is a sophisticated calendar and alarm service for Unix. It is a command line application which interacts well with other programs. Remind offers a specialized scripting language which can be used to express rather complicated scheduling methods in just a few lines.
Why would I want to use Remind?
- Remind is very fast and lightweight in comparison to typical GUI calendar programs.
- Remind can handle rather complicated recurring reminders, which are beyond the capability of most calendar applications.
- Remind can interact well with other programs. You can quickly add reminders from the terminal, with Quicksilver, or with a homebrewed Python script; you can schedule applications to execute through Remind; you can display Remind's output through an external application, or even read off your reminders with a text-to-speech program.
- If you have any programming experience, then the idea of using a scripting language to describe a calendar may seem very natural to you.
Where can I get Remind?
The Remind source code is available at the Remind homepage.
Remind packages are available for most popular GNU/Linux and BSD distributions.
How can I learn to use Remind?
- The definitive reference is Remind's manpage. You can probably access it on your system by executing
man remind
at the terminal, or just look it up online. - David Skoll, the creator of Remind, wrote an introduction for the Linux Journal.
- Mike Harris provided an OS X-oriented overview right here on 43 Folders.
Applications that Work with Remind
(See also: Remind Helpers)
Are there any frontends that make Remind easier to use?
- TkRemind is a GUI frontend that ships with Remind. Its point-and-click interface is quite easy to use, but also hides some of Remind's power from the user.
- Wyrd is a frontend for the terminal. It integrates with an editor of your choice, making it faster and easier to enter and edit reminders. Wyrd is probably a good choice for power users, as it is highly configurable and does not conceal any of Remind's functionality.
- wxRemind is a GUI frontend similar to Wyrd but based on wxPython rather than curses. The display features a calendar with days color coded to reflect the duration of scheduled appointments together with a daily schedule. Dates can be quickly selected either by mouse or cursor keys. Allows search for appointments and the integration of an external editor.
What applications can I use to display Remind's output graphically?
- For X Window desktops, the standard application would be
xmessage
. GNOME or KDE users may prefer gxmessage or kmessage, respectively.
Is there an application that converts iCal entries to Remind format?
Is there an application that converts Remind events to iCal format?
Answers to these have been moved to the Remind Sync FAQ.
Remind Use Cases
Are there any examples of configuring Remind to fit a particular workflow?
- Paul Pelzl has a description of his Remind usage, focusing on Wyrd and generating alarm popup windows.
- Phil Snowberger talks about his custom Remind alarm system, which uses a Screen session running under the Ion window manager.
Tips and Tricks
How can I get emailed 15 minutes before some events?
1. Add a 15 minute 'tdelta' to any reminders that you want advance warning for, e.g.
REM Nov 27 2006 AT 14:00 +15 MSG %"Do something%" %1
2. Launch a background Remind process in "daemon mode" and tell it to send triggered reminder messages to 'mail':
remind -z -k'echo "%s" | mail -s "reminder" username' ~/.reminders &
I have a recurring reminder. How can I cancel it on one or more dates?
Assuming you don't want to cancel every reminder on that date, you probably want to isolate the reminder in its own "omit context," like so:
PUSH OMIT Mar 16 2006 OMIT Mar 30 2006 REM Thu SKIP MSG poker game tonight POP
Note that the the reminder will not be cancelled unless the SKIP
keyword is used.
How can I generate popup windows to warn me of timed reminders?
You can use a separate application that takes text as input and simply displays it in a window; on GNU/Linux systems, gxmessage is one such program. Then you can launch Remind in "daemon mode" and direct it to generate a popup window for every timed reminder that is triggered:
remind -z -k'gxmessage -title "reminder" %s &' ~/.reminders &
You probably want this command to run exactly once, when your desktop is started. For an X Window desktop, this command could be placed in the startup script ~/.xinitrc
.
OS X users may want to consider running Growl, then using growlnotify
as a replacement for gxmessage
.
How can I automatically create a popup window with my daily reminders?
The rem
command can create a list of your reminders in the terminal. If you want to get a bit fancier, you can have your day's reminders automatically pop up in a window at whatever time you like. Just use cron to dump remind
's output to a window periodically, with a cron table entry like this:
# Pop up daily reminders at 8:00am 00 08 * * * export DISPLAY=:0.0 && \ remind -q -g ~/.reminders | gxmessage -title "today's reminders" -file -
This example is designed for an X11 desktop using gxmessage, but could be easily adapted for OS X running Growl or GeekTool.
How can I automatically back up my reminders file?
If you have a healthy level of paranoia, you will want to create backups of ~/.reminders
lets you accidentally delete your calendar. If you use a decent programmer's editor to modify your reminders file, you should be able to configure the editor to automatically make backups.
If you happen to use Vim, just add
set backup
to your ~/.vimrc
, and it will automatically create a single backup file entitled .reminders~
. If you are exceedingly paranoid, you might prefer to have redundant timestamped backups that record every change you make. Just add this code to ~/.vimrc
:
au BufRead * if exists("b:current_syntax") && b:current_syntax == "remind" au BufRead * let nowdatetime = strftime("%Y%m%d.%H%M%S") au BufRead * execute "set backupext=." . nowdatetime au BufRead * endif
This changes the backup extension for Remind files, so every time you modify reminder files you will get backups with filenames that look like .reminders.20060412.181038
. Naturally this will leave a lot of backups littering your home dir, so you might prefer to collect backups in a dedicated backup directory; check :help backupdir
to see how to make that change.
An alternative strategy is to periodically make copies of your reminders file using cron:
# make daily backups of ~/.reminders at 11pm, with names like .reminders-2006-04-12 00 23 * * * cp ~/.reminders ~/.reminders-`date --iso-8601`
I use Remind to generate publically-viewable calendars. How can I keep some of my reminders private?
Remind can be used to generate HTML or PostScript calendars, and naturally you may want to make these available to other people. But some reminders may be personal or confidential, so you would like to keep these private. Here are a couple of strategies:
- Take advantage of Remind's
INCLUDE
feature. Your default~/.reminders
file will contain reminders intended for public consumption. You have a second file called~/.reminders-private
where you store confidential data. Inside the private file you canINCLUDE
the public reminders:INCLUDE /your/home/directory/.reminders
Now you can view a public calendar using a command likerem -c
, or you can view a calendar containing all events usingremind -c ~/.reminders-private
- Use a variable. Enclose all private reminders in
IF
blocks:
REM Mar 12 AT 13:00 MSG meeting with Bob IF defined("private") REM Mar 12 AT 15:00 MSG double-secret meeting with Bob's nemesis ENDIF
Now the default for remind
is to display only public reminders, but you can choose to view all reminders by defining the private
variable on the command line:
rem -iprivate=1 -c
How can I handle to-do lists?
A very simple solution is to represent each task as a reminder like
REM Apr 1 *1 MSG File taxes
which will repeat every day after April 1. The reminder can simply be deleted when the task is complete, or one could add an UNTIL
clause to cause the reminder to expire on some date.
This method has the disadvantage that the same task will appear on multiple dates in a calendar view. This could be addressed by scripting a "floating" reminder that appears only on one day at a time. First define some helper functions in your reminders file:
FSET float(y,m,d) trigger(MAX(realtoday(), date(y,m,d))) FSET due(y,m,d) "(" + (date(y,m,d)-trigdate()) + ")"
Now you can schedule floating reminders like so:
REM [float(2006,4,1)] MSG File tax return [due(2006,4,15)]
As an example, this will display
File tax return (2)
two days before the deadline, and
File tax return (-3)
three days after the deadline. This reminder will only be triggered on the current date, so it won't clutter up a calendar view.
How can I view 'today' in the calendar view?
You can add the following reminder to your reminder file:
REM [trigger(realtoday())] CAL today