CalendarToolDoc.tioga
Copyright Ó 1989 by Xerox Corporation. All rights reserved.
David Goldberg September 7, 1989 10:09:00 pm PDT
Theimer, May 14, 1990 1:41 pm PDT
Last tweaked by Mike Spreitzer April 30, 1992 3:26 pm PDT
Willie-s, May 5, 1992 3:23 pm PDT
Chauser, January 13, 1993 3:25 pm PST
CalendarTool
CEDAR 10.1 — FOR INTERNAL XEROX USE ONLY
CalendarTool
David Goldberg
© Copyright 1989 Xerox Corporation. All rights reserved.
Abstract: The CalendarTool package has two major parts. The first, Remind, simply implements a database interface that's specialized for appointments and reminders about them. The implementation can use either a LoganBerry database or Sun's Calendar Manager Deamon. The second major part implements the Calendar Tool, which presents a graphical interface to Remind, and delivers reminders.
Created by: David Goldberg
Maintained by: David Goldberg <goldberg.pa> and Marvin Theimer <theimer:parc>
Keywords: browse, calendar, remind, LoganBerry.
XEROX  Xerox Corporation
   Palo Alto Research Center
   3333 Coyote Hill Road
   Palo Alto, California 94304

For Internal Xerox Use Only
Introduction
The CalendarTool package consists of 4 parts:
Remind, an interface to a database of appointments and reminders, and an implementation that keeps them in either a LoganBerry database or Sun's Calendar Manager Deamon;
RemindUI, which presents two interfaces for manipulating the Remind database: one through Commander commands, and one through a `RemindMe' button in Walnut;
RemindDelivery, which posts the appointment reminders called for in the Remind database; and
the Calendar Tool, which presents a graphical interface to the Remind database (and includes RemindDelivery).
Remind
A Remind database consists of a set of appointments. Each appointment occurs at a certain time, and lasts a certain duration. Some appointments are periodic, with one of serveral user-friendly kinds of period (i.e., every nth day, weekday, week, or month, or every year). Each appointment has a simple textual description.
Each appointment carries a set of reminders. There are two kinds of reminders: alerts and mail. An alert reminder starts a certain amount of time before the appointment, and lasts for a certain amount of time. An alert reminder is delivered by something like beeping and/or opening a window and/or flashing an icon or window. A mail reminder is delivered by mailing a note to a certain UNIX mail address a certain amount of time before the appointment.
There are different types of appointments. The most vanilla type is a meeting appointment; it has no further features. There are also command appointments and seminar appointments.
Support for Executing Commands
A command appointment's description is a Cedar Commander command; deliver consists of executing that command and displaying its output, if any. The duration of a command appointment is meaningless, and always 15 minutes. Putting command appointments in a Sun calendar is not yet recommended.
Support for Scheduling Seminars
A seminar appointment is like a meeting appointment, but also schedules 2 seminar mail announcements to be sent; one a week before the scheduled seminar time and one sent a day before the scheduled time. Putting seminar appointments in a Sun calendar is not yet recommended.
Database options
Every appointment put into Sun's Calendar Manager Daemon turns into a meeting appointment, and every one of its alert reminders is set to last until the start of the meeting.
Remind interacts with Sun's Calendar Manager Daemon via version 3 of its RPC interface (rtable3.x). When asked to interpret an rtable3.Appt, Remind maps an ``appointment Appt'' and a ``toDo Appt'' to a meeting appointment (in our terms); ``holiday'' and ``otherTag'' Appts do not appear through Remind's view of the database.
When using a LoganBerry database, Remind closes the database after every write. This means that you can back up your meetings by putting a line like
AutoBackUp.Files: -d /user/goldberg/top/CalendarBerry.df
in your user profile.
RemindUI
There is a `RemindUI' command that installs RemindUI.
RemindUI registers several Cedar Commander commands for manipulating the Remind database. They are: NewRemind, Remind, DeleteByTimeFromCal, DeleteAllFromCalendar, PruneCalendar, PackCalendar, and ShowCalendar.
RemindUI also integrates with Walnut, such that after both are run, Walnut message viewers include a `RemindMe' button. Hitting this button attempts to compose a meeint appointment for the meeting described in the message. The partly correct appointment is then presented to the user for editing. The editing viewer includes an `OK' button, which submits the appointment.
Interpreting messages is a tricky business. RemindUI can easily make mistakes in the start time and title, so pay attention to these fields of the attempted reminder. You can contribute to the analysis through Tioga's current primary selection. Whenver this selection is larger than 1 character, the `RemindMe' button considers extracting the start time and/or title from it. First the selection is parsed for a time. If that succeeds, that time is used instead of the result of analyzing the message. If the selection, minus the characters that formed the successfully analyzed time (and blanks and commas after them), is non-empty, it is used as the title, instead of the result of analyzing the message.
The analysis of the message begins by parsing the message body (the part after the headers) in a way similar to the treatment for headers. Where a line of the body begins with a word, perhaps with asterisks and/or colons before and/or after it, that is considered a tag for the rest of the line. The start time is produced by parsing the concatenation of the string tagged with "time" (case doesn't matter in tags) with a blank and the string tagged with ("day" if there is one, otherwise "date"). The title is the string tagged with "title", if there is one, otherwise the subject of the message.
RemindDelivery
RemindDelivery posts the reminders for your appointments. Sun's `cm' tool also performs this function, so you probably don't want to use both.
RemindDelivery does not post mail reminders. Alert reminders are posted by creating an iconic viewer and blinking it.
Sun's `cm' tool does not properly cope with command or seminar appointments. Alert reminders are posted by popping up an X window; the duration of the reminder is meaningless.
The Calendar Tool
There is a `CalendarTool' command that creates a Calendar Tool and installs RemindUI. There are four command line options to the CalendarTool command:
-l left column
-r right column
-o open
-c closed
The Calendar Tool gives a graphic view of your Remind database. The Calendar Tool lets you view, edit, and delete your meetings. You can create a meeting by clicking on NewMeeting and sweeping out a region with the mouse.
Initially, the Calendar Tool opens showing you your meetings for this week. Clicking the left mouse button on the ZoomIn button will zoom in on the day containing the selected meeting (sunday if nothing is selected). Clicking on ZoomIn again will show the selected meeting. To zoom back out, click on ZoomIn with the right mouse button. To move forward click on Next with the left button, to move backwards click on Next with the right mouse button.
You can select a meeting by clicking on it with the left mouse button. Clicking on a meeting with middle opens it, that is, creates a new viewer with that meeting. Thus meetings work like icons: left selects, middle opens. The Delete, Copy and Edit buttons work on the selected meeting. Finally, the ListMeetings puts all the "visible" meetings into a tioga viewer. That is, if you are looking at a monthly view, you will get all the meetings for that month.
To use the NewMeeting button, you must be looking at the weekly view. After clicking NewMeeting, press the left mouse button down at the start time (in the column for the day of the meeting), and release the button at the stop time. A template will then pop up, with the Start: and Duration: fields filled in with the time you selected (rounded to the nearest half hour unless you use the profile option below). Legal names for the repeat: field are once, daily, weekdays, weekly, biweekly, monthly, and yearly.
The Calendar Tool has been extended to allow you to specify (Cedar Commander) commands to be executed at prespecified times. Clicking on NewCommand will cause a prompt to appear in the message window asking you to click on a point in the calendar to specify a time (and date) for command execution. A panel will also appear (just as for a new meeting) in which you can type the command to execute, just as it would be typed to a Commander.
Another extension to the Calendar Tool is a NewSeminar button. This button has similar semantics to the NewMeeting button. A mail message form to be sent is brought up in a viewer for editting at the same time as the new seminar appointment is created. The editted mail form is stored in the user's Calendar directory (derived from the Remind.DbName user profile entry, if it names a LoganBerry database, or ~/appts) under a name of the form <date-of-seminar>.tioga. (Note: these files are not automatically deleted.)
The NewSeminar button will only appear in the Calendar menu line if the user's profile contains the option CalendarTool.AddSeminarButton set to TRUE. This button is primarily intended for use by the lab "seminar tzars", although anyone should feel free to take advantage of it.
The message form used for seminar announcements is the Cedar form /cedar/forms/SeminarMsg.form. An alternative message form can be used by specifying the user profile option CalendarTool.SeminarMsgForm (see User Profile Options below).
User Profile Options
Remind.DbName: "/tilde/yourName/.cedar/CalendarBerry.df"
This names either a LoganBerry database or a Sun Calendar Manager database (in the form ``unixuser@hostname'').
Remind.DfFile: "/tilde/yourName/.cedar/CalendarBerry.df"
An obsolete spelling of ``Remind.DbName''; consulted only if you have no ``Remind.DbName'' entry.
Remind.Alert: TRUE
If TRUE, meetings default to including ``alert'' style reminders.
Remind.AlertLeadTime: 20
If Remind.Alert, a reminder will begin blinking this many minutes before a meeting starts.
Remind.RemindLeadTime: 20
An old alias for Remind.AlertLeadTime; consulted only if Remind.AlertLeadTime isn't specified.
Remind.AlertDuration: 20
Remind will blink this many minutes before going away.
Remind.RemindDuration: 20
An old alias for Remind.AlertDuration; consulted only if Remind.AlertDuration isn't specified.
Remind.Mail: TRUE
If TRUE, meetings default to including ``mail'' style reminders.
Remind.MailLeadTime: 30
If Remind.Mail, a reminder message will be sent this many minutes before a meeting starts.
Remind.MailTo: <unixuser>@<hostname>
The reminder message goes to this recipient. The value should be a UNIX mail address; the default value is constructed from the current user's UNIX username and the host machines UNIX name.
Remind.Duration: 60
How many minutes the meeting lasts. This is used when CalendarTool displays a meeting graphically .
Remind.NewMeetingRound: 30
When you click on the NewMeeting button, and then sweep out the time for a meeting, it will be rounded to the nearest NewMeetingRound minutes.
CalendarTool.StartHour: 9
The earliest time displayed by CalendarTool in its weekly display. Time is in hours on a 24 hour clock.
CalendarTool.StopHour: 19
The latest time displayed by CalendarTool in its weekly display. Time is in hours on a 24 hour clock.
CalendarTool.AddSeminarButton: FALSE
If TRUE then add a NewSeminar button to the menu line. The seminar button is intended primarily for use by lab "seminar tzars".
CalendarTool.SeminarMsgForm: "/cedar/forms/SeminarMsg.form"
Specifies the mail message form to use for creating seminar announcements.