Reminder.Tioga;
Last Edited by: Teitelman, April 27, 1983 10:55 am
Overview
Reminder is a system for allowing the user to specify events at some point in the future, and to be reminded of the event when the corresponding time arrives by the appearance of an appropriately shaped blinking icon. When this icon is opened, it will contain the information originally associated with this reminder (currently either a text string supplied by the user or the contents of a walnut message.) The user can then reset the reminder notice for a future time via a menu button ("snooze" alarm), destroy the reminder notice, or simply turn off the blinker and ignore it.
Reminders can be entered into the system either via Executive commands, e.g. "Call Bob Taylor at 4PM", "Remember to see Frank Squires Monday", or by editing the file Reminders.txt.
There is currently no way to browse through the reminders that have been entered into the system, other than by examining the file Reminders.txt. In the future, we intend to integrate this facility with the Hickory calendar system, which is being totally redesigned.
Background
In July, 1982, Paul Rovner sent a message to the cedar community announcing: "Nifty Cedar application available for testing: Cedar users need never miss or be late for meetings or appointments again!!" His reminder system was a "modest (2 pages) but useful program ... that reads a text file named Reminders.txt and FORKs a process to post notices as flashing, iconic viewers at or after the specified time."
Imitation is the sincerest form of flattery, and the current reminder system owes a great historical debt to Paul's original efforts, although it is currently almost three times the size (not counting the fancy date and time parser which is itself larger than the reminder system), and very little of Paul's original code has survived.
The basic idea of a process which posts notices at specified times has been retained, although there are a greater variety of options associated with the posting of notices, and in what the user can do once a notice has been posted. The principal change in this system is in the user interface, i.e. how the user enters reminders. In the original system, the user edited a file, Reminders.txt, entering his reminder in the form of a stylized template. Although in many cases, this template could be obtained by copying a previous entry and suitably modifying it, it still required opening a file, making the edits, saving the file, etc. Furthermore, the user had to specify the time and date of the reminder fully and unambiguously, e.g. May 11, 1983 10:00 am.
I wanted a reminder system which would allow me to enter reminders as easily as I scratched notes to myself on small pieces of paper, of which there was always a veritable snowstorm on my desk, e.g. "Remember lunch with larry, wednesday noon". I also got a lot of electronic messages announcing events that I wanted to remember, such as Forums, MDG meetings, hiring meetings, etc., and I wanted a way of simply being able to click a button and automatically have the "right" thing happen.
Reminder Options
Reminder currently recognizes a number of parameters associated with the posting of notices.
The format of the file is a sequence of entries separated by CR, each entry being a time specification (e.g. July 29, 1982 3:25 pm) ending with CR, followed by zero or more (optional) parameter specifications (see list below), followed by a ROPE constant that is the text of the notice. The text following the END. below is an example Reminders.txt.
Until a better date and time parser is available, an "optional parameter" facility (keyword including ': followed by parameter value) is provided as a stopgap. Case is ignored.
Text: {rope}
as mentioned above, 'the Text:' key is optional, i.e. just a rope is interpreted as the Text. However, the text argument must be last.
REPEAT: {one of: HOURLY, DAILY, WEEKLY, MONTHLY, YEARLY, or a phrase that can be parsed by Tempus.Parse, e.g. 15 minutes, 3 days etc.}
this causes the notice to be posted at the specified interval.
DURATION: {number of minutes}
automatically kill the notice after this duration
LeadTime: {number of minutes}
post reminder this number of minutes prior to the indicated time. For use in conjunction with remind button, where the time is obtained via the selection.
UNTIL: {timestamp}
automatically kill the notice after this time
IconLabel: {token or rope}
the label for the icon. If not present, the text of the notice will be used.
Icon: {token or rope}
the name of the icon to be used. (Icons are named via the vial RegisteredIcons.Catalogue. For more details, see IconRegistry package).
Message: {rope or rope}
The name of a walnut message. When the reminder is posted, the contents of the reminder viewer will include the indiated message, if it can be found. For use in conjunction with remind button.
Executive Commands
Reminder registers the command Remember (with the commander so that it can be used from the command tool, though reminder currently requires that the userexecutive be loaded). Remember treats as options anything following / on the command line, and as the text of the message the command line up to the first /. (The event time will be inferred from the text if it is not specified in the parameters.) For example, "Remember to meet with Bob at 4PM" will register an event which will be posted at 4PM today, and whose text will consist of the above string. Remember Dealer Wednesday 1:15PM / LeadTime 15 Repeat Weekly Duration 60 will register an event which will be posted every Wedneday at 1PM (because of the leadTime), with duration 60 minutes.
If the event is successfully registered, it will also be written out to Reminders.Txt so that if the user boots or rolls back, previous reminders will not be lost.
When a reminder is posted
The icon flavor and label that is used is determined by the parameters to the event. Left alone, the icon will continue to blink until the specified duration, if any, elapses. If you open the reminder icon, you will see a tioga document with a second menu line consisting of the following buttons: Blinker, Relabel, 15min/hour/day, and NewTime. The blinker button is a toggle switch for turning on/off the blinking of the icon, i.e. the icon will resume blinking when you close it, unless you click the blinker button in the reminder. The 15min/hour/day and NewTime buttons reset the event for the corresponding time as described below. You can then delete the viewer and the event will be posted at the appropriate time. Finally, you can simply delete the viewer or icon and the reminder notice will simply go away (if it the reminder has been specified with the REPEAT option, e.g. "Dealer Wednesday 1:15PM REPEAT Weekly", then of course it will be reposted at the appropriate time.
Buttons
Blinker Toggle switch for turning blinker for icon on/off.
15min/hour/day left click = 15min, middle click = hour, right click = 1 day. Resets the event time for t + corresponding interval, where t = MAX[now, eventTime], or t - corresponding interval if shift key is down while button is clicked. You will be informed of the new time in the message window.
In other words, if you the reminder was posted at 1PM but you were out of your office, and it is now 1:30, and you left click this button, the reminder will be reposted for 1:45. If you click the button again, it will be reposted for 2PM. Holding the shift key down while clicking this button causes the event time to be decremented by the corresponding amount. For example, if it is now 2PM on Wednesday, right clicking followed by middle clicking while holding the shift key down, will reset the reminder for 1PM on Thursday. Note that you can always reset the reminder for an arbitrary time using the NewTime button.
NewTime The current selection is parsed as a time, using the current eventTime as base time, and the event is reset to the new time.
After editing your Reminders.txt file and saving it, Reminder will automatically discard the old list of reminders and re-read the file to construct a new one. This also happens automatically after a Rollback.
Examples