<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd"> <HTML> <HEAD> <TITLE>Wyrd v1.4 User Manual </TITLE> <META http-equiv="Content-Type" content="text/html; charset=US-ASCII"> <META name="GENERATOR" content="hevea 1.10"> <STYLE type="text/css"> .li-itemize{margin:1ex 0ex;} .li-enumerate{margin:1ex 0ex;} .dd-description{margin:0ex 0ex 1ex 4ex;} .dt-description{margin:0ex;} .toc{list-style:none;} .thefootnotes{text-align:left;margin:0ex;} .dt-thefootnotes{margin:0em;} .dd-thefootnotes{margin:0em 0em 0em 2em;} .footnoterule{margin:1em auto 1em 0px;width:50%;} .caption{padding-left:2ex; padding-right:2ex; margin-left:auto; margin-right:auto} .title{margin:2ex auto;text-align:center} .center{text-align:center;margin-left:auto;margin-right:auto;} .flushleft{text-align:left;margin-left:0ex;margin-right:auto;} .flushright{text-align:right;margin-left:auto;margin-right:0ex;} DIV TABLE{margin-left:inherit;margin-right:inherit;} PRE{text-align:left;margin-left:0ex;margin-right:auto;} BLOCKQUOTE{margin-left:4ex;margin-right:4ex;text-align:left;} TD P{margin:0px;} .boxed{border:1px solid black} .textboxed{border:1px solid black} .vbar{border:none;width:2px;background-color:black;} .hbar{border:none;height:2px;width:100%;background-color:black;} .hfill{border:none;height:1px;width:200%;background-color:black;} .vdisplay{border-collapse:separate;border-spacing:2px;width:auto; empty-cells:show; border:2px solid red;} .vdcell{white-space:nowrap;padding:0px;width:auto; border:2px solid green;} .display{border-collapse:separate;border-spacing:2px;width:auto; border:none;} .dcell{white-space:nowrap;padding:0px;width:auto; border:none;} .dcenter{margin:0ex auto;} .vdcenter{border:solid #FF8000 2px; margin:0ex auto;} .minipage{text-align:left; margin-left:0em; margin-right:auto;} .marginpar{border:solid thin black; width:20%; text-align:left;} .marginparleft{float:left; margin-left:0ex; margin-right:1ex;} .marginparright{float:right; margin-left:1ex; margin-right:0ex;} .theorem{text-align:left;margin:1ex auto 1ex 0ex;} .part{margin:2ex auto;text-align:center} </STYLE> </HEAD> <BODY > <!--HEVEA command line is: /usr/bin/hevea -fix manual.tex --> <!--CUT DEF section 1 --><TABLE CLASS="title"><TR><TD><H1 CLASS="titlemain">Wyrd v1.4 User Manual</H1><H3 CLASS="titlerest">Paul J. Pelzl</H3><H3 CLASS="titlerest">October 23, 2010</H3></TD></TR> </TABLE><DIV CLASS="center"> <EM>“Because you’re tired of waiting for your bloated calendar program to start up.”</EM> </DIV><!--TOC section Contents--> <H2 CLASS="section"><!--SEC ANCHOR -->Contents</H2><!--SEC END --><UL CLASS="toc"><LI CLASS="li-toc"> <A HREF="#htoc1">1  Introduction</A> </LI><LI CLASS="li-toc"><A HREF="#htoc2">2  Installation</A> </LI><LI CLASS="li-toc"><A HREF="#htoc3">3  Quick Start</A> <UL CLASS="toc"><LI CLASS="li-toc"> <A HREF="#htoc4">3.1  Overview</A> </LI><LI CLASS="li-toc"><A HREF="#htoc5">3.2  Navigation</A> </LI><LI CLASS="li-toc"><A HREF="#htoc6">3.3  Editing Reminders</A> </LI><LI CLASS="li-toc"><A HREF="#htoc7">3.4  Quick Reminders</A> </LI><LI CLASS="li-toc"><A HREF="#htoc8">3.5  Cutting and Pasting Reminders</A> </LI><LI CLASS="li-toc"><A HREF="#htoc9">3.6  Viewing Reminders</A> </LI><LI CLASS="li-toc"><A HREF="#htoc10">3.7  Searching for Reminders</A> </LI><LI CLASS="li-toc"><A HREF="#htoc11">3.8  Other Commands</A> </LI><LI CLASS="li-toc"><A HREF="#htoc12">3.9  Alarm Strategies</A> </LI><LI CLASS="li-toc"><A HREF="#htoc13">3.10  Miscellaneous</A> </LI></UL> </LI><LI CLASS="li-toc"><A HREF="#htoc14">4  Advanced Configuration</A> <UL CLASS="toc"><LI CLASS="li-toc"> <A HREF="#htoc15">4.1  <TT>wyrdrc</TT> Syntax</A> <UL CLASS="toc"><LI CLASS="li-toc"> <A HREF="#htoc16">4.1.1  Including Other Rcfiles</A> </LI><LI CLASS="li-toc"><A HREF="#htoc17">4.1.2  Setting Configuration Variables</A> </LI><LI CLASS="li-toc"><A HREF="#htoc18">4.1.3  Creating Key Bindings</A> </LI><LI CLASS="li-toc"><A HREF="#htoc19">4.1.4  Removing Key Bindings</A> </LI><LI CLASS="li-toc"><A HREF="#htoc20">4.1.5  Setting the Color Scheme</A> </LI></UL> </LI><LI CLASS="li-toc"><A HREF="#htoc21">4.2  Configuration Variables</A> </LI><LI CLASS="li-toc"><A HREF="#htoc22">4.3  Calendar Operations</A> </LI><LI CLASS="li-toc"><A HREF="#htoc23">4.4  Colorable Objects</A> </LI></UL> </LI><LI CLASS="li-toc"><A HREF="#htoc24">5  Usage Tips</A> </LI><LI CLASS="li-toc"><A HREF="#htoc25">6  Licensing</A> </LI><LI CLASS="li-toc"><A HREF="#htoc26">7  Acknowledgments</A> </LI><LI CLASS="li-toc"><A HREF="#htoc27">8  Contact info</A> </LI><LI CLASS="li-toc"><A HREF="#htoc28">9  Miscellaneous</A> </LI></UL><!--TOC section Introduction--> <H2 CLASS="section"><!--SEC ANCHOR --><A NAME="htoc1">1</A>  Introduction</H2><!--SEC END --><P> Wyrd is a text-based front-end to Remind, a sophisticated calendar and alarm program available from <a href="http://www.roaringpenguin.com/penguin/open_source_remind.php">Roaring Penguin Software, Inc.</a> Wyrd serves two purposes: </P><OL CLASS="enumerate" type=1><LI CLASS="li-enumerate"> It displays reminders in a scrollable timetable view suitable for visualizing your calendar at a glance. </LI><LI CLASS="li-enumerate">It makes creating and editing reminders fast and easy. However, Wyrd does not hide Remind’s textfile programmability, for this is what makes Remind a truly powerful calendaring system. </LI></OL><P> Wyrd also requires only a fraction of the resources of most calendar programs available today.</P><!--TOC section Installation--> <H2 CLASS="section"><!--SEC ANCHOR --><A NAME="htoc2">2</A>  Installation</H2><!--SEC END --><P> This section describes how to install Wyrd by compiling from source. Wyrd has been packaged for a number of popular Linux/Unix variants, so you may be able to save yourself some time by installing from a package provided by your OS distribution.</P><P>Wyrd is designed to be portable to most Unix-like operating systems, including GNU/Linux, *BSD, and Mac OS X. Before installing Wyrd, your system must have the following software installed: </P><UL CLASS="itemize"><LI CLASS="li-itemize"> <a href="http://caml.inria.fr/">OCaml</a> >= 3.08 </LI><LI CLASS="li-itemize"> <a href="http://www.gnu.org/software/ncurses/ncurses.html">ncurses library</a> (and development headers) </LI><LI CLASS="li-itemize"> <a href="http://www.roaringpenguin.com/penguin/open_source_remind.php">Remind</a> >= 3.1.0 </LI><LI CLASS="li-itemize"> <a href="http://www.gnu.org/software/make/">GNU make</a> </LI><LI CLASS="li-itemize">the Unix pager application, <TT>less</TT> </LI></UL><P> Wyrd may be compiled by executing the following at the root of the source tree: </P><PRE CLASS="verbatim">./configure make </PRE><P>After compiling, become root and execute </P><PRE CLASS="verbatim">make install </PRE><P>to complete the installation process. The <TT>make</TT> command here should correspond to GNU make; on some systems (particularly *BSD), you may need to use <TT>gmake</TT>.</P><P>If your ncurses library was built with wide character support, Wyrd can be configured to render UTF-8 encoded reminders. To enable this option, use the command </P><PRE CLASS="verbatim">./configure --enable-utf8 </PRE><P>when configuring the sources.</P><!--TOC section Quick Start--> <H2 CLASS="section"><!--SEC ANCHOR --><A NAME="htoc3">3</A>  Quick Start</H2><!--SEC END --><P>This section describes how to use Wyrd in its default configuration. After familiarizing yourself with the basic operations as outlined in this section, you may wish to consult Section <A HREF="#advanced">4</A> to see how Wyrd can be configured to better fit your needs.</P><!--TOC subsection Overview--> <H3 CLASS="subsection"><!--SEC ANCHOR --><A NAME="htoc4">3.1</A>  Overview</H3><!--SEC END --><P> Before attemping to use Wyrd, learn how to use Remind. Wyrd makes no attempt to hide the details of Remind programming from the user. Aside from reading the Remind manpage, you may get some useful pointers by reading <a href="http://www.43folders.com/2005/02/guest_mike_harr.html">Mike Harris's article on 43 folders</a> or <a href="http://www.linuxjournal.com/article/3529">David Skoll's writeup on Linux Journal</a>. The 43 Folders Wiki also has a <a href="http://wiki.43folders.com/index.php/Remind">nice section on Remind</a>.</P><P>You can launch Wyrd using the default reminder file by executing <TT>wyrd</TT>. If desired, a different reminder file (or reminder directory) may be selected by executing <TT>wyrd <filename></TT>. </P><P>At the top of the window is a short (incomplete) list of keybindings.</P><P>The left window displays a scrollable timetable view, with reminders highlighted in various colors. If the <TT>DURATION</TT> specifier is used for a reminder, the highlighted area is rendered with an appropriate size. Overlapping reminders are rendered using one of four different indentation levels so that all reminders are at least partially visible. If the current time is visible in this window, it is highlighted in red.</P><P>The upper right window displays a month calendar, with the color of each day representing the number of reminders it contains. The colors range across shades of white to blue to magenta as the number of reminders increases. The selected date is highlighted in cyan; if the current date is visible, it is highlighted in red.</P><P>The lower right window displays a list of the untimed reminders falling on the selected date.</P><P>The bottom window displays the full text of the <TT>MSG</TT> for the reminder or reminders that are currently selected.</P><!--TOC subsection Navigation--> <H3 CLASS="subsection"><!--SEC ANCHOR --><A NAME="htoc5">3.2</A>  Navigation</H3><!--SEC END --><DIV CLASS="center"> <TABLE BORDER=1 CELLSPACING=0 CELLPADDING=1><TR><TD ALIGN=left NOWRAP> Action</TD><TD ALIGN=left NOWRAP>Keypress</TD></TR> <TR><TD ALIGN=left NOWRAP> scroll up and down the schedule</TD><TD ALIGN=left NOWRAP><TT><up></TT>, <TT><down></TT> or <TT>k</TT>, <TT>j</TT></TD></TR> <TR><TD ALIGN=left NOWRAP> jump back or forward by a day</TD><TD ALIGN=left NOWRAP><TT><pageup></TT>, <TT><pagedown></TT> or <TT>4</TT>, <TT>6</TT> or <TT><</TT>, <TT>></TT> or <TT>H</TT>, <TT>L</TT></TD></TR> <TR><TD ALIGN=left NOWRAP> jump back or forward by a week</TD><TD ALIGN=left NOWRAP><TT>8</TT>, <TT>2</TT> or <TT>[</TT>, <TT>]</TT> or <TT>K</TT>, <TT>J</TT></TD></TR> <TR><TD ALIGN=left NOWRAP> jump back or forward by a month</TD><TD ALIGN=left NOWRAP><TT>{</TT>, <TT>}</TT></TD></TR> <TR><TD ALIGN=left NOWRAP> jump to current date and time</TD><TD ALIGN=left NOWRAP><TT><home></TT></TD></TR> <TR><TD ALIGN=left NOWRAP> jump to the next reminder</TD><TD ALIGN=left NOWRAP><TT><tab></TT></TD></TR> <TR><TD ALIGN=left NOWRAP> switch between schedule and untimed reminders window</TD><TD ALIGN=left NOWRAP><TT><left></TT>, <TT><right></TT> or <TT>h</TT>, <TT>l</TT></TD></TR> <TR><TD ALIGN=left NOWRAP> zoom in on the schedule</TD><TD ALIGN=left NOWRAP><TT>z</TT></TD></TR> <TR><TD ALIGN=left NOWRAP> scroll the description window up and down</TD><TD ALIGN=left NOWRAP><TT>d</TT>, <TT>D</TT></TD></TR> </TABLE> </DIV><P>Notice that if you have a numeric keypad, the {<TT>4, 6, 8, 2</TT>} keys will let you move directionally in the month calendar view at the upper-right of the screen. Similarly, {<TT>H, J, K, L</TT>} will cause directional calendar movement using the standard mapping from <TT>vi(1)</TT>. </P><P>In addition to the hotkeys provided above, Wyrd lets you jump immediately to a desired date by pressing <TT>’g’</TT>, entering in a date specifier, and then pressing <TT><return></TT>. Any of the following date specifiers may be used: </P><UL CLASS="itemize"><LI CLASS="li-itemize"> 8 digits representing year, month, and day: YYYYMMDD </LI><LI CLASS="li-itemize">4 digits representing month and day (of current year): MMDD </LI><LI CLASS="li-itemize">2 digits representing day (of current month and year): DD </LI></UL><P> (The date specifier format may be changed to DDMMYYYY; consult Section <A HREF="#variables">4.2</A>. )</P><!--TOC subsection Editing Reminders--> <H3 CLASS="subsection"><!--SEC ANCHOR --><A NAME="htoc6">3.3</A>  Editing Reminders</H3><!--SEC END --><P> Note: By default, Wyrd is configured to modify your reminder files using the text editor specified by the <TT>$EDITOR</TT> environment variable. (This configuration has been tested successfully with a number of common settings for <TT>$EDITOR</TT>, including <TT>’vim’</TT>, <TT>’emacs’</TT>, and <TT>’nano’</TT>.) If you wish to use a different editor, see Section <A HREF="#advanced">4</A>. </P><P>If you select a timeslot in the schedule view, then hit <TT>’t’</TT>, you will begin creating a new timed reminder. Wyrd will open up your reminder file in your favorite editor and move the cursor to the end of the file, where a new reminder template has been created. The template has the selected date and time filled in, so in many cases you will only need to fill in a <TT>MSG</TT> value.</P><P>Similarly, hitting <TT>’u’</TT> will begin creating an untimed reminder. <TT>’w’</TT> will create a weekly timed reminder, and <TT>’W’</TT> will create a weekly untimed reminder; <TT>’m’</TT> will create a monthly timed reminder, and <TT>’M’</TT> will create a monthly untimed reminder.</P><P><TT>’T’</TT> and <TT>’U’</TT> also create timed and untimed reminders (respectively), but first will provide a selection dialog for you to choose which reminder file you want to add this reminder to. The set of reminder files is determined by scanning the <TT>INCLUDE</TT> lines in your default reminder file. (If you use a reminder directory, then all <TT>*.rem</TT> files in that directory will be available along with all <TT>INCLUDE</TT>d files.)</P><P>If you select a reminder (either timed or untimed) and hit <TT><return></TT>, you will begin editing that reminder. Wyrd will open up the appropriate reminders file in your editor and move the cursor to the corresponding <TT>REM</TT> line.</P><P>If you select a timeslot that contains multiple overlapping reminders, Wyrd will provide a dialog that allows you to select the desired reminder.</P><P>If you hit <TT><enter></TT> on a blank timeslot, Wyrd will begin creating a new timed or untimed reminder (depending on whether the timed or the untimed window is selected).</P><P>Finally, pressing <TT>’e’</TT> will open the reminder file in your editor without attempting to select any particular reminder.</P><!--TOC subsection Quick Reminders--> <H3 CLASS="subsection"><!--SEC ANCHOR --><A NAME="htoc7">3.4</A>  Quick Reminders</H3><!--SEC END --><P> Wyrd offers an additional mode for entering simple reminders quickly. Press <TT>’q’</TT>, and you will be prompted for an event description. Simply enter a description for the event using natural language, then press <TT><return></TT>. Examples: </P><UL CLASS="itemize"><LI CLASS="li-itemize"> meeting with Bob tomorrow at 11 </LI><LI CLASS="li-itemize">drop off package at 3pm </LI><LI CLASS="li-itemize">wednesday 10am-11:30 go grocery shopping </LI><LI CLASS="li-itemize">Board game night 20:15 next Fri </LI><LI CLASS="li-itemize">7/4 independence day </LI><LI CLASS="li-itemize">7/4/2007 independence day (next year) </LI><LI CLASS="li-itemize">independence day (next year) on 2007-07-04 </LI></UL><P> If your event description can be understood, Wyrd will immediately create the reminder and scroll the display to its location.</P><P>Currently the quick reminder mode tends to favor USA English conventions, as generalizing the natural language parser would require some work.</P><P>Wyrd also allows you to use the "quick reminder" syntax to create new reminders from the command line, using the <TT>-a</TT> or <TT>--add</TT> options. For example, </P><PRE CLASS="verbatim">wyrd --add "dinner with neighbors tomorrow at 7pm" </PRE><P>would create a new reminder for tomorrow evening. When used in this mode, Wyrd exits silently with error code 0 if the reminder was successfully created. If the reminder could not be created (e.g. if the reminder syntax could not be parsed), Wyrd prints an error message and exits with a nonzero error code.</P><!--TOC subsection Cutting and Pasting Reminders--> <H3 CLASS="subsection"><!--SEC ANCHOR --><A NAME="htoc8">3.5</A>  Cutting and Pasting Reminders</H3><!--SEC END --><P> Reminders can be easily duplicated or rescheduled through the use of Wyrd’s cutting and pasting features.</P><P>Selecting a reminder and pressing <TT>’X’</TT> will cut that reminder: the corrdsponding <TT>REM</TT> line is deleted from your reminders file, and the reminder is copied to Wyrd’s clipboard. To copy a reminder without deleting it, use <TT>’y’</TT> instead.</P><P>To paste a reminder from the clipboard back into your schedule, just move the cursor to the desired date/time and press <TT>’p’</TT>. Wyrd will append a new <TT>REM</TT> line to the end of your reminders file, and open the file with your editor. The <TT>REM</TT> line will be configured to trigger on the selected date. If the copied reminder was timed, then the pasted reminder will be set to trigger at the selected time using the original <TT>DURATION</TT> setting. (Additional Remind settings such as <TT>delta</TT> and <TT>tdelta</TT> are not preserved by copy-and-paste.)</P><P>If you wish to paste a reminder into a non-default reminders file, use <TT>’P’</TT>. This will spawn a selection dialog where you can choose the file that will hold the new reminder.</P><P>WARNING: Cutting a reminder will delete only the single <TT>REM</TT> command responsible for triggering it. If you are using more complicated Remind scripting techniques to generate a particular reminder, then the <TT>cut</TT> operation may not do what you want.</P><!--TOC subsection Viewing Reminders--> <H3 CLASS="subsection"><!--SEC ANCHOR --><A NAME="htoc9">3.6</A>  Viewing Reminders</H3><!--SEC END --><P>Aside from viewing reminders as they fall in the schedule, you can press <TT>’r’</TT> to view all reminders triggered on the selected date in a <TT>less(1)</TT> window. Similarly, <TT>’R’</TT> will view all reminders triggered on or after the selected date (all non-expired reminders are triggered).</P><P>If you want to get a more global view of your schedule, Wyrd will also let you view Remind’s formatted calendar output in a <TT>less(1)</TT> window. Pressing <TT>’c’</TT> will view a one-week calendar that contains the selected date, while pressing <TT>’C’</TT> will view a one-month calendar containing the selected date.</P><!--TOC subsection Searching for Reminders--> <H3 CLASS="subsection"><!--SEC ANCHOR --><A NAME="htoc10">3.7</A>  Searching for Reminders</H3><!--SEC END --><P>Wyrd allows you to search for reminders with <TT>MSG</TT> values that match a search string. Press <TT>’/’</TT> to start entering a (case insensitive) regular expression. After the expression has been entered, press <TT><return></TT> and Wyrd will locate the next reminder that matches the regexp. Press <TT>’n’</TT> to repeat the same search. Entry of a search string may be cancelled with <TT><esc></TT>.</P><P>The regular expression syntax is Emacs-compatible.</P><P>Note: Sorry, there is no "search backward" function. The search function requires the use of <TT>"remind -n"</TT>, which operates only forward in time. For the same reason, there is a command to jump forward to the next reminder, but no command to jump backward to the previous reminder.</P><!--TOC subsection Other Commands--> <H3 CLASS="subsection"><!--SEC ANCHOR --><A NAME="htoc11">3.8</A>  Other Commands</H3><!--SEC END --><P>A list of all keybindings may be viewed by pressing <TT>’?’</TT>. You can exit Wyrd by pressing <TT>’Q’</TT>. If the screen is corrupted for some reason, hit <TT>’Ctrl-L’</TT> to refresh the display.</P><!--TOC subsection Alarm Strategies--> <H3 CLASS="subsection"><!--SEC ANCHOR --><A NAME="htoc12">3.9</A>  Alarm Strategies</H3><!--SEC END --><P> You may wish to generate some sort of alarm when a reminder is triggered. Wyrd does not offer any special alarm functionality, because Remind can handle the job already. Check the Remind manpage and consider how the <TT>-k</TT> option could be used to generate alarms with the aid of external programs. For example, the following command will generate a popup window using <TT>gxmessage(1)</TT> whenever a timed reminder is triggered: </P><PRE CLASS="verbatim">remind -z -k'gxmessage -title "reminder" %s &' ~/.reminders & </PRE><P>(A sensible way to start this alarm command is to place it in <TT>~.xinitrc</TT> so that it launches when the X server is started.) If you want some advance warning (say, 15 minutes), you can cause Remind to trigger early by setting a <TT>tdelta</TT> in the AT clause: </P><PRE CLASS="verbatim"> REM Nov 27 2005 AT 14:30 +15 MSG Do something </PRE><P>Alternatively, if you want to generate alarms only for specific reminders, consider using Remind’s <TT>RUN</TT> command. This process could be easily automated by using the <TT>template</TT><TT><EM>N</EM></TT> configuration variables described in Section <A HREF="#advanced">4</A>. </P><!--TOC subsection Miscellaneous--> <H3 CLASS="subsection"><!--SEC ANCHOR --><A NAME="htoc13">3.10</A>  Miscellaneous</H3><!--SEC END --><P>Remind’s <TT>TAG</TT> specifier may be used to cause Wyrd to give special treatment to certain reminders. If a reminder line includes the clause <TT>"TAG noweight"</TT>, then Wyrd will not give that reminder any weight when determining the “busy level” colorations applied to the month calendar. If a reminder line includes the clause <TT>"TAG nodisplay"</TT>, then Wyrd will neither display that reminder nor give it any weight when determining the month calendar colorations. The tag parameters are case insensitive.</P><P>WARNING: These tag parameters are not guaranteed to interact well with other Remind front-ends such as tkremind.</P><!--TOC section Advanced Configuration--> <H2 CLASS="section"><!--SEC ANCHOR --><A NAME="htoc14">4</A>  Advanced Configuration</H2><!--SEC END --><P> <A NAME="advanced"></A> Wyrd reads a run-configuration textfile (generally <TT>/etc/wyrdrc</TT> or <TT>/usr/local/etc/wyrdrc</TT>) to determine key bindings, color schemes, and many other settings. You can create a personalized configuration file in <TT>$HOME/.wyrdrc</TT>, and select settings that match your usage patterns. The recommended procedure is to “include” the <TT>wyrdrc</TT> file provided with Wyrd (see Section <A HREF="#include">4.1.1</A>), and add or remove settings as desired.</P><!--TOC subsection <TT>wyrdrc</TT> Syntax--> <H3 CLASS="subsection"><!--SEC ANCHOR --><A NAME="htoc15">4.1</A>  <TT>wyrdrc</TT> Syntax</H3><!--SEC END --><P> You may notice that the <TT>wyrdrc</TT> syntax is similar to the syntax used in the configuration file for the Mutt email client (muttrc).</P><P>Within the <TT>wyrdrc</TT> file, strings should be enclosed in double quotes (<TT>"</TT>). A double quote character inside a string may be represented by <TT>\</TT><TT>"</TT> . The backslash character must be represented by doubling it (<TT>\\</TT>). </P><!--TOC subsubsection Including Other Rcfiles--> <H4 CLASS="subsubsection"><!--SEC ANCHOR --><A NAME="htoc16">4.1.1</A>  Including Other Rcfiles</H4><!--SEC END --><P> <A NAME="include"></A> Syntax: <TT>include </TT><TT><EM>filename_string</EM></TT><BR><BR> This syntax can be used to include one run-configuration file within another. This command could be used to load the default <TT>wyrdrc</TT> file (probably found in <TT>/etc/wyrdrc</TT> or <TT>/usr/local/etc/wyrdrc</TT>) within your personalized rcfile, <TT>~/.wyrdrc</TT>. The filename string should be enclosed in quotes.</P><!--TOC subsubsection Setting Configuration Variables--> <H4 CLASS="subsubsection"><!--SEC ANCHOR --><A NAME="htoc17">4.1.2</A>  Setting Configuration Variables</H4><!--SEC END --><P> <A NAME="setvar"></A> Syntax: <TT>set </TT><TT><EM>variable</EM></TT><TT>=</TT><TT><EM>value_string</EM></TT><BR><BR> A number of configuration variables can be set using this syntax; check Section <A HREF="#variables">4.2</A> to see a list. The variables are unquoted, but the values should be quoted strings.</P><!--TOC subsubsection Creating Key Bindings--> <H4 CLASS="subsubsection"><!--SEC ANCHOR --><A NAME="htoc18">4.1.3</A>  Creating Key Bindings</H4><!--SEC END --><P> <A NAME="bindings"></A> Syntax: <TT>bind </TT><TT><EM>key_identifier operation</EM></TT><BR><BR> This command will bind a keypress to execute a calendar operation. The various operations, which should not be enclosed in quotes, may be found in Section <A HREF="#operationslist">4.3</A>. Key identifiers may be specified by strings that represent a single keypress, for example <TT>"m"</TT> (quotes included). The key may be prefixed with <TT>"</TT><TT>\\</TT><TT>C"</TT> or <TT>"</TT><TT>\\</TT><TT>M"</TT> to represent Control or Meta (Alt) modifiers, respectively; note that the backslash must be doubled. A number of special keys lack single-character representations, so the following strings may be used to represent them: </P><UL CLASS="itemize"><LI CLASS="li-itemize"> <TT>"<esc>"</TT> </LI><LI CLASS="li-itemize"><TT>"<tab>"</TT> </LI><LI CLASS="li-itemize"><TT>"<enter>"</TT> </LI><LI CLASS="li-itemize"><TT>"<return>"</TT> </LI><LI CLASS="li-itemize"><TT>"<insert>"</TT> </LI><LI CLASS="li-itemize"><TT>"<home>"</TT> </LI><LI CLASS="li-itemize"><TT>"<end>"</TT> </LI><LI CLASS="li-itemize"><TT>"<pageup>"</TT> </LI><LI CLASS="li-itemize"><TT>"<pagedown>"</TT> </LI><LI CLASS="li-itemize"><TT>"<space>"</TT> </LI><LI CLASS="li-itemize"><TT>"<left>"</TT> </LI><LI CLASS="li-itemize"><TT>"<right>"</TT> </LI><LI CLASS="li-itemize"><TT>"<up>"</TT> </LI><LI CLASS="li-itemize"><TT>"<down>"</TT> </LI><LI CLASS="li-itemize"><TT>"<f1>"</TT> to <TT>"<f12>"</TT> </LI></UL><P> Due to differences between various terminal emulators, this key identifier syntax may not be adequate to describe every keypress. As a workaround, Wyrd will also accept key identifiers in octal notation. As an example, you could use <TT>\</TT><TT>024</TT> (do <EM>not</EM> enclose it in quotes) to represent Ctrl-T.</P><P>Multiple keys may be bound to the same operation, if desired.</P><!--TOC subsubsection Removing Key Bindings--> <H4 CLASS="subsubsection"><!--SEC ANCHOR --><A NAME="htoc19">4.1.4</A>  Removing Key Bindings</H4><!--SEC END --><P> <A NAME="unbindings"></A> Syntax: <TT>unbind </TT><TT><EM>key_identifier</EM></TT><BR><BR> This command will remove all bindings associated with the key identifier. The key identifiers should be defined using the syntax described in the previous section.</P><!--TOC subsubsection Setting the Color Scheme--> <H4 CLASS="subsubsection"><!--SEC ANCHOR --><A NAME="htoc20">4.1.5</A>  Setting the Color Scheme</H4><!--SEC END --><P> <A NAME="colors"></A> Syntax: <TT>color </TT><TT><EM>object</EM></TT><TT> </TT><TT><EM>foreground</EM></TT><TT> </TT><TT><EM>background</EM></TT><BR><BR> This command will apply the specified foreground and background colors to the appropriate object. A list of colorable objects is provided in Section <A HREF="#colorable objects">4.4</A>. Wyrd will recognize the following color keywords: <TT>black, red, green, yellow, blue, magenta, cyan, white, default</TT>. The <TT>default</TT> keyword allows you to choose the default foreground or background colors. If you use <TT>default</TT> for your background color, this will access the transparent background on terminal emulators which support it.</P><!--TOC subsection Configuration Variables--> <H3 CLASS="subsection"><!--SEC ANCHOR --><A NAME="htoc21">4.2</A>  Configuration Variables</H3><!--SEC END --><P> <A NAME="variables"></A> The following configuration variables may be set as described in Section <A HREF="#setvar">4.1.2</A>: </P><UL CLASS="itemize"><LI CLASS="li-itemize"> <TT>remind_command</TT><BR> Determines the command used to execute Remind. </LI><LI CLASS="li-itemize"><TT>reminders_file</TT><BR> Controls which Remind file (or Remind directory) Wyrd will operate on. The default is ~/.reminders . </LI><LI CLASS="li-itemize"><TT>edit_old_command</TT><BR> Controls the command used to edit a pre-existing reminder. The special strings <TT>’%file%’</TT> and <TT>’%line%’</TT> will be replaced with a filename to edit and a line number to navigate to within that file. </LI><LI CLASS="li-itemize"><TT>edit_new_command</TT><BR> Controls the command used to edit a new reminder. The special character <TT>’%file%’</TT> will be replaced with a filename to edit. Ideally, this command should move the cursor to the last line of the file, where the new reminder template is created. </LI><LI CLASS="li-itemize"><TT>edit_any_command</TT><BR> Controls the command used for editing a reminder file without selecting any particular reminder. The special character <TT>’%file%’</TT> will be replaced with a filename to edit. </LI><LI CLASS="li-itemize"><TT>timed_template</TT><BR> Controls the format of the <TT>REM</TT> line created when editing a new timed reminder. The following string substitutions will be made: <TT>’%monname%’</TT> - month name, <TT>’%mon%’</TT> - month number, <TT>’%mday%’</TT> - day of the month, <TT>’%year%’</TT> - year, <TT>’%hour%’</TT> - hour, <TT>’%min%’</TT> - minute, <TT>’%wdayname%’</TT> - weekday name, <TT>’%wday%’</TT> - weekday number. </LI><LI CLASS="li-itemize"><TT>untimed_template</TT><BR> Controls the format of the <TT>REM</TT> line created when editing a new untimed reminder. The substitution syntax is the same as for <TT>timed_template</TT>. </LI><LI CLASS="li-itemize"><TT>template</TT><TT><EM>N</EM></TT><BR> Controls the format of a generic user-defined <TT>REM</TT> line template; <EM>N</EM> may range from 0 to 9. The substitution syntax is the same as for <TT>timed_template</TT>. </LI><LI CLASS="li-itemize"><TT>busy_algorithm</TT><BR> An integer value specifying which algorithm to use for measuring how busy the user is on a particular day. If <TT>busy_algorithm="1"</TT>, then Wyrd will simply count the total number of reminders triggered on that day. If <TT>busy_algorithm="2"</TT>, then Wyrd will count the number of hours of reminders that fall on that day. (Untimed reminders are assumed to occupy <TT>untimed_duration</TT> minutes.) </LI><LI CLASS="li-itemize"><TT>untimed_duration</TT><BR> An integer value that specifies the assumed duration of an untimed reminder, in minutes. This is used only when computing the busy level with <TT>busy_algorithm="2"</TT>. </LI><LI CLASS="li-itemize"><TT>busy_level1</TT><BR> An integer value specifying the maximum number of reminders in a day (with <TT>busy_algorithm="1"</TT>) or maximum hours of reminders in a day (with <TT>busy_algorithm="2"</TT>) which will be colored using the color scheme for <TT>calendar_level1</TT>. </LI><LI CLASS="li-itemize"><TT>busy_level2</TT><BR> Same as above, using the <TT>calendar_level2</TT> color scheme. </LI><LI CLASS="li-itemize"><TT>busy_level3</TT><BR> Same as above, using the <TT>calendar_level2</TT> color scheme rendered in bold. </LI><LI CLASS="li-itemize"><TT>busy_level4</TT><BR> Same as above, using the <TT>calendar_level3</TT> color scheme. Any day with more reminders than this will be rendered using the <TT>calendar_level3</TT> color scheme rendered in bold. </LI><LI CLASS="li-itemize"><TT>week_starts_monday</TT><BR> A boolean value (<TT>"true"</TT> or <TT>"false"</TT>) that determines the first day of the week. </LI><LI CLASS="li-itemize"><TT>schedule_12_hour</TT><BR> A boolean value that determines whether the timed reminders window is drawn using 12- or 24-hour time. </LI><LI CLASS="li-itemize"><TT>selection_12_hour</TT><BR> A boolean value that determines whether the selection information is drawn with 12- or 24-hour time. </LI><LI CLASS="li-itemize"><TT>status_12_hour</TT><BR> A boolean value that determines whether the current time is drawn using a 12- or 24-hour clock. </LI><LI CLASS="li-itemize"><TT>description_12_hour</TT><BR> A boolean value that determines whether reminder start and end times are drawn using 12- or 24-hour time in the description window. This value also controls the format of timestamps in the formatted calendars produced by <TT>view_week</TT> and <TT>view_month</TT>. </LI><LI CLASS="li-itemize"><TT>center_cursor</TT><BR> A boolean value that determines how the screen and cursor move during scrolling operations. When set to <TT>"true"</TT>, the cursor is fixed in the center of the timed reminders window, and the schedule scrolls around it. When set to <TT>"false"</TT> (the default), the cursor will move up and down the schedule during scrolling operations. </LI><LI CLASS="li-itemize"><TT>goto_big_endian</TT><BR> A boolean value that determines how the the <TT>goto</TT> operation will parse dates. When set to <TT>"true"</TT>, date specifiers should be in ISO 8601 (YYYYMMDD) format. When set to <TT>"false"</TT>, date specifiers should be in European style DDMMYYYY format. </LI><LI CLASS="li-itemize"><TT>quick_date_US</TT><BR> A boolean value that determines how the <TT>quick_add</TT> operation will parse numeric dates with slashes, e.g. 6/1 (or 6/1/2006). When set to <TT>"true"</TT>, the first number is a month and the second is the day of the month (June 1). When set to <TT>"false"</TT>, these meanings of these two fields are switched (January 6). </LI><LI CLASS="li-itemize"><TT>number_weeks</TT><BR> A boolean value that determines whether or not weeks should be numbered within the month calendar window. Weeks are numbered according to the ISO 8601 standard. The ISO standard week begins on Monday, so to avoid confusion it is recommended that <TT>week_starts_monday</TT> be set to <TT>"true"</TT> when week numbering is enabled. </LI><LI CLASS="li-itemize"><TT>home_sticky</TT><BR> A boolean value that determines whether or not the cursor should "stick" to the "home" position. When this option is set to <TT>"true"</TT>, then after pressing the <TT><home></TT> key the cursor will automatically follow the current date and time. The effect is cancelled by pressing any of the navigation keys. </LI><LI CLASS="li-itemize"><TT>untimed_window_width</TT><BR> An integer value that determines the target width of the month-calendar window and the untimed reminders window. The allowable range is 34 to (<TT>$COLUMNS</TT> - 40) characters, and Wyrd will silently disregard any setting outside this range. </LI><LI CLASS="li-itemize"><TT>advance_warning</TT><BR> A boolean value that determines whether or not Wyrd should display advance warning of reminders. When set to <TT>"true"</TT>, Wyrd will invoke Remind in a mode that generates advance warning of reminders as specified in the reminder file. </LI><LI CLASS="li-itemize"><TT>untimed_bold</TT><BR> A boolean value that determines whether or not Wyrd should render untimed reminders using a bold font. </LI></UL><P> For maximum usefulness, <TT>busy_level1</TT> < <TT>busy_level2</TT> < <TT>busy_level3</TT> < <TT>busy_level4</TT>.</P><!--TOC subsection Calendar Operations--> <H3 CLASS="subsection"><!--SEC ANCHOR --><A NAME="htoc22">4.3</A>  Calendar Operations</H3><!--SEC END --><P> <A NAME="operationslist"></A> Every Wyrd operation can be made available to the interface using the syntax described in Section <A HREF="#bindings">4.1.3</A>. The following is a list of every available operation.</P><UL CLASS="itemize"><LI CLASS="li-itemize"> <TT>scroll_up</TT><BR> move the cursor up one element </LI><LI CLASS="li-itemize"><TT>scroll_down</TT><BR> move the cursor down one element </LI><LI CLASS="li-itemize"><TT>next_day</TT><BR> jump ahead one day </LI><LI CLASS="li-itemize"><TT>previous_day</TT><BR> jump backward one day </LI><LI CLASS="li-itemize"><TT>next_week</TT><BR> jump ahead one week </LI><LI CLASS="li-itemize"><TT>previous_week</TT><BR> jump backward one week </LI><LI CLASS="li-itemize"><TT>next_month</TT><BR> jump ahead one month </LI><LI CLASS="li-itemize"><TT>previous_month</TT><BR> jump backward one month </LI><LI CLASS="li-itemize"><TT>home</TT><BR> jump to the current date and time </LI><LI CLASS="li-itemize"><TT>goto</TT><BR> begin entering a date specifier to jump to </LI><LI CLASS="li-itemize"><TT>zoom</TT><BR> zoom in on the day schedule view (this operation is cyclic) </LI><LI CLASS="li-itemize"><TT>edit</TT><BR> edit the selected reminder </LI><LI CLASS="li-itemize"><TT>edit_any</TT><BR> edit a reminder file, without selecting any particular reminder </LI><LI CLASS="li-itemize"><TT>scroll_description_up</TT><BR> scroll the description window contents up (when possible) </LI><LI CLASS="li-itemize"><TT>scroll_description_down</TT><BR> scroll the description window contents down (when possible) </LI><LI CLASS="li-itemize"><TT>quick_add</TT><BR> add a “quick reminder” </LI><LI CLASS="li-itemize"><TT>new_timed</TT><BR> create a new timed reminder </LI><LI CLASS="li-itemize"><TT>new_timed_dialog</TT><BR> same as previous, with a reminder file selection dialog </LI><LI CLASS="li-itemize"><TT>new_untimed</TT><BR> create a new untimed reminder </LI><LI CLASS="li-itemize"><TT>new_untimed_dialog</TT><BR> same as previous, with a reminder file selection dialog </LI><LI CLASS="li-itemize"><TT>new_template</TT><TT><EM>N</EM></TT><BR> create a new user-defined reminder using <TT>template</TT><TT><EM>N</EM></TT>, where <EM>N</EM> may range from 0 to 9 </LI><LI CLASS="li-itemize"><TT>new_template</TT><TT><EM>N</EM></TT><TT>_dialog</TT><BR> same as previous, with a reminder file selection dialog </LI><LI CLASS="li-itemize">copy<BR> copy a reminder to Wyrd’s clipboard </LI><LI CLASS="li-itemize">cut<BR> delete a reminder and copy it to Wyrd’s clipboard </LI><LI CLASS="li-itemize">paste<BR> paste a reminder from Wyrd’s clipboard into the schedule </LI><LI CLASS="li-itemize">paste_dialog<BR> same as previous, with a reminder file selection dialog </LI><LI CLASS="li-itemize"><TT>switch_window</TT><BR> switch between the day schedule window on the left, and the untimed reminder window on the right </LI><LI CLASS="li-itemize"><TT>begin_search</TT><BR> begin entering a search string </LI><LI CLASS="li-itemize"><TT>search_next</TT><BR> search for the next occurrence of the search string </LI><LI CLASS="li-itemize"><TT>next_reminder</TT><BR> jump to the next reminder<SUP><A NAME="text1" HREF="#note1">1</A></SUP> </LI><LI CLASS="li-itemize"><TT>view_remind</TT><BR> view the output of <TT>remind</TT> for the selected date </LI><LI CLASS="li-itemize"><TT>view_remind_all</TT><BR> view the output of <TT>remind</TT> for the selected date, triggering all non-expired reminders </LI><LI CLASS="li-itemize"><TT>view_week</TT><BR> view Remind’s formatted calendar for the week that contains the selected date (the in-calendar timestamp formats are determined by the value of <TT>description_12_hour</TT>) </LI><LI CLASS="li-itemize"><TT>view_month</TT><BR> view Remind’s formatted calendar for the month that contains the selected date (the in-calendar timestamp formats are determined by the value of <TT>description_12_hour</TT>) </LI><LI CLASS="li-itemize"><TT>refresh</TT><BR> refresh the display </LI><LI CLASS="li-itemize"><TT>quit</TT><BR> exit Wyrd </LI><LI CLASS="li-itemize"><TT>entry_complete</TT><BR> signal completion of search string entry or date specifier </LI><LI CLASS="li-itemize"><TT>entry_backspace</TT><BR> delete the last character of the search string or date specifier </LI><LI CLASS="li-itemize"><TT>entry_cancel</TT><BR> cancel entry of a search string or date specifier </LI></UL><!--TOC subsection Colorable Objects--> <H3 CLASS="subsection"><!--SEC ANCHOR --><A NAME="htoc23">4.4</A>  Colorable Objects</H3><!--SEC END --><P> <A NAME="colorable objects"></A> Each of Wyrd’s on-screen elements may be colored by the color scheme of your choice, using the syntax defined in Section <A HREF="#colors">4.1.5</A>. The following is a list of all colorable objects. </P><UL CLASS="itemize"><LI CLASS="li-itemize"> <TT>help</TT><BR> the help bar at the top of the screen </LI><LI CLASS="li-itemize"><TT>timed_default</TT><BR> an empty timeslot in the day-schedule window </LI><LI CLASS="li-itemize"><TT>timed_current</TT><BR> the current time in the day-schedule window (if it is visible) </LI><LI CLASS="li-itemize"><TT>timed_reminder1</TT><BR> a nonempty timeslot in the day-schedule window, indented to level 1 </LI><LI CLASS="li-itemize"><TT>timed_reminder2</TT><BR> a nonempty timeslot in the day-schedule window, indented to level 2 </LI><LI CLASS="li-itemize"><TT>timed_reminder3</TT><BR> a nonempty timeslot in the day-schedule window, indented to level 3 </LI><LI CLASS="li-itemize"><TT>timed_reminder4</TT><BR> a nonempty timeslot in the day-schedule window, indented to level 4 </LI><LI CLASS="li-itemize"><TT>untimed_reminder</TT><BR> an entry in the untimed reminders window </LI><LI CLASS="li-itemize"><TT>timed_date</TT><BR> the vertical date strip at the left side of the screen </LI><LI CLASS="li-itemize"><TT>selection_info</TT><BR> the line providing date/time for the current selection </LI><LI CLASS="li-itemize"><TT>description</TT><BR> the reminder description window </LI><LI CLASS="li-itemize"><TT>status</TT><BR> the bottom bar providing current date and time </LI><LI CLASS="li-itemize"><TT>calendar_labels</TT><BR> the month and weekday labels in the calendar window </LI><LI CLASS="li-itemize"><TT>calendar_level1</TT><BR> calendar days with low activity </LI><LI CLASS="li-itemize"><TT>calendar_level2</TT><BR> calendar days with medium activity </LI><LI CLASS="li-itemize"><TT>calendar_level3</TT><BR> calendar days with high activity </LI><LI CLASS="li-itemize"><TT>calendar_today</TT><BR> the current day in the calendar window (if it is visible) </LI><LI CLASS="li-itemize"><TT>left_divider</TT><BR> the vertical line to the left of the timed reminders window </LI><LI CLASS="li-itemize"><TT>right_divider</TT><BR> the vertical and horizontal lines to the right of the timed reminders window </LI></UL><!--TOC section Usage Tips--> <H2 CLASS="section"><!--SEC ANCHOR --><A NAME="htoc24">5</A>  Usage Tips</H2><!--SEC END --><UL CLASS="itemize"><LI CLASS="li-itemize"> Wyrd fills in sensible defaults for the fields of a <TT>REM</TT> statement, but you will inevitably need to make some small edits to achieve the behavior you want. If you use Vim, you can make your life easier by installing the Vim-Latex Suite and then modifying your <TT>~/.wyrdrc</TT> to use <TT>REM</TT> templates like this:<P><TT>set timed_template="REM %monname% %mday% %year% <++>AT %hour%:%min%<++> DURATION 1:00<++> MSG %</TT><TT>\</TT><TT>"<++>%</TT><TT>\</TT><TT>" %b"</TT><BR> <TT>set untimed_template="REM %monname% %mday% %year% <++>MSG %</TT><TT>\</TT><TT>"<++>%</TT><TT>\</TT><TT>" %b"</TT> </P><P>With this change, hitting Ctrl-J inside Vim (in insert mode) will cause your cursor to jump directly to the <TT><++></TT> markers, enabling you to quickly add any desired Remind delta and message parameters.</P></LI><LI CLASS="li-itemize">The 43 Folders Wiki <a href="http://wiki.43folders.com/index.php/Wyrd">has a page on Wyrd</a>. This is a good place to look for other usage tips. </LI></UL><!--TOC section Licensing--> <H2 CLASS="section"><!--SEC ANCHOR --><A NAME="htoc25">6</A>  Licensing</H2><!--SEC END --><P> Wyrd is Free Software; you can redistribute it and/or modify it under the terms of the GNU General Public License (GPL), Version 2, as published by the Free Software Foundation. You should have received a copy of the GPL along with this program, in the file <TT>’COPYING’</TT>.</P><!--TOC section Acknowledgments--> <H2 CLASS="section"><!--SEC ANCHOR --><A NAME="htoc26">7</A>  Acknowledgments</H2><!--SEC END --><P> Thanks, of course, to David Skoll for writing such a powerful reminder system. Thanks also to Nicolas George, who wrote the OCaml curses bindings used within Wyrd. </P><!--TOC section Contact info--> <H2 CLASS="section"><!--SEC ANCHOR --><A NAME="htoc27">8</A>  Contact info</H2><!--SEC END --><P> Wyrd author: Paul Pelzl <TT><pelzlpj@gmail.com></TT><BR> Wyrd website: <TT>http://pessimization.com/software/wyrd</TT><BR> Wyrd project page (bug reports, code repository, etc.): <TT>http://launchpad.net/wyrd</TT><BR> </P><!--TOC section Miscellaneous--> <H2 CLASS="section"><!--SEC ANCHOR --><A NAME="htoc28">9</A>  Miscellaneous</H2><!--SEC END --><P> “Wyrd is a concept in ancient Anglo-saxon and Nordic cultures roughly corresponding to fate or personal destiny.” <EM>– Wikipedia</EM></P><!--BEGIN NOTES document--> <HR CLASS="footnoterule"><DL CLASS="thefootnotes"><DT CLASS="dt-thefootnotes"> <A NAME="note1" HREF="#text1">1</A></DT><DD CLASS="dd-thefootnotes">The <TT>next_reminder</TT> operation locates reminders at the point they occur; if <TT>advance_warning</TT> is enabled, <TT>next_reminder</TT> will skip over any displayed warnings of an event. </DD></DL> <!--END NOTES--> <!--CUT END --> <!--HTMLFOOT--> <!--ENDHTML--> <!--FOOTER--> <HR SIZE=2><BLOCKQUOTE CLASS="quote"><EM>This document was translated from L<sup>A</sup>T<sub>E</sub>X by </EM><A HREF="http://hevea.inria.fr/index.html"><EM>H</EM><EM><FONT SIZE=2><sup>E</sup></FONT></EM><EM>V</EM><EM><FONT SIZE=2><sup>E</sup></FONT></EM><EM>A</EM></A><EM>.</EM></BLOCKQUOTE></BODY> </HTML>