Remind FAQ

From Skoll.CA
Jump to navigation Jump to search
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.
  • Dianne Skoll, the creator of Remind, wrote an introduction for the Linux Journal.
  • Mike Harris provided an overview 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?

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 .

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 -

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 can INCLUDE the public reminders:
    INCLUDE /your/home/directory/.reminders
    Now you can view a public calendar using a command like rem -c, or you can view a calendar containing all events using
    remind -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