# # help pulldown choices # %% intro INTRODUCTION This program combines the functions of the various graphical calendar tools, and an alarm facility such as calendar(1). In the main window, a month calendar is displayed, consisting of 28..31 day boxes. Into each of these day boxes, appointments may be entered that trigger on that day, at a particular time. To enter an appointment, click on the daybox the appointment should go into. An appointment list popup appears. Click on the top "time" button. A date appears next to it, and there is a cursor in the time button. Enter a time, such as "11:00", and press Return. Skip the length button by pressing Return again. Now the rightmost button has a cursor in it; enter a short description of the appointment and press Return again. The appointment is now added; you can enter another one or press Done to exit the menu. The appointment has now appeared in the day box of the month calendar. An alternative way of entering appointments is the year calendar. It is accessible from the Year pulldown menu of the main month calendar. Its day boxes work exactly like those of the month calendar. Finally, the week view allows editing appointments by double-clicking them. In addition to simply adding an appointment by date, time, and note, various options such as repetitive appointments, advance warnings, message texts, automatic execution of shell scripts etc. are available in the appointment list menus. Appointments can also be entered from the command line, using a command like plan 1015 wake up and go home The date and time is in date(1) format, [mmdd]hhmm. When plan started up, it may have complained that no daemon is running, and offered to start one. The daemon is a separate program that waits for appointments to trigger, and takes appropriate action when one does. This means that without the daemon, no alarm will ever trigger. It also means that this interactive program does not have to run for alarm triggers, only the daemon always exists. plan reads appointments from files or from an IP server "netplan". The File->File list can be used to configure file names and server hosts. plan does not start netplan automatically; it must already run on the specified hosts. %% help GETTING HELP To get general help on a popup menu, press the Help button in that popup menu. To get help on a pulldown menu in the main month calendar window, install the pulldown menu by pressing and releasing the left mouse button on the menubar button, then press the HELP or F1 keyboard key. Help on most buttons is available by choosing "On Context" in the Help pulldown, and then pressing on a button or calendar. Every help window contains a Context button that does the same thing as "On Context". Normally, the Help or F1 keyboard keys are not very helpful, because many of the interesting items either have no shadow (so you don't know which tab group member has focus), or are drawn using Xlib. %% trouble TROUBLESHOOTING * If you get the message "No type converter registered for 'Pixel' to 'String' conversion", you probably have a CDE system that overrides standard resources with nonfunctional values. Run "plan -d >> ~/.Xdefaults; xrdb -merge" to fix. * If the time display in the month view and in the icon title do not update, and/or you get the message "X server fails to send timer events, switching to synchronous file writing", there is something wrong with your X server (probably XFree). The message shows that plan has noticed this (after changing an appointment at least 40 seconds after startup) and will at least make sure that no data is lost. There is no fix for the time display. * If you get messages like "pland: .../.dayplan: illegal line: y s--------- 1 1 0" or "pland: too many u stmts in .../.dayplan", you are running the wrong pland version, 1.4.4 or earlier instead of 1.4.7 or higher. Install the correct version of pland in the directory specified as LIB in the Makefile (/usr/local/mi/lib by default). Also make sure notifier, netplan, plan.help, and plan_cal.ps are in the same directory. * If you run netplan as root, and it can't open its home directory, check whether NOB_UID and NOB_GID in the Makefile really contain the user and group ID of the account, and make sure that can access the netplan.dir home directory in $(LIB). * if holidays are not shown in the month view, make sure that your day number font (Plan*calNumberFont) is at least twice as large as your note font (plan*calNoteFont). * if holidays are not shown in the week view, there may not be enough space, and you need to increase the bar height. Try this in your .Xdefaults file: "Plan*weekBarHeight: 26" (without the quotes). * pland does not execute scripts attached to appointments that were read from a server, and will print an error message instead. This is necessary because anybody could modify or attach a script to one of your appointments, and have it executed under your user ID. * If plan refuses to change appointments in other files that were attached with the File->File list menu, saying "no permission", make sure that you own the file. Having write permission is not enough. You can override this safety feature by turning off the "Only owner can write" mode in the Config->Calendar menu, but do so with great care because multiple writers are not sequenced. This applies only to files that are not read from netplan servers. * If your screen saver stops working when plan is running, put two lines "Plan*showIconTime: False" and "Plan*showIconDate: False" into your ~/.Xdefaults file. If plan updates the time in the icon, the screen saver timeout is restarted, and never reaches timout because updates happen once every minute. Only some X servers exhibit this problem. * On SGI systems, if the icon doesn't show a picture, copy the icon picture Plan.icon into your ~/.icons directory. If you don't have one and don't want one, set the plan*noIcon resource to False in your ~/.Xdefaults file. It may be necessary to restart 4Dwm to register the icon after copying it to ~/.icons. * If starting plan prints cpp errors to stderr (or pops up an error dialog on SGIs if desktop error reporting is turned on), change all '#' characters in your ~/.holiday to ':'. The comment introducer was changed in version 1.3 to allow #include statements. * If the main menu shows an incorrect time above the month calendar, and alarms trigger an hour early or late, plan might have an incorrect idea of your timezone and Daylight Saving Time status. To correct this, choose "Adjust Time" from the Config pulldown, and change the defaults. * If the pulldowns in the main menu show labels like "button_3", add -DNOMSEP to whatever xxx_C line you are using in the Makefile, and recompile. If the problem persists, also add -DFIXMBAR. * On some BSD-based systems, it takes a while for appointment changes to propagate to the daemon. The result is that alarms that trigger a few minutes after they were added or edited are ignored. This is normal on these systems. However, if alarms don't trigger at all, use the ps command (see man ps) to make sure that pland is running, and verify that its process ID agrees with the number in /tmp/.plandUID (with UID being your numerical user ID). Also, plan may get out of sync if you start more than one, and answer Continue in the warning dialog. * Previous versions of plan contained a recommendation to put "killall pland" into your .logout file. Don't do this, it kills the daemon whenever you delete a window, and no more alarms will trigger. * The plan program uses quite a few colormap entries. Although there is a black&white fallback mode, you may have problems starting other programs that also need many colormap entries. The only workaround is to kill plan when you don't need it; alarms will trigger anyway. * If radio and toggle buttons appear gray regardless of the colToggle and colRed resources, make sure that the sgiMode resource is False. In SGI desktop mode, colToggle and colRed are disabled because they would override the desktop defaults. The sgiMode resource is True only if plan was compiled with "make sgi5", add "plan*sgiMode: False" to your ~/.Xdefaults file in this case, or recompile with "make sgi4". * If you are using LessTif and the File->File list dialog is missing all buttons except the toggles, upgrade to LessTif version 0.87.1 or later. * The message "Warning: No type converter registered for 'Pixel' to 'String' conversion" on CDE systems such as Sun may mean that a font was not found. Use plan -d to list all resources and verify that all fonts exist, using the xfontsel program. If not, change the lines with bad fonts and add them to your ~/.Xdefaults file. If you have problems you can't resolve, or if you have suggestions for new features, or porting instructions for new platforms, send mail to me at thomas@bitrot.de. Note that the plan version on the SGI Developer's Toolbox CD supports only SGI systems. If you mail, do not forget to include your version number as reported by "plan -v". %% files FILES AND PROGRAMS The calendar program is distributed as four programs and two data files: plan, pland, notifier, netplan, plan.help, and plan_cal.ps. Plan should be installed in the directory given as DIR in the Makefile, by default /usr/local/bin, and the others in the directory given as LIB, also /usr/local/bin by default. The distribution also contains .holiday files for various countries. "plan" is the main interactive calendar program that you are using at the moment. It is used to view calendars and to enter appointments at specified dates and times, with various optional parameters. It depends on the plan.help file, and writes all configuration parameters and appointments to two files ".dayplan" and ".dayplan.priv" in the user's home directory. It signals the daemon (SIGHUP) when that file changes, to force the daemon to re-read it. "pland" is the daemon. Its purpose is to watch alarms and warnings, and to perform the appropriate action if one triggers. The "plan" program need not run to trigger an alarm. "pland" is a very small program with no X code, to avoid excessive system load. It reads the ~/.dayplan* databases, but never writes to them. pland is normally started by the user's .xsession or .sgisession file. "notifier" displays an ascii text in a color-coded window. It is a separate program to keep "pland" small. It handles snoozing all by itself. "netplan" is an IP server that must be started before plan and pland start. It is sufficient to have one per network of hosts. If enabled with the File->File list dialog, all plan's and pland's connect to the netplan server to read and write appointments. netplan properly sequences all events and informs connected programs of changes. "plan.help" contains all help messages. "plan_cal.ps" is a PostScript skeleton containing PostScript code used by plan when printing calendars. This file can be used to change the defaults for margins and fonts; future versions may use popup menus for this task. Always keep the original version when editing it. "Plan.icon" is an SGI RGB picture file that should be copied to the ~/.icons directory. On SGIs, the noIcon resource is set to True by default to make 4Dwm use the full-color picture. It may be necessary to restart 4Dwm to register the icon. In the user's home directory, there are three files. ".dayplan" contains the public appointments (the ones without the padlock icon in the appointment list menu, which can be displayed in other users' week views). ".dayplan.priv" contains the private appointments (the ones with a padlock, which cannot be accessed by other users). ".holiday" contains a description of public holidays and vacations as specified with the Define Holidays popup in the Config pulldown. For a description of the .dayplan* format, see the plan(4) manpage. If the LIB directory (specified in the Makefile) contains a file "holiday", it is read after ".holiday" to add system-wide holidays to the user's holiday list. Both plan and pland use the environment variables $PATH, $PLAN_PATH, a built-in default path, and the directories DIR and LIB specified in the Makefile for locating programs and plan.help. plan does not start netplan automatically; it must already run on the specified hosts. plan can read database files created by the desktop database manager "xmbase-grok", version 1.4 and later. Grok is a database manager that includes a GUI builder to define custom database applications, and comes with predefined applications such as a phone directory, a todo list, a workplan manager, a bibliography and others. Grok is available on the same servers as plan. The primary servers are ftp.fu-berlin.de and ftp.x.org. See http://www.bitrot.de/index.html. %% network NETWORKING netplan is an IP service. There is normally only one on a network of hosts. It manages all appointment files for all plan and pland programs on the network. The advantage over having these programs read files is that multiple access is sequenced such that nobody overwrites or cancels changes by others, and that everybody is immediately informed of changes automatically. netplan must be started manually before the first plan or pland is started. It sits on a port on a specific host, by default port 5444. It should be started as user "nobody", but any other user will work as long as it can read and write netplan's home directory (defined in netplan_if.h, by default /usr/local/lib/netplan.dir). If netplan is started as root, it switches to "nobody". This is useful if netplan is started from a boot script like /etc/rc2.d/S99netplan (System V) or /etc/rc.local (BSD). There are several security concerns. netplan does not provide access authentification. Everybody can read and write any file managed by netplan. For this reason, plan continues to keep private (padlocked) appointments in a ~/.dayplan.priv file, not under netplan control. SECURITY FEATURES Apart from the ability for everybody to access everybody else's non- private appointments, netplan must satisfy general security concerns. In particular, it must not be usable to open network security holes that allow access to files that have nothing to do with plan. The security features are: * if run by root or setuid root, netplan switches to "nobody". The UID and GID of is compiled in, not determined at runtime. netplan will refuse to run setgid-but-not-setuid root. * netplan does not execute other programs (this is one of the reasons why there are still pland daemons). * netplan cannot be used to access files that are not in its home directory, /usr/local/lib/netplan by default. Absolute paths are converted to paths relative to the home directory, and paths with ".." are rejected. * netplan refuses to access softlinks and files that have more than one hardlink. This may be inconvenient at times, but without this the user who started netplan would be wide open to the entire net. * netplan is not sendmail. All buffers are checked for overflows. It is implemented as a single 1158-line C file and can be hand-checked easily. * netplan is Purify'd. * the pland daemon does not execute scripts that were read from a server. %% widgets WIDGETS AND RESOURCES plan uses the following environment variables: PLAN_TZ provides defaults for the timezone and Daylight Saving Time. TZ provides the defaults if PLAN_TZ is not set. LOGNAME provides your user name for the default mailer command. USER provides your user name if LOGNAME is undefined. user provides your user name if LOGNAME and USER are both undefined. HOME is your home directory, for locating .dayplan* and .holiday. PLAN_PATH and PATH are colon-separated search paths for finding programs. First, BIN and LIB from the Makefile are searched, then PLAN_PATH, then PATH, and finally a built-in default search path. Note that the latter contains the current directory. To get a list of default X resources of the "plan" program, run it with the -d option. The output can be directly appended to the .Xdefaults file in your home directory or saved into a file "Plan" in your app-defaults directory. If you install a system wide app-default file make sure that lines do not start with "plan"; otherwise users might not be able to override the setup. Omit the application name or use the application class name "Plan". The "notifier" program also supports a -d option. For example, for a much smaller month calendar, append these lines to your ~/.Xdefaults file or modify your app-defaults file: Plan*colGrid: #909090 Plan*menubar*fontList: -*-helvetica-bold-*-normal-*-14-* Plan*fontList: -*-*-medium-r-*-*-14-* Plan*calNumberFont: -*-helvetica-*-r-*-*-14-* Plan*calBoxWidth: 40 Plan*calBoxHeight: 34 Plan*calBoxMargin: 10 Plan*calBoxTitle: 15 The resources of "notifier" can be set similarly. Its application class name is "Notifier". Here are plan's main resources, listed by view, in the order geometry, fonts, and colors: GLOBAL RESOURCES noIcon: don't draw anything into the icon. This should be used on SGI systems so that 4Dwm uses the color picture as an icon. The color icon should be moved to ~/.icons/Plan.icon . showIconTime: if true, show the current time in the icon title. For some reason, this may prevent the screen saver from kicking in. showIconDate: if true, show the current date and time in the icon title. For some reason, this may prevent the screen saver from kicking in. frameToday: put a black frame into today's day box in the month view. This is useful on 1-bit black and white systems. noMonthShadow: in the month view, only draw the days that actually fall into this month, don't draw other days as shadows. sgiMode: for SGI systems running IRIX 5.2 only. Switches plan to the SGI desktop style if True. colToggle and colRed are ignored in this mode. sgiMode is True by default if plan was compiled with "make sgi5". sgiMode is far superior to classic Motif. You may also set `useSchemes' to True, and set `scheme' to Lascaux. When using schemes, many color and font resources are ignored. startupAs: if set to ``smallmonth'', start with small month window menubar*fontList: font for menubar and pulldowns fontList: default font for buttons and titles helpFont: font used in help popups background: standard window background color colStd: standard foreground color for button labels etc colBack: standard background color colWireFrame: used for exclusive-or'ed wireframe boxes when dragging colGrayIcon: color of appt entry option icons if the option is disabled colTextBack: all inset text entry buttons use this color, pink by default colToggle: most toggle buttons use this color when the toggle is on colRed: the pin toggle in appointment edit popups uses this color when on noteWidth: the width of the note column in the appointment entry dialog, in pixels (new in version 1.5) MONTH VIEW RESOURCES calBoxWidth: width of one day box calBoxHeight: height of one day box, determines number of note lines calBoxMargin: margin size at the edges of the inset calendar calArrowWidth: width of the week popup arrows at the left edge calBoxTitle: height of the title area with the weekday names calNumberFont: large font used for day numbers, twice as large as note font calNoteFont: very small and narrow font for notes frameToday: put black frame in today's day box. Useful for 1-bit screens. colCalBack: standard white month background color colCalShade: boxes with days in them use this background color colCalAct: no longer used, was day highlight before plan 1.7 colCalToday: today's daybox uses this color, green by default colCalFrame: color of the thin frame that surrounds the grid colGrid: color of the grid that surrounds the day boxes colWeekday: color of weekday day numbers, black colWeekend: color of weekend day numbers, dark red colNote: color of note texts, something not too dark that doesn't stand out colNoteOff: this color is used for suspended notes, much lighter colHolidayBlack: color used when "black" is used in the holiday definition colHolidayRed: color used when "red" is used in the holiday definition colHolidayGreen: color used when "green" is used in the holiday definition colHolidayYellow: color used when "yellow" is used in the holiday definition colHolidayBlue: color used when "blue" is used in the holiday definition colHolidayMagenta: color used when "magenta" is used in the holiday definition colHolidayCyan: color used when "cyan" is used in the holiday definition colHolidayWhite: color used when "white" is used in the holiday definition YEAR VIEW RESOURCES yearMargin: size of margin around the entire year yearGap: size of gap between months yearTitle: height of space reserved for year number at the top yearBoxWidth: width of one day box yearBoxHeight: height of one day box colYearBack: background color of the entire year area colYearBoxBack: background color of month boxes colYearNumber: color of day numbers colYearWeekday: color of weekday names colYearMonth: color of month names colYearTitle: color of the year number at the top colYearGrid: color of the thin box that surrounds every month yearTitleFont: large font used for the year number at the top yearMonthFont: medium italics font used for month names yearWeekdayFont: small italics font used for weekday names yearNumberFont: small font used for day numbers WEEK VIEW RESOURCES weekMargin: size of margin around entire week view weekGap: height of gap between days weekDayWidth: width of the leftmost column with the weekday names in it weekHourWidth: width of one hour column weekBarHeight: height of an appointment bar weekBarGap: height of gap between appointment bars weekMaxNote: appointment note texts longer than this width are clipped colWeekBack: background color of the entire week view colWeekBoxback: shaded background color of the box that represents one day colWeekTitle: color of the title at the top colWeekGrid: color of the lines that separate hour columns colWeekDay: color of the weekday names in the leftmost column colWeekNote: color of note texts printed into or next to appointment bars colWeekFrame: color of the thin lines around the edges of bars colWeekWarn: color of the part of bars that represents advance-warning times colWeekUser_0: color of user's own bars, and one of the file colors (blue) colWeekUser_1: another color available for bars from other files. ... The colors are selectable in the File list popup. colWeekUser_7: the last file color. eight colors total are available weekTitleFont: font used for the title at the top giving the interval weekDayFont: font used for weekday names in the leftmost column weekHourFont: font used for hours above the bar chart weekNoteFont: small font used for appointment notes inside or next to bars DAY VIEW RESOURCES Day views share most resources with the week view, with the following exceptions that replace the corresponding week view resources: dayMargin: margin all around the display and gap between days dayGap: horizontal gap beetween appointment columns dayHeadline: height of date at the top of each day box dayHourWidth: width of the hour column at the left view edge dayHourHeight: distance between two consecutive hour lines dayBarWidth: width of an appointment box YEAR OVERVIEW RESOURCES yovWWidth: width of window showing the year overview yovWHeight: height of window showing the year overview yovDayWidth: width of one day in pixels when zoomed out all the way (also uses weekMargin, weekGap, weekDayWidth, weekBarHeight, weekBarGap, and weekMaxNote.) %% languages LANGUAGES Language support in plan is simple. All messages are hardcoded in the program in English, but may be substituted before being displayed. Substitution is based on two files, both in the standard LIB directory (/usr/local/lib by default): plan.lang.english is the reference file, and plan.lang.L is the replacement file for language L. If a message in plan matches line N in plan.lang.english, and language L is selected with the Config->Language pulldown, line N of plan.lang.L is displayed. To create a new language L, create a file plan.lang.L in the same directory where plan.lang.english is located. Copy plan.lang.english to plan.lang.L and translate every line. All ISO-8859 characters are legal. Make sure that all %d and %s codes are present and in the correct order! Also doublecheck that plan.lang.english and plan.lang.L have the same number of lines; plan will reject the language otherwise. Send me a copy of the new language file, as well as all others that you had to change to ensure that all language files have the correct number of lines (see below). Send mail to thomas@bitrot.de . The plan.lang.english file must be sorted. All messages in plan must match a line in this file exactly. Lines may contain \n (newline) and \t (tab). When inserting a line into plan.lang.english after adding a message to the plan sources, insert it in the SAME line in all other plan.lang.*! If you do not know the translation, insert the English string followed by an asterisk (*), which makes it easy for me to find. If you see an asterisk * in a message and plan is less than six months old, please send me a translation. To create a help file for language L, copy the file plan_help to plan_help.L, and translate all text freely except the words following %% at the beginning of a line, which must remain unchanged. Due to the difficulty of maintaining language files, there will always be English-only strings. Also, there is no way to adjust accelerators in pulldown menus. # # main window, menu bar and month calendar # %% pd_file FILE PULLDOWN File list -- list of appointment files. This dialog configures group names (first button column in edit menus) to read either from a file path or a netplan server. Reread databases -- read .dayplan file and all other appointment files configured with File->File list. Rechecks file permissions and owner- ship if applicable. Delete Past Entries -- removes all appointments before today's date, except those that come from files with no write permission. Print -- pop up a menu that prints PostScript calendars. About -- prints the version number and my email address. Please mail bug reports to that address. Quit -- write data base back to the ~/.dayplan file if it has changed, and exit the program. The daemon will continue to run. %% pd_config CONFIG PULLDOWN Calendar views -- installs the main preference popup, with global options, month view options, and week view options. Adjust time -- define time-of-day corrections, time zone, and Daylight Saving Time mode. Use this menu to adjust the time if appointments appear early or late. Alarm options -- pops up a menu that defines the actions taken when an appointment triggers. The actions are taken by a daemon and are independent of whether the interactive calendar program runs or not. Define holidays -- pops up a window that allows specification of holidays and vacations. %% pd_search LANGUAGE Choose a new language. It will fully come into effect only after restarting plan. See Help->Languages for more information. %% pd_search SEARCH PULLDOWN Today -- print an appointment menu with today's items. Tomorrow -- print an appointment menu with tomorrow's items. This Week -- print an appointment menu with all items of the current week. Next Week -- print an appointment menu with all items of the week after the current week. This Month -- print an appointment menu with all items of the current month. All -- print an appointment menu with all items. Search Keywords -- print an appointment menu with all items that contain the specified string in their note, message, or script fields. Private -- print an appointment menu with all private appointments. One file -- print an appointment menu with all your own appointments or all those in a particular file created with File->File list. %% pd_view VIEW PULLDOWN All views either appear in their own windows (the default) or replace the month view in the main window if this mode is enabled in the Config -> Calendar views dialog. Day -- show a day view for the current day that plots appointments on the given day against a vertical hour axis. Pressing on the upper half of month day boxes, or the upper left corner of year day boxes, also switches to day mode. Week -- show a week view for the current week. Week views plot appointments as colored bars on a hour/day chart. The small triangles at the left edge of month and year views also switch to week mode. Small month -- show the main month view, small window mode. Large month -- show the main month view, large window mode. Pressing a month name in the year view also switches to month mode. Year -- pop up a year view menu with 12 month calendars for the current year. Year Overview -- pop up a linear 365-day year view menu that plots multiday appointments in the current year. This is intended for graphing vacations. Goto today -- switch all views (day, week, month, year, year overview) such that they contain today. Goto -- popup a date entry menu, then switch all views such that they contain the entered date. # # help popup # %% help_done DISMISS Remove the help popup. # # month view # %% cal_month CURRENT MONTH The month displayed in the month calendar below. It can be incremented and decremented to show the next or previous month. The inc/dec arrows will wrap to the next or previous year. The currently displayed month can also be changed by pressing on any month name in the year calendar (see Year pulldown). To return to the current month, choose Goto today in the View pulldown. %% cal_year CURRENT YEAR The year that the month shown below is in. %% cal MONTH CALENDAR VIEW Displays the current month, as specified by the month and year controls above. The format can be changed with the Config pulldown. Each day box contains a list of appointments on that day, with time and note string. Advance warnings that appear several days ahead of the actual appointment are shown with "W:" inserted before the note. The note string is grayed out if the appointment is suspended (the button to the left of that appointment in the appointment list is turned off). The appointment is not shown at all if it is "omitted" using the exception popup that can be installed in the appointment entry menu by pressing on the triangular warning sign button. If there are more appointments than will fit in the box (usually 3), only the first three are shown; the "Don't show today's past" option in the Options pulldown determines which three. If there are more appointments than will fit in the box, three dots are shown in the lower right corner of the box. If there is a full-line holiday on a day, the holiday name will use the first line. Appointments that have no time ("-" was entered in the day menu) come next, and finally the regular appointments. Todays's day box is highlighted green. When a day box is opened by pressing down on the lower half of it, a list of all appointments on that day is popped up. There is a small triangle to the left of every week row. Pressing one of the arrows pops up a week view that displays the week in a hour vs. day chart. The mouse cursor changes as it is moved the calendar: - over a triangle at the left edge, hand cursor: * Call a week calendar for that week - in the top part of a day box, hand cursor: * Zoom up to a day calendar for that day - in an appointment, four-sided arrow or pencil: * Press and release the left mouse button to edit all appointments on that day. This will call a list popup that can be used to add, change, and delete appointments. - in an appointment, four-sided arrow or pencil: * Press and hold down the left mouse button and move the mouse to move the appointment to a different date. Note that if the appointment is set to repeat on certain weekdays or days of the month, moving the appointment changes the first trigger date but the weekday or month day setting does not change, which means that the calender may seem unchanged after moving. - in blank space, pencil: * Press and release the left mouse button to enter a new appointment on the day under the cursor # # year calendar window # %% year YEAR CALENDAR VIEW Displays the current year, as specified by the year controls in the main month calendar, at the time the year menu was popped up. Later changes to the year control will not change the year menu. The year calendar basically consists of 12 small copies of the month calendar. The day boxes work the same way. The current day is green. Pressing on the bottom right corner of a day box (not the bottom half as in month day boxes; they are too small for that) opens it and shows the list of appointments on that day. Pressing the top left corner switches to day view. There are also week view call triangles to the left of every week row. Pressing on a month name will switch the month calendar to that month. The day boxes are too small for appointments and notes; if there is at least one appointment on that day (suspended or not), a small black square is shown in the day box. Appointment are ignored if they are "omitted" using the exception popup that can be installed in the appointment entry menu by pressing on the triangular warning sign button. Drag and drop is not supported in year views because no appointments that could be dragged are visible. # # Time adjustment popup # %% adj ADJUST TIME This menu serves two purposes. First, it allows to adjust the system clock, which on many systems or networks controlled by warring timelords may be off by a few minutes. By adding a constant to the system time, alarms can be made to trigger accurately. Second, determining the timezone a system is in is a black art. There are various incompatible TZ formats, unavailable or nonstandard system calls, and Daylight Saving starting and ending dates that have not been specified correctly by the system administrator. This menu allows users to specify the regular timezone relative to GMT (Greenwich Mean Time, or UTC). In addition, one hour can be added while Daylight Saving Time (DST) is in effect. DST can be either be taken from the system time, turned on or off manually, or switched automatically from a begin and end day. These days change every year, and can be entered with this menu. They are entered as Julian dates (day numbers relative to January 1 in the range 1..366). Julian dates can be determined with the Julian Dates option in Config. The "use system time" choice is available only on certain systems, and is not tested well. Unfortunately this isn't as portable as it should be. If you can contribute corrections or ports to new platforms, please implement them in time.c, function guess_tzone, near line 238, and send me the result (thomas@bitrot.de). This is EXPERIMENTAL! Week number 1 is the first full week of the year means that the first week in January is defined to be week number 1 only if all seven days of that week fall in the current year. Alternatively, the first week can be defined to be the first week whose Thursday falls into the new year. The latter flag takes priority over the former. If both flags are off, any partial week is counted as week number 1. This menu only affects your plan and its daemon, pland. The system clock is not affected, and all programs other than your own plan program will still believe in the official network time. %% adj_time ADJUST SYSTEM CLOCK Enter a system clock correction constant here. For example, if your system clock is fast by two minutes and 20 seconds, enter "-0:02:20". If your system clock is slow, enter a positive time. The correction applies only to plan and the plan daemon that waits for alarms. The system clock and other programs are not affected. %% adj_zone TIMEZONE At startup, the timezone is determined automatically. This may give incorrect results on some system, especially if the system timezone files are not configured properly. With the Timezone field, the timezone can be set in hours:minutes relative to Greenwich Mean Time (GMT or UTC). To revert to the system defaults, press the Guess button. While Daylight Saving Time is in effect, another hour is added to the timezone. %% adj_dst DAYLIGHT SAVING Many countries switch the time one hour forward in the summer. This is normally done automatically by the system, but requires the system administrator to change the timezone start and end dates every year. If this configuration does not agree with reality, this menu allows plan users to override it. Daylight Saving can either be turned on permanently (in the summer), turned off permanently (in the winter, or if your country does not have Daylight Saving time), or turned on on a begin date and and end date. The begin and end dates must be specifies as Julian dates; use Julian Dates in Config to find out the numbers. Press the Guess button to return to system defaults. Daylight Saving is turned on and off at 2:00 in the morning on the begin and end days, respectively, unless overridden by system files. See "man timezone" for details. %% adj_guess GUESS TIMEZONE AND DST Use system defaults for the timezone and Daylight Saving begin and end dates. This function is of limited use because it depends on a certain format of the $TZ environment variable, which is frequently undefined or contains a description in a format not understood by plan. Note that plan does NOT attempt to use standard Unix functions for guessing the time zone. There are too many exotic systems out there for this to work reliably. Version 1.0 of plan attempted this, which turned into a user support nightmare. This is not really satisfactory for plan users, but very convenient and time-saving for the plan author (me) who gets loads of email about plan anyway. Sorry. %% adj_done DONE Remove time adjustment menu. # # Alarm Options popup # %% opt ALARM OPTIONS An appointment can trigger up to three times: at the specified alarm time, and at the advance-warning times that can be entered in the appointment list menu. For every type of trigger, the action taken can be specified with this menu: 1. The green, yellow, or red window pops up at the trigger time. It contains the appointment's message or note text. The window position is randomized. 2. Mail is sent, using the "Mailer" command string. The string "%s" in the mailer command is replaced with an appropriate subject string. The appointment's message or note text is used as the body of the mail. 3. A program is executed. Playaiff or something else that makes noises is a good choice. This is independent of the appointment's script, which is always executed (at the alarm time only, not at warning time). If the command string contains %s, it is replaced with the appointment's note string (last column in appointment entry dialog). The daemon's PATH environment variable is used to locate the mailer and the programs. Defaults are supplied if there is no PATH. In all cases, the umask is set to 077. %% opt_early EARLY WARNING This specification is used for early-warning triggers. %% opt_early_w GREEN WINDOW The daemon pops up a green window when the early-warning time is reached. The window contains the appointment's message or note text. %% opt_early_m EARLY WARNING MAIL Mail is sent when the early-warning time is reached. The Mailer button at the bottom specifies the program to use; "%s" is replaced with an appropriate subject string. %% opt_early_x EARLY WARNING PROGRAM The program specified in the text area on the left is executed when the early-warning time is reached. If the command string contains %s, it is replaced with the appointment's note string (last column in appointment entry dialog). %% opt_late LATE WARNING This specification is used for late-warning triggers. %% opt_late_w YELLOW WINDOW The daemon pops up a yellow window when the late-warning time is reached. The window contains the appointment's message or note text. %% opt_late_m LATE WARNING MAIL Mail is sent when the late-warning time is reached. The Mailer button at the bottom specifies the program to use; "%s" is replaced with an appropriate subject string. %% opt_late_x LATE WARNING PROGRAM The program specified in the text area on the left is executed when the late-warning time is reached. If the command string contains %s, it is replaced with the appointment's note string (last column in appointment entry dialog). %% opt_alarm ALARM This specification is used for main alarm triggers. %% opt_alarm_w RED WINDOW The daemon pops up a red window when the main alarm time is reached. The window contains the appointment's message or note text. %% opt_alarm_m ALARM MAIL Mail is sent when the main alarm time is reached. The Mailer button at the bottom specifies the program to use; "%s" is replaced with an appropriate subject string. %% opt_alarm_x ALARM PROGRAM The program specified in the text area on the left is executed when the main alarm time is reached. If the command string contains %s, it is replaced with the appointment's note string (last column in appointment entry dialog). %% opt_mailer MAILER Specifies the program to use to send mail. Mail is sent when one of the "Send mail" buttons above is enabled. In the mailer string, "%s" is replaced with an appropriate subject string, containing the reason, date, and truncated note or message text. The default is "Mail -s %s ". %% opt_timeout TIMEOUT In this field, a time can be entered. If this field is blank, alarms popped up by the pland daemon when the appointment's warning or alarm time is reached will stay on the screen forever, until the Dismiss button in the popup is pressed. A window lifetime can be entered as hours:minutes. A window popped up after this change will disappear by itself after the specified time. %% opt_done DONE Remove the Alarm Options popup. # # calendar view config popup # %% calconfig CONFIGURATION All configuration data is saved in the ~/.dayplan file. The date and time format is specified with this menu, the program does not use X11R5 or Unix locale information. The menu is split in three parts: GLOBAL OPTIONS: Use main window for all views -- show all view modes (day, week, month, year, year overview) in the main window instead of popping up a separate window for each view. Week begins with Sunday -- print Sunday in the first column, as in US calendars, rather than in the last column. Month/Day/Year date format -- print dates in month/day/year format, rather than in day.month.year format. 12 hour am/pm time format -- print all times in US am/pm format, rather than in the European 24-hour format. Auto delete past entries -- automatically remove all expired appointments before today's date. MONTH VIEW OPTIONS: Show Julian dates -- print the day number in each month day box, beginning with 1 on January 1. Show week numbers -- print the week number in each leftmost month day box, in parentheses. The next option defines what kind of week number. GPS week numbers -- week numbers, if enabled, are shown in GPS (Global Positioning System) format, in square brackets. GPS weeks are defined in the range 0..1023 only. First week is full week -- normally, week number 1 in a year is the the first partial week of the year. In full-week mode, the first week is the first week with all seven days in the year. First week is first week with Thursday -- another way to define the first week: the first week is the first whose Thursday falls into the new year. This flag has priority over the previous flag. Colored background for other files -- if enabled, the note text that appears in the day boxes in the month view has the background color chosen in the "Group" column in this menu for this user, provided the "Month" mode button is also on. This is useful for classifying appointments quickly, but tends to make the month calendar look gaudy. Bars in the week view always use the group color as background color. Don't show today's past -- in today's daybox (shaded green), skip all entries that are in the past, and only show the next three future entry notes. DAY AND WEEK VIEW OPTIONS: These modes are used for both the day view and the week view, which are in many ways similar. The top text button allows configuring the number of days shown in the week view. Minimum is 1, maximum is 28, and the default is 7. The week view shows bars that represent appointments. The horizontal position and length of the bar represents its trigger time and length. The chart is clipped at the left and right edges at 8:00 and 20:00 by default. These defaults can be changed with this popup. Press on the text buttons to get a cursor, and enter the hour. Only the hour can be entered, minutes are ignored. To set the end time to midnight, both 0 and 24 are accepted. If advance-warning times are enabled, show appointments' warning periods as gray extensions at the left end of appointment bars. If file names are enabled, the name of the appointment file are displayed in the week menu is displayed in or next to the users's bars in the week view. For adding files, such as appointments of other users on the network, see the help for the File->File list popup. Normally, entries without time ("-" in the time column in the entry menu) are shown as a small triangle at the left edge of a week view line. If the large-bar mode is enabled, they appear as a full line. %% global_flags GLOBAL OPTIONS Use main window for all views -- show all view modes (day, week, month, year, year overview) in the main window instead of popping up a separate window for each view. Week begins with Sunday -- print Sunday in the first column, as in US calendars, rather than in the last column. Month/Day/Year date format -- print dates in month/day/year format, rather than in day.month.year format. 12 hour am/pm time format -- print all times in US am/pm format, rather than in the European 24-hour format. Auto delete past entries -- automatically remove all expired appointments before today's date. Run netplan scripts -- appointments with shell scripts that were read from a netplan server are not normally executed because that makes it easy for others to execute programs under your user ID, which is a serious security risk that is not acceptable in most commercial environments. However, on your home system you may not care and let the daemon execute such scripts by enabling this flag. You have been warned! Only owner can write files -- if enabled (the default), you will not be able to change appointments from other files even if you have write permission. You need to be the owner too. This effectively ensures that for each file, there is only one person who can write it, so conflicts cannot happen. Turn this off at your own risk... If all files are read from servers and not from disk paths, this mode has no purpose and is grayed out. %% month_flags MONTH VIEW OPTIONS Show Julian dates -- print the day number in each month day box, beginning with 1 on January 1. Show week numbers -- print the week number in each leftmost month day box, in parentheses. The next option defines what the first week of a year is. First week is full week -- normally, week number 1 in a year is the the first partial week of the year. In full-week mode, the first week is the first week with all seven days in the year. Colored background for other files -- if enabled, the note text that appears in the day boxes in the month view has the background color chosen in the "Group" column in this menu for this file, provided the "Month" mode button is also on. This is useful for classifying appointments quickly, but tends to make the month calendar look gaudy. Bars in the week view always use the group color as background color. Don't show today's past -- in today's daybox (shaded green), skip all entries that are in the past, and only show the next three future entry notes. %% week_flags DAY AND WEEK VIEW OPTIONS These modes are used for both the day view and the week view, which are in many ways similar. The top text button allows configuring the number of days shown in the week view. Minimum is 1, maximum is 28, and the default is 7. The week view shows bars that represent appointments. The horizontal position and length of the bar represents its trigger time and length. The chart is clipped at the left and right edges at 8:00 and 20:00 by default. These defaults can be changed with this popup. Press on the text buttons to get a cursor, and enter the hour. Only the hour can be entered, minutes are ignored. To set the end time to midnight, both 0 and 24 are accepted. If advance-warning times are enabled, show appointments' warning periods as gray extensions at the left end of appointment bars. If file names are enabled, the name of a file whose appointments are displayed in the week menu is displayed in or next to the file's bars in the week view. For adding other appointment files in the week menu, see the help for File list in the File pulldown. Normally, entries without time ("-" in the time column in the entry menu) are shown as a small triangle at the left edge of a week view line. If the large-bar mode is enabled, they appear as a full line. %% range_done DONE Remove the week view range popup, and redraw the week view to comply with the new range. %% range_ndays NUMBER OF DAYS The top text button allows configuring the number of days shown in the week view. Minimum is 1, maximum is 28, and the default is 7. %% range_defwarn DEFAULT WARNINGS Enter the default early and late warning times. For example, entering "5,15" sets the default warning times to 5 and 15 minutes. When a new appointment is created, this will become its default warning times. Clear this field to disable default warnings. %% range_min BEGIN HOUR This is the hour the week view chart begins with, that is shown at the left edge. Appointments that begin earlier will be clipped. Press on the inset button and enter a number in the range 0..23 to change the begin time. The week view will be updated when the Done button is pressed. %% range_max END HOUR This is the hour the week view chart ends with, that is shown at the right edge. Appointments that end later will be clipped. Press on the inset button and enter a number in the range 1..24 to change the begin time (0 is accepted as a synonym for 24). The end time must be greater than the begin time in the row above. The week view will be updated when the Done button is pressed. %% range_warn SHOW WARNINGS If advance-warning times are enabled, show appointments' warning periods as gray extensions at the left end of appointment bars. %% range_user SHOW USERS If file names are enabled, the name of the file whose appointments are displayed in the week menu is displayed in or next to the file's bars in the week view. For adding other appointments files in the week menu, see the help for File list in the File pulldown. # # goto popup # %% goto GOTO DATE Enter a date to switch all visible calendar views (yov, month, year) such that they contain today's date. A full date must be entered; the month day is relevant for the yov view. To switch the views to contain today, enter "today", or use the "goto today" choice in the View pulldown. To switch n days forward or back, enter "+n" or "-n". Press Return to switch. The Cancel button removes the popup without switching. # # keyword search popup # %% key KEYWORD SEARCH The keyword search install an appointment list menu that contains all the appointments that contain a specified string or regular expression. The note, message, and script of each appointment is searched. The search can use one of three methods: 1. Search for an exact match. 2. Ignore case differences. 3. Search for a regular expression (if supported, the program can be compiled without this option). %% key_literal LITERAL SEARCH Search for an exact match. No magic characters are recognized. %% key_uncase CASE_INSENSITIVE SEARCH Search for an exact match, but ignore case differences. No magic characters are recognized. %% key_regular REGULAR EXPRESSION SEARCH Search for a regular expression. Magic characters are evaluated. %% key_string SEARCH STRING The string or regular expression to search for. %% key_search SEARCH Start the search. %% key_cancel CANCEL Cancel the search and remove the popup. # # appointment list menu # %% day APPOINTMENT LIST An appointment list is created by pressing on a day box in the month or year calendar menus, or with the Search pulldown in the main window. Appointments are shown sorted by time, earliest first, with at least one blank row at the bottom. The blank row is used for adding new appointments. The first three wide columns are for entering date, time, and length of the appointment numerically. The narrow columns that follow install menus that specify additional information; and the wide last column contains a note that is displayed in the month and year calendars' day boxes. The small button to the left of each row, if turned off, suspends that appointment. It will remain in the database, will be printed grayed-out in the month calendar's day boxes, and will not trigger any alarms or warnings. For help on the individual columns, use Help "On Context". The buttons control automatic repetition, messages, and shell scripts. Also see the help message for Confirm. Note that a single '-' in the time column will remove the time in the month view's day box. This and more options are available in the exception popup, called by the button with the triangular sign. Use Help On Context on the respective columns for details. Also note that although 16 colors (dark and light versions of 8 hues) are available for groups, the group buttons (rightmost column) always use dark colors even if a light one was chosen in the File list menu. %% day_enable ACTIVATE/SUSPEND BUTTONS If turned on (green), the appointment is alive and will trigger alarms as specified in the Alarm Options menu that can be accessed through the Config pulldown. (In SGI desktop mode, a checkmark is shown instead of a green box). If the button is turned off (gray), the appointment is suspended. It will remain in the database, will be printed grayed-out in the month calendar's day boxes and in the yov view chart, and will not trigger alarms. The small black dots in the year calendar day boxes are not affected. %% day_user GROUP COLUMN If this button is blank, you own the appointment; it is stored either in ~/.dayplan or ~/.dayplan.priv (depending on the padlock). The appointment can be put into another file by pressing this button and selecting a file name from the popup. The list of files can be specified using the File list entry in the File pulldown in the main window. Users whose appointment file is not writable are not listed. If an appointment is moved to another file, it is recommended that the "Own only" mode at the bottom of the window is turned off, or the moved appointment will disappear from the list. Note that although 16 colors (dark and light versions of 8 hues) are available for groups, the group buttons always use dark colors even if a light one was chosen in the File list menu. This has technical reasons: plan tries to conserve color map entries by using dithering, which can't be done in a pushbutton. %% day_date DATE COLUMN The trigger date. Dates can be entered as yovday Mon..Sun (or German Mo..So), as numeric date (mm/dd/yy or dd.mm.yy, depending on the Config pulldown), as commands such as "tomorrow" or "heute". Alternatively, +3 means today plus 3 days. Normally, appointments are added by starting with the time and using the date defaults supplied automatically. If a date is changed, the end date changes by the same amount. In other words, multi-day appointments do not change length when they are moved. The up/down arrows move the appointment by one day, or by one week if the Shift key is held down. %% day_enddate END DATE COLUMN Appointments can repeat for several days until (and including) the date specified with this field. This is useful for extended events such as vacations. In the year overview (see View pulldown), multi-day appointments are displayed as bars that extend over multiple days. The format of the last day field is the same as for the date field above: dates can be entered as yovday Mon..Sun (or German Mo..So), as numeric date (mm/dd/yy or dd.mm.yy, depending on the Config pulldown), as commands such as "tomorrow" or "heute". Alternatively, +3 means today plus 3 days. If the field is left empty, the appointment does not repeat daily. Using this field is equivalent to using the Repeat popup (called by the leftmost square option button below the Note field), which offers more complex repetition options, and entering "Repeat every [_1_] days" "Until (last day) [___]". The end date column is provided in the main appointment menu because daily repetition is used much more frequently than other types of repetition. The up/down arrows move the end date by one day, or by one week if the Shift key is held down. %% day_time TIME COLUMN The trigger time, as hh:mm or hh:mm{a,p}, depending on the settings in the Config pulldown. The time can also be entered as hhmm. If a single minus "-" is entered, the alarm and its warnings will not trigger, and no time will be shown in the month calendar's day boxes. This is useful for birthdays and general reminders. In conjunction with repetition, it can also be used for vacations or other extended events. Holidays should be defined with the Holiday pulldown, the syntax there is much more flexible. Appointments with no time will always appear first in the day boxes, and will not be affected by the "Don't show today's past" option. In yov views, they appear as triangles pointing right at the left edge. The up/down arrows move the appointment by five minutes, or by one hour if the Shift key is held down. %% day_length LENGTH COLUMN The length of the appointment. This information is used for the yov view, it controls the length of the bar that represents the appointment. There is no collision checking, appointments can freely overlap with no warning. If the length begins with a minus '-', the remaining string is interpreted as an end time. "-12:30" means until 12:30. The Length column is disabled if there is no time (i.e., if the time column displays "-"). The up/down arrows change the length by five minutes, or by one hour if the Shift key is held down. %% day_recycle RECYCLE COLUMN This button controls automatic repetition of an appointment on certain days. If the recycle symbol is shown in the button, the appointment repeats. Repeating appointments are shown in every day box in all views they have triggered on or will trigger on, between the entered date and the Until date if entered. If the Auto Delete Past Entries in the Config pulldown is enabled, past trigger dates are not shown. Pressing the recycle button pops up the recycle menu, which allows entry of the repetition information (on certain yovdays, on certain month days, every n days, until a specified expiry date). %% day_advance ADVANCE WARNING COLUMN, MINUTES This button controls advance warnings. An appointment can have up to three trigger times: the "alarm time", which triggers at the time specified in the time column, an early warning, and a late warning. By default, only the alarm time is enabled. The syntax is [,[,-]] Early and late times are in minutes. All parts are separated by commas or blanks. The optional "-" at the end turns off the main alarm time, so only warnings will trigger, if specified. Examples are "5" (one warning 5 minutes in advance, and the main alarm), "10,45" (two warnings and the main alarm), "15,-" (one warning, no alarm). If the main alarm time is turned off, scripts specified with the "%" button will still be run; but operations specified with the Alarm Options (windows, mail, or commands) won't. Entering a '=' uses the default warning times, which are updated with every numeric entry. The actions taken when the alarm and the warnings trigger is controlled by the "Alarm Options" menu in the Config pulldown of the main month calendar window. Options include color-coded windows, mail, and Unix commands. The Advance Warning column is disabled if there is no time (i.e., if the time column displays "-"). The up/down arrows move the late warning time by five minutes. If the Shift key is held down, the early warning time is moved instead. It does not matter which one is actually earlier, except that the earlier time pops up a green dialog at warning time, and the later pops up a yellow one (unless otherwise configured with Config->Alarm). %% day_advdays ADVANCE WARNING COLUMN, DAYS This button controls advance warnings that appear several days ahead of the actual appointment. An appointment can have only one of these. The warning appears like the appointment itself in the various calendar views, usually with a gray background and/or marked with "W:" (month calendar) or "(warn)" (day calendar). The warning triggers only at the regular appointment time, not any specified number of minutes ahead, too. For repeating appointments, one warning is shown for every instance of the appointment, with one exception: if an appointment repeats daily, only one warning is shown the given number of days ahead of the first day of the appointment. Such appointments are best entered using the "end date" button below the "beg date" button. The up/down arrows move the number of days by one day. If the Shift key is held down, the number of days changes by one week. %% day_message MESSAGE COLUMN This button allows a message to be attached to the appointment. Most of the time, the last column (note) suffices, but for longer texts messages can be used. A symbol is shown in the button if a message exists; pressing the button pops up a text entry menu. When the appointment triggers, the text is shown in the window that pops up (assuming that window hasn't been disabled with the Config pulldown's Alarm Options menu). %% day_script SCRIPT COLUMN This button allows a shell script to be attached to the appointment. A symbol is shown in the button if a script exists; pressing the button pops up a text entry menu. When the alarm time triggers, the script will be executed by the daemon. Unlike attached messages, scripts will be ignored by advance-warning triggers. Pop up the help menu in the Script popup to get more information on how scripts are executed. The Script column is disabled if there is no time (i.e., if the time column displays "-"). Scripts read from files stored on a server are not executed for security reasons. %% day_except EXCEPT COLUMN This button calls up a menu that allows specification of various special modes, such as exception dates where the appointment will not trigger, and exclusion flags that make it disappear from certain menus. %% day_private LOCK COLUMN If pressed, the appointment is considered private. It is stored in a separate file ".dayplan.priv" that has no read or write permissions for other users. Specifically, locked appointments do not appear in other users' yov views even if they named you in their file lists. All appointments that are not locked will appear in other users' yov views if they ask for them. Other users that look up your appointments will not even be informed that you have locked appointments, although they may be able to determine that your .dayplan.priv file is not empty. plan uses the current umask for the permissions of the public ~/.dayplan file, and enforces rw------- permissions for the private ~/.dayplan.priv file. Make sure that your home directory has no write permissions for others, plan does not attempt to chmod it. %% day_todo TODO COLUMN This symbol indicates a todo item. Todo appointments in the future stay where they were created, but todo items in the past are automatically moved forward to today's date. This is intended for reminders that should reappear daily after their time is reached, until the todo flag is turned off again. %% day_note NOTE COLUMN This column allows entry of a short text that will appear in the month calendar's day box, and in the window that pops up at trigger times. Notes are convenient for short texts not exceeding 30 characters or so (although there is no hard limit); for longer texts, use the message button. If there is no note, then the first line of the message text is displayed in the note column and in the day box. If there is no message either, the first script line is displayed (the second if the first begins with #!). Note strings beginning with '-' and '=' are NO LONGER SUPPORTED, use the exception menu (button with triangular warning sign) to enter exclusion flags. plan will convert old notes when reading .dayplan files to the new method. %% day_confirm CONFIRM While an appointment is entered, it is not stored in the database. It is stored only when the Return key is pressed on the last column, or when the Confirm button is pressed. This prevents the new appointment from disappearing because the list is resorted, or because it does not even belong in this list. Confirm is rarely used. To enter an appointment, simply press and enter the time, length, and note. Pressing Return in the Note column has the same effect as Confirm. The Done button, and pressing anywhere in another row, implies Confirm. %% day_undo UNDO While entering an appointment, but before Confirming (or pressing Return on the Note column or editing another appointment, which also confirms), all changes can be discarded by pressing Undo. This prevents the changes from being written to the database. %% day_dup DUPLICATE To duplicate an appointment, press on any text column (date, time, length, or note), then press the dup button. The appointment, and all the information attached to it (such as message and script) are duplicated. The duplicated appointment can then be changed. %% day_del DELETE To delete an appointment, press on any text column (date, time, length, or note), then press Delete. It is not possible to undo deletions. %% day_quit DONE Destroy the appointment list menu. This has the side effect of confirming the currently entered appointment, if any; use Delete or Undo first to cancel the changes. %% day_own OWN ONLY If enabled, only your own appointments (from the ~/.dayplan and ~/.dayplan.priv files) are shown. If disabled, all appointments, including those from other files (see File->File list), are shown. %% day_pin PIN Normally, an appointment list menu is re-used whenever another day box is pressed or the Search pulldown is used. If the Pin flag is turned on (is red), the menu will remain unchanged and a new appointment list is created when one is needed. Whenever the program needs an appointment list popup, it scans through all the existing menus in the order they were created, and kidnaps the first that has either been popped down (with its Done button), or that is not pinned. # # week view menu # %% week WEEK CALENDAR The week view shows appointments on a hour vs. day chart. Appointments are represented by horizontal bars, labeled by their note string which is centered in the bar if it fits, or shown to the right of the bar if not. The bar itself can optionally show the advance-warning periods as gray shadows; this is controlled by the Show Warnings item in the Config pulldown. The width of the chart (the begin and end hour) can be specified by choosing Week View Range from the Config pulldown. Suspended appointments, and advance warnings that appear several days ahead of the actual appointment,are shown in the same gray color that is used for advance warnings. If the Show Users toggle in the Configure week view popup in the Config pulldown is on, the file name is also shown in parentheses. A bar is color-coded: blue bars are the user's own appointments. Other files can also be shown with different colors; appointments from files should appear can be specified by choosing File list from the File pulldown. Other users' private appointments are not shown; appointments are private if the user pressed the Lock button in the appointment entry/edit menu in the entry's row. (To get the entry/edit menu, press in any day box in the month or year menus, or press the Edit button in the week menu. The lock button's icon is a little padlock.) The mouse cursor changes as it is moved the calendar: - over a date at the left edge, hand cursor: * Zoom up to a day calendar for that day - in an appointment, four-sided arrow or pencil or right-bar arrow: * Press and release the left mouse button to edit the appointment. This will call a list popup that can be used to add, change, and delete appointments. - in an appointment, four-sided arrow or pencil: * Press and hold down the left mouse button and move the mouse to move the appointment to a different date or time. Note that if the appointment is set to repeat on certain weekdays or days of the month, moving the appointment changes the first trigger date but the weekday or month day setting does not change, which means that the calender may seem unchanged after moving. - in an appointment, right-bar arrow: * Press and hold down the left mouse button and move the mouse to move the length of the appointment to a different time. - in blank space, pencil: * Press and release the left mouse button to enter a new appointment on the day under the cursor %% week_prev PREVIOUS WEEK Skip seven days back, and re-display. To go back to the current week, choose Goto today from the View pulldown. %% week_next NEXT WEEK Skip seven days forward, and re-display. To go back to the current week, choose Goto today from the View pulldown. %% week_sync SYNC DISPLAY Once the week view is drawn, plan does not check whether appointments stored in files have changed. Pressing Sync re-reads all public appointment files. It is not necessary to use Sync to read appointments read from a server, because servers broadcast changes. Chose File->File list to see which files are not read from servers. If all files are read from servers, the Sync button is grayed out. %% week_edit EDIT APPOINTMENTS Install a standard appointment entry/edit popup that contains all entries that belong to the file visible in the week chart. For editing individual appointments, double-click that appointment's bar. %% week_done DONE Remove the week view menu. # # day view menu # %% day DAY CALENDAR VIEW The week view shows appointments on a hour vs. day chart, similar to the week view but with time being the vertical axis. Appointments are represented by vertical bars, labeled with time, end time, file name if applicable, and note string. Advance warnings that appear several days ahead of the actual appointment are listed with "(warn)" inserted after the time range, and the appointment background color is gray. If the text is wider than the bar, it is word-wrapped until vertical space in the bar runs out. To conserve space, words are split in the middle if word wrapping would leave too much blank space. The bar can optionally show the advance-warning periods as gray shadows; this is controlled by the Show Warnings item in the Calendar Views choice of the Config pulldown. The width of the chart (the begin and end hour) can be specified by choosing Week View Range from the same dialog. These and other configurations are shared with the week view. Suspended appointments are shown in the same gray color that is used for advance warnings. A bar is color-coded: blue bars are the user's own appointments. Other files can also be shown with different colors; appointments from files should appear can be specified by choosing File list from the File pulldown. Other users' private appointments are not shown; appointments are private if the user pressed the Lock button in the appointment entry/edit menu in the entry's row. (To get the entry/edit menu, press in any day box in the month or year menus, or press the Edit button in the week menu. The lock button's icon is a little padlock.) The mouse cursor changes as it is moved the calendar: - in an appointment, four-sided arrow or pencil or right-bar arrow: * Press and release the left mouse button to edit the appointment. This will call a list popup that can be used to add, change, and delete appointments. - in an appointment, four-sided arrow or pencil: * Press and hold down the left mouse button and move the mouse to move the appointment to a different date or time. Note that if the appointment is set to repeat on certain weekdays or days of the month, moving the appointment changes the first trigger date but the weekday or month day setting does not change, which means that the calender may seem unchanged after moving. - in an appointment, down-bar arrow: * Press and hold down the left mouse button and move the mouse to move the length of the appointment to a different time. - in blank space, pencil: * Press and release the left mouse button to enter a new appointment on the day under the cursor %% week_prev %% day_prev PREVIOUS WEEK Skip one day back, and re-display. To go back to the current day, choose Goto today from the View pulldown. %% day_next NEXT WEEK Skip one day forward, and re-display. To go back to the current day, choose Goto today from the View pulldown. %% day_sync SYNC DISPLAY Once the day view is drawn, plan does not check whether appointments stored in files have changed. Pressing Sync re-reads all public appointment files. It is not necessary to use Sync to read appointments read from a server, because servers broadcast changes. Chose File->File list to see which files are not read from servers. If all files are read from servers, the Sync button is grayed out. %% day_edit EDIT APPOINTMENTS Install a standard appointment entry/edit popup that contains all entries that belong to the file visible in the day chart. For editing individual appointments, double-click that appointment's bar. %% day_done DONE Remove the day view menu. # # year overview menu # %% yov YEAR OVERVIEW The year overview shows appointments on a 365-day chart. This is intended for multi-day appointments such as vacations. By default, only multi-day appointments are shown, defined as those that have a "repeat every [1] days" and "repeat until [...]" set in the repetition menu (reachable from the small circular recycle icon in the appointment entry menu - press any day box in the month view to install it). Appointments are represented by horizontal bars, labeled by their note string which is centered in the bar if it fits, or shown to the right of the bar if not. Suspended appointments, and advance warnings that appear several days ahead of the actual appointment, are shown in a gray color. Bars always cover entire days. A bar is color-coded: blue bars are the user's own appointments. Other files can also be shown with different colors; appointments from files should appear can be specified by choosing File list from the File pulldown. Other users' private appointments are not shown; appointments are private if the user pressed the Lock button in the appointment entry/edit menu in the entry's row. (To get the entry/edit menu, press in any day box in the month or year menus, or press the Edit button in the year overview menu. The lock button's icon is a little padlock.) Pressing on any bar gives the appointment time, the file name in parentheses unless it is one of the user's own appointments, and the note text. Double-clicking a bar pops up an appointment edit menu that contains one entry (but can also be used to input new appointments). The mouse cursor changes as it is moved the calendar: - in an appointment, four-sided arrow or pencil or right-bar arrow: * Press and release the left mouse button to edit the appointment. This will call a list popup that can be used to add, change, and delete appointments. - in an appointment, four-sided arrow or pencil: * Press and hold down the left mouse button and move the mouse to move the appointment to a different date. Note that if the appointment is set to repeat on certain weekdays or days of the month, moving the appointment changes the first trigger date but the weekday or month day setting does not change, which means that the calender may seem unchanged after moving. - in an appointment, right-bar arrow: * Press and hold down the left mouse button and move the mouse to move the end date of the appointment to a different date. This creates a multi-day appointment. - in blank space, pencil: * Press and release the left mouse button to enter a new appointment on the day under the cursor %% yov_prev PREVIOUS YEAR Skip one year back, and re-display. To go back to the current year overview, choose Week from the View pulldown. %% yov_next NEXT YEAR Skip one year forward, and re-display. To go back to the current year overview, choose Week from the View pulldown. %% yov_zoom ZOOM SLIDER The zoom slider allows you to rescale the bar horizontally. If moved all the way to the right, days are widest; all the way to the right the entire year fits into the window. Vertical lines and day numbers disappear when they move too close together. A thick line is drawn for the beginning of the week, which is hardcoded to be Monday regardless of the "week begins with" mode in Config->calendars. %% yov_sync SYNC DISPLAY Once the overview is drawn, plan does not check whether appointments stored in files have changed. Pressing Sync re-reads all public appointment files. It is not necessary to use Sync to read appointments read from a server, because servers broadcast changes. Chose File->File list to see which files are not read from servers. If all files are read from servers, the Sync button is grayed out. %% yov_edit EDIT APPOINTMENTS Install a standard appointment entry/edit popup that contains all entries that belong to the file visible in the year overview chart. For editing individual appointments, double-click that appointment's bar. %% yov_disp DISPLAY MODE These buttons select which appointments are shown in the year overview. You can either choose the default (as specified in the corresponding column in the Config->Group/file dialog), or all files, or your own only, or a specific group. The "Other" button lets you choose which specific group. Groups are files or users specified with the File->File list popup. A common example is to create a new group file named "vacation" that contains all vacations, and check its "YrOv" check button to make it appear when the year overview is brought up in "Display: <> Default" mode. %% yov_single SINGLE-DAY APPOINTMENTS If this mode is checked, the year overview also shows all single-day appointments. These are appointments that do not repeat or repeat with a period of more than one day. Appointments that repeat daily but whose repeat-until date is on the first day do not aount as "single-day". %% yov_done DONE Remove the year overview menu. # # user popup # %% user FILE LIST The file list allows selection of files that should appear in the various views. Any number of files can be entered. To distinguish files, they can be color-coded. Eight colors are available; several files can share the same color. The first row of the file list specifies the default file for the user and cannot be deleted; all others are extra files (either default files of other users or other lists of appointment, such as vacation or room-reservation lists). If a file is recognized as an xmbase-grok database form, it is read and converted to an appointment list according to the conversion instructions specified in the database. See Help->Database access for details. To specify another file, press on the top empty button in the Name column, and enter a name. Names should contains only decimal digits, letters a-z and A-Z, and underscores. plan first checks whether the name is the name of a user on the system and suggests that user's home directory as default path. It also chooses a likely netplan server host, and decides whether to default to file or server mode. These choices can be changed by pressing on the corresponding column to the right of the name. Names must be unique. If a non-unique name is found during startup, 'x' is appended; in the file list popup duplicate names are rejected. The small buttons on the left enable or disable files in the month view, week view, and year overview, respectively; disabled files do not appear in the view. The color buttons cycle through the eight available colors every time the color button is pressed. Files can either be specified by path or by netplan server host: - If the "Server" mode button is off, the file is read directly from the given path. If the path is a directory, plan appends ".dayplan"; this is useful for reading other users' default files in their home directories. Files read directly SHOULD NOT be shared because if there are multiple plan's running that write to the same file, every change can get lost when another plan also makes a change. This is similar to editing a text file simultaneously with two text editors. Also, plan does not notice when somebody else changes a direct file; it does not automatically update its views. - If the "Server" mode button is on, the file is read from the netplan IP daemon running on the specified server host. It is recommended that only one netplan host exists. Make sure the "netplan" program is running on that host. Files read from a server can be shared. The server broadcasts all changes to appointments to all connected plan's, which will update their views automatically. Servers also allow plan to detect when two plan users simultaneously attempt to edit the same appointment, and tell one of the two to wait until the first edit is finished. Scripts attached to appointments in files read from a server are not executed for security reasons. Keep your scripts in non-server files. WARNING - avoid toggling back and forth between Server and non-Server mode because you may end up with a local file and a server file that do not agree with each other. Entries can be deleted by pressing on the row to be deleted, and then pressing the Delete button. The Sort button sorts first by color and then by file name. If the "Show group color" mode in the "Config->Calendar views" dialog is enabled, the note text that appears in the day boxes in the month view has the background color chosen in the "Group" column in this menu for this user. Press the right mouse button for a color popup. The netplan server supports primitive access control to restrict read and/or write access to certain users, groups, and/or client hosts. Refer to the netplan(4) manpage for details. %% user_delete DELETE FILE To delete a file, first press on any button in the file's row, then press the Delete button. The row disappears, and all rows below move one row up. If Delete is pressed again, the next file is deleted; it is displayed in the row of the previously deleted file. The file on disk and/or on the netplan server is not deleted, only the reference disappears and your plan will no longer display the name. To restore the file, you need to re-enter it. Make sure to use the same Server mode as before, or plan will not find the file or start a new one, which can lead to the original data being overwritten. %% user_sort SORT FILES Files are sorted first by color and then alphanumerically by name. %% user_done DONE Remove the file menu, re-read all files, and redraw all views. If a connection to a server specified in the last column could not be made, an error dialog is popped up and the file list dialog is not removed. If this happens, do not temporarily avoid the problem by turning off server mode with the intent to go back to server mode later; plan will start a new file and you might end up with two versions of the same data. Check the server host name and make sure there is a "netplan" program running on the server host. If there isn't, you can start one by typing "/usr/local/lib/netplan" at a shell prompt on the server host. %% user_enable ENABLE COLUMN There are three enable buttons. If depressed (the default), the left enables the appointments in the file in the month view, the next enables it in the week view, and the third enables it in "Default" year overviews. The fourth button specifies whether appointments in the file trigger alarms for you (pops up warning windows etc.). %% user_color GROUP COLUMN This button selects the color that will be used for the appointments in the file for bars in the week view, and the background color under the appointments in the month view. There are eight colors available. Multiple files can have the same color; these files will be grouped by the Sort button. To find out which file owns a bar in the week view or year overview, press on the bar; the name will be shown in parentheses. You cannot change the color of your own appointments (which are stored in the file specified in the top row). %% user_name NAME COLUMN The file names. To add a new file, press an empty name button and enter the new file name, and press Return. To add the appointments of another user, enter that user's login name as file name. Plan will then look up the user in /etc/passwd or in the NIS database (Yellow Pages), and determine the home directory. For non-user file names, a default file path is chosen. The login name must be entered exactly, which usually means one to eight lower-case letters. Do not enter the gecos (real) name. %% user_home SERVER/PATH COLUMNS Files can either be specified by path or by netplan server host: - If the "Server" mode button is off, the file is read directly from the given path. If the path is a directory, plan appends ".dayplan"; this is useful for reading other users' default files in their home directories. Files read directly SHOULD NOT be shared because if there are multiple plan's running that write to the same file, every change can get lost when another plan also makes a change. This is similar to editing a text file simultaneously with two text editors. Also, plan does not notice when somebody else changes a direct file; it does not automatically update its views. - If the "Server" mode button is on, the file is read from the netplan IP daemon running on the specified server host. It is recommended that only one netplan host exists. Make sure the "netplan" program is running on that host. Files read from a server can be shared. The server broadcasts all changes to appointments to all connected plan's, which will update their views automatically. Servers also allow plan to detect when two plan users simultaneously attempt to edit the same appointment, and tell one of the two to wait until the first edit is finished. WARNING - avoid toggling back and forth between Server and non-Server mode because you may end up with a local file and a server file that do not agree with each other. # # server browser # %% serv BROWSE SERVER This dialog lists all files available on the netplan server on a host, and select files from this list to be appended to your file list. To obtain a list, enter the name of a host where a netplan server runs in the pink text field near the top. The name of the local machine can be specified as "localhost". After pressing Return, the list of files on that host is displayed in the list below. Files can be added to your file list by double-clicking or by dragging with the left mouse button, or shift-left-clicking to specify ranges, or ctrl-left-clicking to toggle individual items and then pressing the Add button. (Double-clicking is a shortcut for a left-click followed by Add.) When finished, press Done to remove the dialog. # # recycle popup # %% cyc RECYCLE MENU Repeating appointments trigger more than once. The time does not change, the appointment triggers at the same time on every such date. It can not trigger on any day more than once. The appointment will repeat on any of the dates that satisfy at least one of the three conditions: on the specified weekdays, on the specified days of the month, and every n days after the initial date. The appointment will expire on the day specified with "Stop repeating on" if the mode button is green. The appointment may trigger for the last time on the date specified, if the other conditions are satisfied. %% cyc_done DONE Remove the recycle popup. %% cyc_last LAST DAY The appointment will trigger on this date for the last time (if the other conditions are satisfied). It will then expire, and will be deleted if the Auto-delete-past-entries in the Config menu has been turned on. The notation "+n" means that the appointment will repeat on the next n days; "+1" means today and tomorrow. The last-day is in effect only if the green mode button on the left is turned on (is green). %% cyc_every EVERY N DAYS If the button on the left is on (green), the appointment will trigger every n days after the initial date. For example, if a 2 is entered, the appointment will repeat every other day. %% cyc_weekdays WEEKDAYS The appointment will trigger on all the weekday specified. Weekdays can be restricted to certain weeks of the month. %% cyc_days MONTH DAYS The appointment will trigger on every day of the month specified. %% cyc_yearly YEARLY If turned on, the appointment will trigger on the same day every year. %% msg MESSAGES AND SCRIPTS This menu is used for appointment messages and scripts. A message is a text that is printed in a window when the alarm or one of its warnings triggers, unless disabled. Scripts are executed by the daemon when the alarm time (not the warnings) trigger. The daemon forks and execs the script directly. The environment is passed on unchanged. The umask is set to 077. If the script is longer than the Unix pipe size (normally 10240 bytes), the daemon forks off a separate process to feed the script, to avoid blocking the daemon. Scripts are run even if the text alarm was turned off with the advance-warning column. %% msg_done DONE Remove the message popup. %% msg_delete DELETE Deletes the message or script, and removes the popup. The message or script symbol in the appointment list row disappears. %% msg_clear CLEAR The text in the popup is cleared. %% msg_text TEXT WINDOW Messages and scripts are entered here. To clear the text and start over, press the Clear button. %% except EXCEPTIONS The exception dates at the top of this menu specify dates on which the appointment will not trigger (neither scripts nor alarms). Dates are specified in one of the text entry boxes in the usual formats: e.g., 24.12., 12/24, tomorrow, +14, mon. The Clear buttons delete an exception date. The Split buttons create a new fill-in appointment for the given exception date. There are flag buttons below the exception dates that specify in which calendar views (month, year, and week) the appointment should be omitted. It is often useful to omit things like lunch hour notices or cron-like jobs that would otherwise clutter up the calendars. These buttons replace the old notation in version 1.3.2 that omitted appointments whose note string begins with '-' or '='. The Reminder flag button, if enabled, turns off the time of the appointment. Neither scripts nor alarms will trigger in this mode, but the appointment stays in the calendar views (without a time display). In the month view, it looks much like a holiday string. This is equivalent to entering '-' in the time column in the entry menu. The appointment text color changes the color of the appointment text in the month view's day boxes. The default is pale blue; there are eight more. Some of them have very low contrast. All the choices here become effective and appear in the calendars when both the exception menu and the appointment entry menu are removed by pressing Done in each menu. %% exc_clear CLEAR DATE The exception dates at the top of this menu specify dates on which the appointment will not trigger (neither scripts nor alarms). Dates are specified in one of the text entry boxes in the usual formats: e.g., 24.12., 12/24, tomorrow, +14, mon. The Clear buttons delete an exception date (but leave fill-in appointments that were created with the Split button intact). %% exc_split SPLIT APPOINTMENT This function creates a new appointment that is identical to the one for which the exception date to the right was entered, except for its date (which matches the exception date) and its repetition information (which is cleared). The resulting appointment "fills in" the hole left by the exception date. The new appointment is shown at the end of the list menu and can now be edited. For example, if a repeating appointment occurs every Monday at 10:00 except on January 2nd, where it is at 11:00, enter January 2nd as exception date, press split, and change the last time in the list from 10:00 to 11:00. Multiple exceptions require multiple fill-in appointments. Without a fill-in appointment created by Split, the appointment is simply ignored on the exception date. If an exception date is first split and then cleared, the split appointment is not deleted. Conversely, exception dates can be split off multiple times. %% exc_flags FLAGS There are flag buttons below the exception dates that specify in which calendar views (month, year, and week) the appointment should be omitted. It is often useful to omit things like lunch hour notices or cron-like jobs that would otherwise clutter up the calendars. These buttons replace the old notation in version 1.3.2 that omitted appointments whose note string begins with '-' or '='. The Reminder flag button, if enabled, turns off the time of the appointment. Neither scripts nor alarms will trigger in this mode, but the appointment stays in the calendar views (without a time display). In the month view, it looks much like a holiday string. This is equivalent to entering '-' in the time column in the entry menu. %% exc_acolor APPOINTMENT COLOR The appointment text color changes the color of the appointment text in the month view's day boxes. The default is pale blue; there are eight more. Some of them have very low contrast. %% exc_done DONE Remove the exception popup menu. The changes are displayed in the calendar views when the Done button in the appointment entry menu is also pressed. %% holiday_done DONE Write the definitions back to the ~/.holiday file and re-parse it. %% holiday_cancel CANCEL Discard all changes to the holiday list made since the holiday menu was popped up, go back to the previous holiday list, and remove the holiday popup. Use this button if you messed up. %% holiday HOLIDAYS Holidays are annotations of certain day boxes in the month and year calendars. A holiday can define a text that can appear under the day number (default) or next to the day number (small, because there is less space for text there). Both the color of holiday name and the day number can be set. For each day, only one holiday plus one "small" holiday can be defined. Earlier definitions override later ones. You don't need to define a holiday if you want an entry with no time field; just define a normal appointment with "-" in the time column. There is no limit on the number of those. In addition to the user's holiday list, there may be a system-wide holiday file in the LIB directory (LIB is from the Makefile, usually /usr/local/bin). System-wide holidays cannot be edited from within plan. User holidays override system-wide holidays on the same day. The holiday format is: (optional parts are in [square brackets], nonterminals are in CAPS, alternatives are separated by |, everything must be entered in lower case) [small] [STRINGCOLOR] "name" [DAYNUMBERCOLOR] on [DATE] [OFFSET] [LENGTH] (Although shown here on two lines, every holiday definition must be entered on a single line.) Available colors are black, red, green, yellow, blue, magenta, cyan, white, and weekend (the same color used for Saturday and Sunday). The string color is used for the name when printed into a day box; the day number color is used to alter the color of the day number (1..31) of the day box the holiday falls on. This can be used to promote a day to an official holiday by using the "weekend" color. If there is a day number color specified, but no string color, the string color is set to the day number color. The name can be empty, but the quotes must be present. There are several formats for DATE: DAY . MONTH [ . YEAR] MONTH / DAY [ / YEAR] DAY MONTHNAME [YEAR] MONTHNAME DAY [YEAR] [every NTH] WEEKDAY [in MONTH] WEEKDAY before LIT_DATE WEEKDAY after LIT_DATE easter pascha DAY, MONTH, YEAR, NTH, and NUMBER can be C expressions; in dates, they must be parenthesized. The special values any and last are also available. Any valid DATE description specifying a single day may be converted to a NUMBER by enclosing it in square brackets []. MONTHNAME is january, february, etc; WEEKDAY is monday, tuesday, etc. NTH can alternatively be first, second, ..., fifth, last. The words on, every, day, and days are syntactic sugar without meaning. Easter is predefined because its definition is rather complicated. LIT_DATE stands for one of the first two alternatives, DAY.MONTH[.YEAR] or MONTH/DAY[/YEAR]. Pascha is the Christian Orthodox Easter. The OFFSET after DATE is "[plus | minus NUMBER days", and the LENGTH after that is "length NUMBER days". Offsets are useful for holidays relative to Easter, and lengths are useful for trade shows and vacations. Always define vacations last in the list so regular holidays override them. Dates can be converted to numbers by enclosing them in square brackets. For example, the number of days between Easter and May 1 can be computed with ([may 1] - [easter]). As with C expressions, bracketed expressions must be parenthesized. If you have /lib/cpp (see CPP_PATH in the Makefile), you can use #include statements to include additional external holiday files. The external files cannot be edited interactively with plan; use an editor. Examples: small "Easter" weekend on easter small "Surprise" blue on last sunday in april plus 1 day small green "xmas" weekend on 12/25 "" weekend on july 4 magenta "Payday" on any/last green "Vacation" on 20.6.93 length 28 days #include "/usr/local/lib/vacations" Restrictions: plus, minus, and length may not cross over to the next or previous year, you cannot define New Year's as "last/last plus 1 day". %% print PRINT The print mode determines whether a day, year, month, week calendar, or year overview is printed. These are the calendar views accessible as windows through the View pulldown in the main menu. Week views can be printed in landscape (sideways) or Portrait mode; landscape uses larger print but has less space for long or very crowded calendars. Printing always prints the time period last displayed in the respective view window; to select it pop up the window from the View pulldown. The "omission" flags, if turned on, remove all appointments or the private appointments (those with a padlock in the appointment entry menu) from the printed calendar. The color flag generates color PostScript. The spooler string is a shell command line that accepts the PostScript calendar and prints it on a printer. Typical values are "lp" (on SGI and other System V derived systems) or "lpr" (on BSD derived systems). Redirection is also possible; use "cat > /tmp/file" to redirect the PostScript output to a file. If printing of month and year calendars fails, make sure that the "plan_cal.ps" PostScript skeleton file exists (see Troubleshooting). Some systems require backquoting command strings with shell metacharacters, as in `pr | lpr`. Press Print to start printing, or Cancel to remove the popup without printing. %% print_print PRINT Print the calendar specified by the mode select buttons, using the shell command string specified in the spooler text area. %% print_cancel CANCEL Remove the print popup without printing anything. The spooler string, if changed, remains changed. %% grok DATABASE ACCESS plan can read databases created with the xmbase-grok program, available on all servers where plan is available. The primary ftp servers are ftp.fu-berlin.de and ftp.x.org. Information on both plan and grok is available on http://www.bitrot.de . xmbase-grok is a configurable desktop database with a built-in user interface editor for database form creation. It stores data in "cards", like a rolodex. Each card contains a number of "fields" that contain data. A todo list may have fields for start date, end date, descriptive text, and so on. Version 1.4 and up of xmbase-grok let the form author specify an optional meaning of each field for plan. The start date field in the todo list form may become plan's date, and the descriptive text may become plan's note or message. Fields not tagged in this way are ignored by plan. As a minimum one field must be tagged as plan's date. To make an xmbase-grok database accessible for plan, two steps are required: 1. in the xmbase-grok program, use the Database pulldown to choose a database to be made accessible. Then start the form editor from the File pulldown. On the small canvas window, choose a field that should be read by plan, and use the radio buttons for "Calendar interface" in the main form to specify how plan should interpret the field data. Repeat for other fields. Exactly one field must be tagged this way as "Date+Time". Each tag can be used at most once; it is not possible to have two fields with the same plan tag. 2. in the plan program, call the file list from the File pulldown. Specify the database file name with a .gf extension. For the todo database, a typical file name is ~/.grok/todo.gf . plan ignores all database cards that do not evaluate to a valid date, and pops up a warning window if cards cannot be interpreted. If a card specifies an end date but not a daily repeat, the daily repeat is assumed to be 1 (every day, 7 would be weekly etc.) If the Date+Time field only has a date and no time, the no-time flag is automatically set (a minus appears in the time column). Date+Time fields that specify only a time or duration and no date are ignored, this is an error. See the online help for xmbase-grok's form editor for Date+Time formats. The default for no-alarm is false. If plan cannot find a Date+Time field or a note field, it will attempt tO pick default fields for date and note. This allows plan to read untagged databases, but the result is not always what one would expect. In this version of plan and xmbase-grok, it is not possible to specify defaults or grok expressions for interpretations, to combine multiple fields into one plan message, to modify and write back database files in plan, and to read databases from a netplan IP server. All of this is useful but not currently at the top of my todo list.