The Remind calendar program
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1992 lines
70 KiB

* VERSION 4.0 Patch 0 - 2022-04-04
- MAJOR NEW FEATURE: remind: Remind output can effectively be
translated into other languages at run-time. A number of system
variables let you translate English words to another language, and a
mechanism for altering the substitution filter at run-time lets you
translate its output so the results are idiomatic. See the man page
- NEW FEATURE: remind: Add the pad() built-in function
- NEW FEATURE: tkremind: Day numbers can be displayed left-aligned,
centered or right-aligned.
- IMPROVEMENT: contrib/remind-conf-mode: The Emacs syntax-highlighter
has been updated with the latest system variables and functions
and has been made case-insensitive.
- IMPROVEMENT: remind, rem2ps: Use link-time optimization with gcc if
- IMPROVEMENT: remind: Print better diagnostics when errors occur inside
a user-defined function. We now show the stack trace to make it easier
to figure out where the error actually is.
- CHANGE: Add a "q" sub-option to the "-p", "-pp", and "-ppp" options.
This causes Remind *not* to remove the %"...%" marker sequence from
remind bodies.
- BUG FIX: rem2pdf: Make rem2pdf respect the --prefix ./configure flag.
Loosely based on patch by Jonathan Kamens.
- BUG FIX: tkremind: Fix the "-m" flag, which was broken in 03.04.00.
- BUG FIX: Fix the overflow-detection functions so they work with link-time
optimization. The previous versions would be optimized away.
- BUG FIX: Warn if the arguments to the "-@" option are out of range.
Problem noted by Ian! D. Allen.
- BUG FIX: Always interpret $Latitude and $Longitude input values in the
"C" locale. (We do accept localized input, but warn.)
- BUG FIX: Fix many spelling mistakes caught by Jens Schleusener
* VERSION 3.4 Patch 2 - 2022-03-14
- NEW FEATURE: remind: Add syntactic sugar to simplify some common
types of reminders. See "SYNTACTIC SUGAR FOR REM" in the remind
man page. Based on suggestions from Ian! D. Allen.
- CHANGE: examples/defs.rem: The examples file has been updated to use
the newer syntactic sugar.
- CHANGE: remind: Always parse the body of REM statements to catch
expression errors. In the past, something like:
REM 2025-01-02 MSG [1/0]
would not cause a division-by-zero error except on 2025-01-02. Now,
the error is always caught. NOTE POTENTIAL INCOMPATIBILITY: There may
be edge-cases when formerly-valid remind scripts now trigger errors.
However, this is pretty unlikely.
- NEW FEATURE: remind: Add the "trig" function to allow more
expressiveness when creating triggers. See man page for details.
- IMPROVEMENT: tkremind: Tweak the calendar display; improve ability to
customize colors, including supplying two built-in themes. Based on
patch and suggestion from Paulo (last name unknown).
- IMPROVEMENT: tkremind: TkRemind handles errors in reminders scripts
much more unobtrusively. Instead of popping up a modal dialog box
with almost-unreadable error output, it discreetly notifies you of
errors with a button that lets you view the specific error messages
in a more readable format.
- IMPROVEMENT: examples/remind.vim: Update list of keywords in vim syntax
highlighting file.
- IMPROVEMENT: contrib/remind-conf-mode: Update the list of keywords,
functions and variables in the Emacs syntax-highlighting file. Also make
it match them case-insensitively.
- CHANGE: remind: Increase $MaxSatIter default to 1000 instead of 150.
Computers are much faster than when I first wrote remind and they
can handle this higher limit easily. The higher limit also enables
certain reasonable reminders that failed in the past because of the
low SATISFY iteration limit.
- CHANGE: remind: The "||" operator now returns the value of the first
non-zero operand rather than just returning 1 or 0. Similarly, "&&"
returns 0 if either operand is false or the value of the last
operand if both operands are true.
NOTE POTENTIAL INCOMPATIBILITY: Remind scripts that depend on ||
and && always returning exactly one of 1 or 0 may need
- CHANGE: The || and && operators can accept any non-STRING type as long
as both operands have the same type. The "false" values are defined
as follows; true values are any other value:
INT: 0
TIME: 00:00
DATE: '1990-01-01' (the Remind epoch)
DATETIME: '1990-01-01@00:00' (the Remind epoch)
- IMPROVEMENT: remind: Issue diagnostics if an UNTIL or THROUGH date
is earlier than any possible trigger date, as well as an UNTIL date
with a fully-specified date and no repeat ("*N"). Suggestion from
Ian! D. Allen.
- BUG FIX: tkremind: If the same moon phase appeared twice in a month,
TkRemind would not display the first occurrence correctly. This has
been fixed.
- BUG FIX: rem2pdf: Fix typos in the man page.
- BUG FIX: remind: The IF command documentation didn't reflect how it
actually worked; now it does.
- BUG FIX: remind: Use correct UNTIL/THROUGH keyword in error message.
- BUG FIX: rem2pdf: Correct the calculation that warns about an over-full
calendar box. Problem noted by Jonathan Kamens.
- BUG FIX: remind: The "remind -c" output would sometimes be incorrect if
scripts with double-wide characters were used. This has been fixed.
- BUG FIX: remind: The "remind -c" output would sometimes be incorrect
if right-to-left scripts were used in reminders. This has been fixed.
* VERSION 3.4 Patch 1 - 2022-02-23
- MINOR IMPROVEMENT: Support the INSTALL_BASE environment variable for
installing rem2pdf in a non-standard location like your home directory.
This is passed in to rem2pdf's Makefile at build and install time.
- MINOR IMPROVEMENT: ./configure: Add --disable-perl-build-artifacts flag
to avoid installation of perllocal.pod and .packlist files.
- BUG FIX: tkremind: If the system date rolls over, update the display
to correctly highlight the current date. This worked in older versions
of Remind, but was broken by 03.04.00.
- BUG FIX: rem2pdf: The small calendar font would sometimes be scaled
incorrectly so the small calendar overflowed the box. This has been
* VERSION 3.4 Patch 0 - 2022-02-10
- MAJOR CHANGE: Remind and its helpers (except for rem2ps) fully support
UTF-8. If your system locale is a UTF-8 locale and your terminal
can handle UTF-8 encoding, you can enjoy full Unicode support in Remind.
- NEW FEATURE: Added a rem2pdf Remind-to-PDF converter. It can handle
the full UTF-8 character set and features a new PANGO special reminder
type that lets you format the text in the PDF calendar (by changing the
font size, color, underlining, etc.)
rem2pdf requires the Pango and Cairo Perl modules. On Debian or
Debian-derived systems, these may be installed with:
apt install libpango-perl libcairo-perl
Unlike rem2ps, the default font in rem2pdf is "Sans" rather than
"Helvetica", as Sans seems to be typeset better by the Pango library.
- NEW FEATURE: remind: New system variables $Sunday through $Saturday
and $January through $December let you set weekday and month names
to whatever you like, permitting you to produce calendars in your
local language, even if it's not one of the languages Remind supports
by default.
- NEW FEATURE: tkremind: If rem2pdf installed, TkRemind offers you the
choice of PDF or PostScript output in the Print dialog.
- CHANGE: remind: Increase the number of allowed "full OMITs" from 500
to 1000.
- CHANGE: Remove the annoying code that slowed compilation and running
on Windows and Mac OS X. I believe the point has been made and free
OSes have enough of a critical mass that the annoyances are
- CLEANUP: remind: C source code: Replace the LAT_DEG, LAT_MIN,
- CLEANUP: remind: C source code: Remove various unused or obsolete macros.
- BUG FIXES: Minor fixups to groff source and Makefiles courtesy of
Jochen Sprickerhof.
- BUG FIX: Properly support formatting of double-wide characters in the
terminal mode "remind -c" calendar.
- BUG FIX: rem2html: Document how to highlight today with a red border
- BUG FIX: rem2html: Generate and install a man page for rem2html
- BUG FIX: remind: Get rid of LAT_DEG/LAT_MIN/LAT_SEC and
- IMPROVEMENT: All localized languages now use UTF-8 exclusively.
Support for old character encodings like ISO-8859-1 and ISO-8859-2
has been dropped since modern UNIXes have pretty much standardized
on UTF-8.
- CHANGE: remind: Non-English versions of remind *no longer* accept
non-English month- and weekday-names in trigger specifications. This
was a misfeature. NOTE INCOMPATIBILITY.
* VERSION 3.3 Patch 12 - 2022-01-24
- UPDATE: rem2html: Use JSON::MaybeXS instead of JSON::Any, since JSON::Any
is deprecated. NOTE INCOMPATIBILITY: If you don't have JSON::MaybeXS
installed, you'll need to install it before trying to install or update
- NEW FEATURE: Add a DO command. This is just like INCLUDE, but relative
paths are interpreted relative to the directory containing the current
file. That is:
DO somefile.rem
is equivalent to:
INCLUDE [filedir()]/somefile.rem
- NEW FEATURE: Add the $DefaultTDelta system variable and associated
-tt[N] command-line option to set a default time delta for timed
reminder without an explicit +N delta.
- IMPROVEMENT: TkRemind: Store .tkremindrc in $XDG_CONFIG_HOME/tkremindrc
or $HOME/.config/tkremindrc as per the XDG Base Directory Specification.
- BUG FIX: remind: Make the shell() built-in function respect
- BUG FIX: Use size_t to track the size of dynamic buffers rather than int.
This permits Remind to read in files with lines longer than 1GB and to
consume more than 1GB of output from the shell() command, both of which
will surely be massively useful. (The old limit was 1GB rather than 2GB
because of details of the dynamic buffer resizing algorithm.)
* VERSION 3.3 Patch 11 - 2021-12-30
- IMPROVEMENT: TkRemind: Save the print dialog settings so they persist.
- IMPROVEMENT: TkRemind: Show queue in sorted order.
- IMPROVEMENT: TkRemind: Pass "-r" flag to inotifywait
- IMPROVEMENT: TkRemind: Draw moon phases with Tk canvas items rather than
using PNG images. This lets them change color along with other TkRemind
- IMPROVEMENT: TkRemind: Underline editable reminders when the pointer enters
them; fire up the editor with either Button-1 or Button-3 for
non-TkRemind-generated reminders.
- NEW FUNCTION: Remind: Add the isany() built-in function.
- IMPROVEMENT: rem2html: Add class names indicating number of rows in calendar
- IMPROVEMENT: remind: In -z0 mode, sleep with higher precision to ensure we
wake as close to possible to each 1-minute boundary.
- IMPROVEMENT: rem2html: Coalesce table.rem-cal CSS into one block. Thanks
to Ian! D. Allen for pointing this out.
- IMPROVEMENT: examples/defs.rem: Modernize the examples and get rid of some
- CHANGE: Add $Latitude and $Longitude system variables. Deprecate
$LatDeg, $LatMin, $LatSec, $LongDeg, $LongMin and $LongSec.
- CHANGE: Test: Add "dump $" to test.rem.
* VERSION 3.3 Patch 10 - 2021-11-30
- IMPROVEMENT: TkRemind: Apply window and text colors to all GUI elements
including buttons and status labels.
- NEW FEATURE: The new ADDOMIT keyword can shorten reminder files.
The command:
REM ...whatever... ADDOMIT MSG Foo
behaves identically to:
REM ...whatever... SATISFY 1
IF trigvalid()
OMIT [trigdate()] MSG Foo
For example, Labour Day can be displayed and omitted as follows:
- UPDATE: Update contrib/remind-conf-mode to latest release
- CHANGE: The parser does not auto-convert numbers 90-99 to 1990-1999. This
was messing up things like "DURATION 90". It also means you can no longer
abbreviate the years 1990-1999 as 90-99.
- BUG FIX: Various documentation fixes
- BUG FIX: When switching users with the "-u" option, call initgroups()
to properly set group membership list.
* VERSION 3.3 Patch 9 - 2021-10-14
- NEW FEATURE: Add "-+username" option to tell Remind to trust files owned by
"username" and allow RUN directives in them. Idea courtesy of Ian! D. Allen
- NEW FEATURE: Add "-u+username" variant to tell Remind to switch users to
"username" without disabling RUN directives. Idea courtesy of Ian! D. Allen
- CHANGE: rem2html: rem2html has been moved out of the www/ directory into
its own rem2html/ directory. If your system has the prerequisites
(namely Perl, Getopt::Long and JSON::Any) then rem2html will be installed
by "make install".
- CHANGE: Remove "cm2rem". It was about 20 years obsolete.
- CHANGE: rem2html: Use inline data: URL images for moon images by default,
thus producing a completely stand-alone HTML file.
- CHANGE: Remove unnecessary spaces from "remind -pp" JSON output.
- DOCUMENTATION FIX: Various man page fixes and tweaks.
- BUG FIX: rem2html: Tweak the default CSS stylesheet; more rational
handling of rem2html command-line options.
- BUG FIX: remind: "remind -c" would sometimes highlight *two* days as
"today"; this has been fixed.
- BUG FIX: Add a missing #ifdef...#endif and remove a C99-ism. This once again
allows Remind to be compiled with some very old C compilers.
* VERSION 3.3 Patch 8 - 2021-09-13
- NEW FEATURE: remind: Add INCLUDECMD command
- NEW FEATURE: remind: Add shellescape() built-in function
- BUG FIX: tkremind: TkRemind would sometimes fill in incorrect initial
values for the reminder-editing form if you clicked on a TkRemind-created
reminder to edit it. This has been fixed.
- BUG FIX: tkremind: Get back better error messages from Remind if you
try to create a reminder with an invalid date specification.
- BUG FIX: remind: Catch integer overflow if we try to evaluate $IntMin * -1
- DOC UPDATES: remind: Minor man page fixes
* VERSION 3.3 Patch 7 - 2021-05-10
- MINOR FIX: Refuse to run "make test" as root --- it would fail
anyway with an obscure message.
- BUG FIX: Remind would sometimes compute incorrect trigger date for:
REM Tue 29 Feb MSG ...
- BUG FIX: Remind would sometimes compute incorrect trigger date for
a date spec like: Tue 31 2021 MSG ...
* VERSION 3.3 Patch 6 - 2021-03-30
- test/test.rem: Change local to en_US.utf-8 only if current locale
is not a UTF-8 locale.
- MINOR CHANGE: Remind's arithmetic operators (+, -, *, /) give errors
on overflow rather than silently giving the wrong answer.
- MINOR CHANGE: Add $IntMin and $IntMax system variables.
- DOCUMENTATION FIX: Document that TkRemind now requires Tcl/Tk version
8.5 or newer.
* VERSION 3.3 Patch 5 - 2021-01-21
- NEW FEATURE: tkremind: Add ability to change fonts and colors from
within TkRemind "Options" dialog.
- CHANGE: tkremind: TkRemind now requires Tcl/Tk 8.5 or newer.
- CHANGE: tkremind: You can specify the location of the options
file on the command-line if you want to use one other than ~/.tkremindrc
- CLEANUP: tkremind: Remove "Apply Options" from Options dialog; we only
need "Save Options".
- DOC FIX: Add missing release note in 3.3.4 notes regarding
setpagedevice patch
- DOC FIX: tkremind: Document shortcut keys.
* VERSION 3.3 Patch 4 - 2021-01-12
- NEW FEATURE: If "inotifywait" is installed, TkRemind uses it to refresh
the calendar display right away when the reminders file/directory is updated.
This makes TkRemind react almost instantly if external tools are editing
or updating reminders.
- MINOR NEW FEATURE: rem2ps has a new '-x' option; this puts the day numbers
on the top-left of the day's box instead of the top-right.
- MINOR FIXES: A typo in remind.1 was fixed; additional comments regarding
UNTIL were added.
- BUG FIX: rem2ps: Call setpagedevice to set page size. Based on a patch
from Jonathan Kamens.
* VERSION 3.3 Patch 3 - 2020-11-09
- BUG FIX: Fix startup crash in TkRemind if "Show Today's Reminders on
Startup" is enabled (which, unfortunately, is the default.) Bug reported
by Martin Ziemer.
* VERSION 3.3 Patch 2 - 2020-11-08
- MINOR NEW FEATURE: Add MAYBE-UNCOMPUTABLE keyword; see the man page
and discussion at
- CHANGE: TkRemind always invokes Remind with the "-itkremind=1" option,
even when printing. NOTE INCOMPATIBILITY: This is a behavior change!
When you print from TkRemind, we also invoke Remind with "-itkprint=1"
so you can detect that PostScript is being generated.
- CHANGE: The maximum length of a variable name has been increased from
16 characters to 64 characters. Modern computers have plenty of memory.
- BUG FIXES: Minor documentation updates, typo fixes, clarifications, etc.
- BUG FIX: Fix calendar-drawing alignment errors when displaying UTF-8
strings with zero-width combining characters and strings with tabs.
- BUG FIX: TkRemind would mess up placement of the WEEK special if invoked
with the "-m" option. This has been fixed.
- BUG FIX: TkRemind would sometimes fail with an error message when editing
a reminder; this is because it was interpreting months 08 and 09 as
illegal octal numbers. This has been fixed.
* VERSION 3.3 Patch 1 - 2020-03-20
- CHANGE: For overlapping multi-day events, issue a reminder for the
most *recent* event rather than the earliest event. NOTE
INCOMPATIBILITY: This is a behavior change!
- CHANGE: Do not convert 90-99 to 1990-1999 when parsing numbers to
recognize years. NOTE INCOMPATIBILITY: This is a behavior change!
- CHANGE: Revert change to -y option that included filename and line
number in the hash.
- CHANGE: Retain newlines (produced by %_) in JSON output.
- FIX: Document $FormWidth system variable
- FIX: Highlight today's date in "remind -c" output
- FIX: Eliminate compiler warnings on Ubuntu 18.04.
- IMPROVEMENT: Allow times to be specified either in 24-hour mode
(HH:MM or HH.MM) or AM/PM mode (HH:MMam; HH:MMpm, etc.)
- IMPROVEMENT: Allow DURATION to be specified as a time (1:30) or a
number of minutes (90).
- IMPROVEMENT: If terminal size can be determined, set $FormWidth to
terminal width - 8; if not, set $FormWidth to 72.
- MINOR IMPROVEMENT: Add the "ampm()" built-in function.
* Version 3.3 Patch 0 - 2020-01-31
- FIX: rem2ps: Add a %%PageBoundingBox: document structuring convention
- FIX: rem2ps: Ignore unknown SPECIAL-type reminders.
- IMPROVEMENT: In calendar mode ("-c" option), Remind automatically adjusts
the width of the calendar to fit the terminal window if standard output
is a TTY.
- IMPROVEMENT: Add JSON-based output with "remind -pp" and "remind -ppp"
The JSON-based intermediate format preserves a lot more information
about the original reminder, allowing back-ends more insight into
the intent of the reminder, the recurrence used, etc. See the documentation
in "man rem2ps"
- IMPROVEMENT: TkRemind can "reverse-engineer" reminders that it creates
using the additional information in the "remind -pp" format, so it
doesn't create or use ugly comment blocks to delimit the reminders
it creates.
- IMPROVEMENT: TkRemind: Add popup help to most buttons and controls.
- NEW FEATURE: Add support for $DefaultColor system variable, suggested
by Tim Chase.
- NEW FEATURE: The "-@[n][,m]" command-line option allows colored reminders
in Agenda Mode as well as in Calendar Mode. It also adds support for
terminal emulators that can handle the xterm 256-color escape sequences
as well as the true 24-bit color escape sequences.
- CHANGE: SPECIALs are now case-insensitive. Before, only SPECIAL COLOR
would work. Now you can use Special Color, special color, etc.
* Version 3.2 Patch 0 - 2020-01-03
- IMPROVEMENT: Add support for events spanning multiple days (with AT
and DURATION). Add trigeventstart() and trigeventduration()
introspection functions; see "MULTI-DAY EVENTS" in the man page.
- IMPROVEMENT: Add introspection functions trigback(), trigdelta(),
trigduration(), trigfrom(), trigpriority(), trigrep(),
trigscanfrom(), trigtimedelta(), trigtimerep(), and triguntil(). See
man page for details; thanks to Tim Chase for the suggestion.
- IMPROVEMENT: TkRemind: Use PNG images for the next month / previous
month buttons rather than -> and <-. Also use nice anti-aliased
moon phase images instead of ugly blocky bitmaps.
- CHANGE: Modify addition so that previously-illegal combinations
TIME + TIME, TIME + DATETIME and DATETIME + TIME are now allowed.
Also allow DATETIME - TIME. If t1 and t2 are expressions of type TIME
and dt is an expression of type DATETIME, then the following are now
equivalent (before, the expressions on the left-hand side would fail
with a "Type mismatch" error.)
t1 + t2 == t1 + coerce("INT", t2)
dt + t2 == dt + coerce("INT", t2)
t1 + dt == coerce("INT", t1) + dt
dt - t2 == dt - coerce("INT", t2)
- DOC FIX: Document previously-undocumented $MaxStringLen system variable
- DOC FIX: Various minor documentation fixes.
- BUG FIX: Specifying a DURATION without an AT clause results in an error.
Before, it would be accepted but not do anything useful.
- BUG FIX: Catch potential date overflow in slide() function
- BUG FIX: Fix compile error when compiling Romanian version; eliminate
compiler warning when compiling non-English versions.
- BUG FIX: TkRemind: Fix startup failure of TkRemind if options are at
default. :(
* Version 3.1 Patch 17 - 2019-11-15
- IMPROVEMENT: Add "Extra Remind Options" setting to TkRemind.
- IMPROVEMENT: Enable warning-free compilation even with gcc -Wextra flag.
- IMPROVEMENT: Warn if "OMIT a THROUGH b" has a > b.
- SYNTACTIC SUGAR: Make "SCANFROM -n" the same as "SCANFROM [today() - n]"
- BUG FIX: Don't dump expired reminders when dumping queue.
- BUG FIX: Fix failure when specifying a Jahrzeit in Adar. Fix
courtesy of Dov Feldstern
- BUG FIX: Fix various documentation errors and update man page.
* Version 3.1 Patch 16 - 2018-11-09
- IMPROVEMENT: Add patch from Stephen Morgan to calculate astronomical and
nautical twilight in addition to civil twilight.
- BUG FIX: The rem2html script correctly handles a SHADE special with only
one number (a grey level).
- IMPROVEMENT: Remind accepts DATETIME constants in ISO-8601 format and can
optionally be configured to output them that way too.
- MINOR IMPROVEMENT: TkRemind puts its hostname in the window title bar.
- MINOR IMPROVEMENT: TkRemind restarts the background remind daemon if
the .reminders file changes
- MINOR IMPROVEMENT: TkRemind has a "Queue" button that lets you see details
of upcoming queued reminders. This is mostly for debugging and the output
is not particularly readable.
- BUG FIX: The definitions form Yom Hazikaron and Yom Ha'atzmaut were not
quite right; they have been fixed.
- MINOR IMPROVEMENT: TkRemind centers popups over the main calendar
window rather than over the desktop background. This is better
behavior in multi-monitor setups.
- BUG FIX: In "remind -z0" mode, remind wakes up exactly on the minute instead
of sleeping for 60 seconds each time, which could cause it to fall behind.
* Version 3.1 Patch 15 - 2015-07-27
- BUG FIX: Fix a buffer overflow found by Alexander Keller
- BUG FIX: Fix a typo in this file: was 2014 instead of 2015.
- BUG FIX: Make parser reject an AT followed by more than one time.
- BUG FIX: Make parser reject repeated delta or *repeat values.
* Version 3.1 Patch 14 - 2015-04-24
- NEW FEATURE: Putting the line __EOF__ in a .rem file causes Remind
to treat it as end-of-file.
- IMPROVEMENT: Use better PNG images for moons in the HTML display
- CHANGE: Author name updated from "David" to "Dianne"
- BUG FIX: The "-n" command-line option should really run in "ADVANCE_MODE"
rather than "CAL_MODE" internally; otherwise, the substitution sequences
may be misinterpreted.
- BUG FIX: A typo in clearing out MD5 sum context has been fixed.
- BUG FIX: Typo in Spanish translation was fixed.
* Version 3.1 Patch 13 - 2013-03-22
- BUG FIX: Sunrise/Sunset calculations greatly improved thanks to John
McGowan. Accuracy should now be within a couple of minutes in most
- BUG FIX: Allow specification of margins as low as 0 points in rem2ps,
courtesy of Jonathan Kamens.
- BUG FIX: Permit compilation with gcc 2.95 (which doesn't allow variable
declarations after non-declaration statements in a block.)
- BUG FIX: Several minor documentation errors corrected courtesy of
Simon Ruderich.
- BUG FIX: Spurious test harness failure was fixed.
* Version 3.1 Patch 12 - 2012-01-23
- NEW FEATURE: Many substitution sequences "%x" have an alternate mode
denoted by "%*x". This alternate mode leaves out prepositions. For
example, in English "%i" might yield "on 01-25" while "%*i" yields only
- BUG FIX: The "dusk" and "dawn" calculations were completely wrong. They
have been fixed. Also, sunrise/sunset calculations have been tweaked,
so the results may be off by a minute or two compared to previous versions
of Remind.
* Version 3.1 Patch 11 - 2011-12-16
- BUG FIX: For some inexplicable reason, dawn was considered to happen when
the sun was 14 degrees below the horizon instead of the standard 6
degrees for Civil Dawn. This has been fixed.
- BUG FIXES: Clarified the man pages and fixed some typos.
- BUG FIX: Add THROUGH to the remind.vim syntax highlighting file.
- BUG FIX: Apply minor Debian cleanups reported by Kurt B. Kaiser.
* Version 3.1 Patch 10 - 2010-11-01
- NOTE: This is the 20th anniversary of Remind's first public release.
- ENHANCEMENT: Add the THROUGH keyword. You can omit blocks of dates with:
OMIT start THROUGH end
and the syntax REM start THROUGH end is equivalent to REM start *1 UNTIL end
- ENHANCEMENT: Add support for multibyte characters (eg, UTF-8) in calendar
output. Note that UTF-8 strings are still not supported in PostScript
- ENHANCEMENT: Add support for UTF-8 line-drawing characters in calendar
- ENHANCEMENT: You can have multiple TAG clauses in a REM statement.
- BUG FIX: Avoid spawning long-running background processes in "make test".
- BUG FIX: Don't declare variables in the middle of statements (old C
compilers choke.)
* Version 3.1 Patch 9 - 2010-06-20
- MAJOR ENHANCEMENT: New "purge mode" to delete expired reminders. See
the PURGE MODE section of the remind man page.
- ENHANCEMENT: Support DURATION in TkRemind. Thanks to Marek Marczykowski.
- BUG FIX: Don't change the order of PS and PSFILE reminders. Bug found
by John McGowan.
- BUG FIX: "REM 1990-01-01 SATISFY 1" would yield a spurious parse error
in earlier versions of Remind.
- BUG FIX: Yom HaShoah is moved to Thursday if it would normally fall on
a Friday. Thanks to Jonathan Kamens for pointing this out.
* Version 3.1 Patch 8 - 2010-03-09
- ENHANCEMENT: Include some useful scripts in contrib/
- ENHANCEMENT: Add the $T, $Td, $Tm, $Tw, $Ty, $U, $Ud, $Um, $Uw, $Uy
special variables to make reminder files less wordy. See man page
for details.
- MINOR ENHANCEMENT: Set an icon photo window manager resource on TkRemind.
- POLICY CHANGE: Discourage use of Remind on MS Windows or Apple Mac OS X.
- BUG FIX: Ignore msgprefix() and msgsuffix() on RUN-type reminders.
- BUG FIX: Adjust Remind and Rem2PS so that SHADE specials don't obliterate
earlier MOON specials.
- BUG FIX: Fix bug in SCHED calculations if Remind is started in the middle
of a SCHED interval.
* Version 3.1 Patch 7 - 2009-05-31
- ENHANCEMENT: Wherever you could write "day Mon year", the parser now
accepts "YYYY-MM-DD". This applies on the command-line and to the
REM and OMIT keywords. You can avoid wrapping date calculations in
the trigger() function in many cases.
- ENHANCEMENT: New slide() built-in function eases some complicated reminders.
* Version 3.1 Patch 6 - 2008-11-16
- MAJOR ENHANCEMENT: A new OMITFUNC clause gives you additional
control and flexibility over "omitted days" calculations. This is
useful when holidays influence the timing of events several days
later. See "COMPUTED LOCAL OMITS" in the man page.
- ENHANCEMENT: The new evaltrig() built-in function lets you evaluate triggers
from within an expression.
- ENHANCEMENT: The new weekno() built-in function returns the ISO 8601
week number of a date.
- ENHANCEMENT: The "WEEK" special lets you annotate calendar output with the
week number. The TkRemind, rem2ps and rem2html back-ends support WEEK.
- MINOR ENHANCEMENT: You can control whether timed reminders come before or
after non-timed reminders with the "-g" flag.
- BUG FIX: TkRemind did not work correctly if ~/.reminders was a directory.
- BUG FIX: TkRemind incorrectly invoked Remind with the "-a" flag when
showing today's reminders.
- BUG FIX: In certain cases, a trigger containing a day, month and
weekday would fail if it needed to cross a year boundary. This has
been fixed.
* Version 3.1 Patch 5 - 2008-04-15
- MAJOR ENHANCEMENT: If you supply a directory name on the command line
or for an INCLUDE command, then Remind reads all *.rem file in that
directory (in the order returned by "glob")
- ENHANCEMENT: The plain-text calendar ("-c") can draw lines using VT-100
line-drawing characters if invoked as "-cl"
- ENHANCEMENT: The plain-text calendar can approximate SPECIAL COLOR reminders
using VT-100 color escape sequences if invoked as "-cc". (You can combine
the colors and line-drawing characters with -clc or -ccl.)
- ENHANCEMENT: The "-t" option can take a numeric argument n. In this case,
all reminders are assumed to have a delta of +n. (Without the argument,
an infinite delta is assumed, as before.) If a numeric argument is given,
the new system variable $DeltaOffset is set to the argument.
- MINOR ENHANCEMENT: The "-i" command-line option can be used to define
a function as well as set a variable.
- MINOR ENHANCEMENT: String constants can have embedded quotes "Like \"this"
- MINOR ENHANCEMENT: tkremind works better on small screens like that of
the Eee-PC.
- BUG FIX: Minor fix to HTML output courtesy of Ian! Allen.
- BUG FIX: Parse error in calendar mode was fixed.
* Version 3.1 Patch 4 - 2008-02-03
- ENHANCEMENT: tkremind respects the "-b1" option and operates in 24-hour
clock mode if the option is supplied.
- ENHANCEMENT: tkremind has been tweaked to look better with Tcl/Tk 8.5.
- CLEANUP: Version is kept only in instead of two different
- CLEANUP: Added "const" qualifier to many places in the code that previously
lacked it.
- BUG FIX: A rare parsing error involving interaction between SATISFY and
SKIP has been fixed.
- BUG FIX: rem2html would output a horribly-wrong calendar for a 28-day
February starting on Sunday (such as February 2009.) This has been fixed.
- BUG FIX: The "-ivar=value" command-line option failed if Remind re-execed
itself because we overwrote argv[]. This has been fixed.
* Version 3.1 Patch 3 - 2007-10-15
- rem2html now uses CSS for a much better-looking calendar.
NOTE: rem2html was completely rewritten and some of the command-line
options have changed!
- If a reminder has a DURATION clause, then the starting and ending times
are output in calendar mode.
- DST rules in "defs.rem" were updated to reflect new US/Canadian DST rules.
- If a REM command cannot compute a trigger date, the SATISFY expression
is not evaluated. This helps avoid spurious error messages in some
* Version 3.1 Patch 2 - 2007-09-12
- tries to set defaults for location, paper size, etc from an
existing "remind" installation if it detects one.
- In queue mode, wake up once a minute and recalibrate sleep time.
This should make Remind work better on laptops that suspend or
hibernate. Note that "remind -q" does *not* handle date-rollover
well; it simply exits if it notices date rollover. "remind -z0"
(as used by tkremind) handles date rollover properly; it rereads the
reminder file and rebuilds the queue if it notices date rollover.
- tkremind: Added some key bindings to make navigation easier.
- tkremind: Made calendar boxes use space more efficiently.
- remind: The functionality of "rem" is now built into remind. If you
invoke remind as "rem", then it uses a default filename. The installer
sets up "rem" as a symbolic link to "remind".
- "remind -p" no longer sorts SPECIAL reminders before non-SPECIAL.
Backends supplied with Remind (rem2ps, rem2html and tkremind)
are known to work properly.
- "remind -p" no longer suppresses any AT-time associated with SPECIAL
Backends supplied with Remind (rem2ps, rem2html and tkremind)
are known to work properly.
- examples/defs.rem: A few corrections to Jewish holidays courtesy of
Art Werschulz.
- src/ Added install-nostripped target.
- SPECIAL COLOR now works more like MSG, including proper support for AT and
for the %" %" escape sequence.
- SPECIAL COLOR is queued correctly if it has an AT clause.
- Using the psshade() or psmoon() functions emits a warning on stderr. You
should use SPECIAL SHADE or SPECIAL MOON instead.
* Version 3.1 Patch 1 - 2007-08-23
- Added the "nonomitted" function that solves a number of
moving-reminder-in-response-to-holiday problems. The real-world
problems solved are the "moving-garbage-day" problem and the
"six-day-school-cycle" problem.
- A few minor performance improvements in response to profiling runs.
- Prevent compilation failure with gcc 2.95.
- Fix trailing "s" bug with -k option. This was fixed in Debian's release,
but the Debian maintainer never bothered to let me know.
- Removed obsolete scripts: kall, rem,, remind-all.csh
- Made "-n" output always use "/" as date separator for consistency with
"-p" and "-s".
- Moon PNG images are transparent. Output of moon phases in rem2html
improved slightly.
- Various man-page fixes.
* Version 3.1 Patch 0 - 2007-07-14
- Added the FROM clause. This lets you write reminders like:
REM Mon FROM 16 July 2007 UNTIL 13 Aug 2007 MSG Some Mondays...
- Remind now has a new datatype: A DATETIME object represents a date AND
a time (to the nearest minute). DATETIME constants are written
as '2007-09-01@14:33'. Various operators and functions have been
modified to do sensible things with DATETIMEs and several new DATETIME
functions have been added.
- The SPECIAL COLOR reminder type has been hacked to behave more like
a MSG type. It sorts properly and is emitted as a normal reminder
in non-calendar mode. Similarly, SPECIAL HTML sorts with -g as well.
- TkRemind can e-mail you reminders if you don't dismiss the popup window
after one minute. This is useful if you need to leave your workstation
but want reminders to "follow" you via e-mail.
- A new "-y" option to Remind generates tags for all reminders that lack
a TAG clause. This may be useful for conversion tools that want each
reminder to have a unique identifier.
- A new "tzconvert" function lets you convert datetimes between different
time zones. It's only as good as your C library, so test thoroughly
please! Based on a patch from Stefan Wehr.
- TkRemind sorts reminders by invoking Remind with the '-g' option.
- The time and date separator characters can be changed at runtime by
setting $TimeSep and $DateSep respectively.
- The simple calendar ('-s') option can be immediately followed by an 'a'.
This causes Remind to output reminders with deltas before the actual
trigger date. Based loosely on an idea from Frank Terbeck.
- Default date separator is now '-' instead of '/'
- trigdate() and trigtime() behave differently - they return the integer 0
if the last reminder could not be computed or did not have an AT clause
- Maximum length of variable names has been increased from 12 to 16 characters.
- Fixed a potential memory leak in queue.c
- Fixed compile error on Mac OS X.
- Fixed behaviour of "-sa" option so deltas correctly obey omitted days
and the scheduling function (if one is used).
- rem2ps would produce invalid PostScript in some rare cases
(eg, for February 2007). This has been fixed.
* Version 3.0 Patch 24 - 2005-11-19
- Permit the DURATION of a reminder to be as high as you like. Previously,
DURATIONs could be at most 23:59. Fix courtesy of Paul Pelzl.
- The "-n" flag can be usefully combined with "-s", "-p" and "-l" now.
Fix courtesy of Paul Pelzl.
- The "-k" command escapes all characters except those known to be
safe, rather than attempting to escape only characters thought to be
- Removed the crufty code that supported non-ANSI C compilers.
- Removed all support for non-UNIX/non-Linux systems.
- Fixed a bug in the tokenizer that could make Remind segfault. Fix courtesy
of Stan Tobias.
* Version 3.0 Patch 23 - 2005-04-14
- Added the COLOR special for putting colored reminders in the calendar.
Supported by the HTML, Tcl/Tk and PostScript back-ends.
- Many minor tweaks to tkremind.
- Added ability to specify paper size in inches or centimetres to rem2ps.
- Added the "-l" option to Remind. This outputs additional information
for back-end programs that use the "-p" output format. Currently
used only by the "tkremind" back-end.
- Fixed dates for Yom Hazikaron and Yom Ha'atzmaut if 5 Iyar falls on a
Saturday. (Hebrew calendar fix.)
- Added support for the Icelandic language, courtesy of Bj<EFBFBD>rn Dav<EFBFBD><EFBFBD>sson.
- Fixed parser error for unterminated date constant: '2005/01/01
* Version 3.0 Patch 22 - 2000-06-16
- Added option to have TkRemind display all of today's reminders in a text
box on startup. This option is on by default.
- Makefile in "www" directory allows you to add ".cgi" suffix to CGI scripts.
- Added option to completely delete a reminder from the reminder file in
the timed reminder popup dialog.
- Clarified build instructions.
- Fixed packing order in TkRemind so resizing window doesn't make control
buttons disappear.
- Fixed serious bug in which background queued reminders were ignored and
Remind simply exited. Doh! Sorry about that.
* Version 3.0 Patch 21 - 2000-03-15
- Updated copyright years and contact info.
- Changed GIF images to PNG to avoid patent problems.
- Added "cm2trem.tcl" to convert from CDE's "cm" calendar manager to Remind
format. It handles only an older version of "cm" data; there is a utility
available (under Solaris anyway) to convert newer files to the older "cm"
- Fixed the scripts in the "www" directory to install and work properly.
- Added "remind.vim" file for Vim syntax highlighting of Remind files,
thanks to Davide Alberani.
- Added "dusk" and "dawn" built-in functions, thanks to Ron Aaron.
- Files for no-longer-supported platforms (OS/2, amiga, MS-DOS) have been
moved to OBSOLETE subdirectory. They will disappear unless someone
wants to maintain them.
- Fixed typo which caused compilation failure on compilers without function
prototypes. Thanks to Ian Darwin for the patch.
- Fixed compilation problem on FreeBSD, IRIX, Tru64 and other UNIXes.
* Version 3.0 Patch 20 - 1999-04-12
- Remind is now distributed under the pure GPL. See the file WINDOWS for my
feelings about a Windows port, however.
- Made TkRemind adjust for really low-resolution displays if necessary.
- Added more print options to TkRemind, courtesy of Niels Kristian Bech Jensen.
- Added Spanish language support, courtesy of Rafa Couto.
- Rem2PS was passing specials like HTML, etc. in PostScript output.
YECH! Fix courtesty of Derek J. Decker.
- Fixed a typo in danish.h, courtesy of Niels Kristian Bech Jensen.
* Version 3.0 Patch 19 - 1998-05-09
- Added MOON and SHADE specials. These now work with PostScript,
HTML and Tcl/Tk front-ends. You can have cute moons and shaded
boxes on your printer, on your screen and in your web browser. :-)
- TkRemind overhauled -- you can now edit and delete reminders from
the GUI. You can actually reasonably use Remind without learning
the scripting language.
- TkRemind overhauled -- "server mode" added to Remind; TkRemind will
now pop up timed reminders.
- Updated romanian.h, courtesy Liviu Daia.
- Allowed object files to be built in different directory from
source files (thanks to Jonathan Kamens <jik@American.COM>
- Removed restriction against reading group-writable files. This
caused headaches on Red Hat Linux which uses an unusual user/group
- Remind would not compile if a non-English language was selected.
- Fixed free() of a NULL pointer.
- Made tkremind display a helpful error message if Remind's
"security feature" of not reading a group-writable file kicks
- Fixed bug which sometimes prevented reminder times from appearing
in a calendar display.
- Lots more silly little bugs squashed -- too many to go into in
* Version 3.0 Patch 18 - 1998-02-15
- Added the script "" which makes it trivial to compile
and install Remind under UNIX -- no need to edit Makefiles or
header files. A nice GUI installation dialog!
- Got rid of all fixed-size buffers. Hurray! Everything is dynamic --
no built-in limits on line length, token size, etc. This should
cure lots of SEGV's for weird files.
- Added TAG and DURATION clauses for communicating more information to
back-ends and eventually converting REMIND into a full-fledged
- Completely reworked the PS/PSFILE mechanism to use the more
general SPECIAL mechanism for customizing output in REMIND back-ends.
- Made parser _very_ forgiving -- the type of reminder now defaults
to MSG. This lets you have lines in the reminder file like this:
Feb 9, 1998 Meeting with Joe.
But I don't recommend abusing it. It's mostly to ease migration from
UNIX calendar(1) files.
- Documented the "remind -p" format.
- Made Remind communicate day and month names to back-ends so they
can automatically take on the language Remind was compiled with.
- Directory structure totally reorganized. Remind now uses an autoconf
"configure" script which should make life very pleasant for UNIX
- Made Rem2HTML work properly if more than one month's worth of calendar
data was produced. Rem2HTML also escapes any special HTML characters.
However, it recognizes a "SPECIAL HTML" type of reminder which lets
you put arbitrary HTML code in your calendar entries. See www/rem2html
for details.
- Added the "-a" option to Rem2HTML to complement the "-p" option. Also
made Rem2HTML print a usage message if input is coming from a terminal.
- Fixed sunset(), sunrise() and minsfromutc() functions which were broken
by 3.0.17. (In 3.0.17, they did not account for daylight saving time.)
- Updated "finnish.h" to include proper URL and translation of all
error messages.
- The reorganization and use of "configure" probably breaks Remind
installation on non-UNIX platforms. Sorry. I can't fix it until
I hear back from non-UNIX maintainers.
- Getting rid of fixed-sized buffers meant lots of changes to code.
No doubt, I missed a few regression tests.
* Version 3.0 Patch 17 - 1997-09-07
- Made REMIND accept date specs like "Jan 6, 1998" -- the comma is
ignored. This was suggested by John Conover <>.
You can even do "REM 27, Aug, 1998, msg bar". (But I don't know why
you'd want to.)
- Added www/rem2html, a Perl script which converts the output of
`remind -p ...' to an HTML table. The script was contributed by
Don Schwarz <>
- New security features: Because of the risks of statically-allocated
buffers, REMIND now refuses to run if it is installed set-uid or set-gid.
If REMIND is run as root, it refuses to read files not owned by root.
It also won't open group- or world-writable files, no matter who is
running it. Finally, if you read a file you don't own, REMIND disables
RUN and shell(). REMIND doesn't do these security checks on stdin,
though, so be careful if you run it as root in a script.
NOTE: REMIND doesn't do the world- and group-writable checks
on devices, FIFOs, etc. Otherwise "remind /dev/null" fails...
- Increased sizes of some statically-allocated buffers. This doesn't
really fix the problem, but makes it more manageable.
- Using the "-u" option now implies the "-r" option. This is a
security feature.
- Added romanian.h to the manifest. Sorry.
- CalcMinsFromUTC was failing if time_t was unsigned. I now use
difftime(), but not all systems have it. Also, defs.rem was rearranged
so PostScript stuff works better, and new target "emxomf" was added to
makefile.os2 which uses OMF linking and a dynamically-linked C
library. All three of these fixes are courtesy of Christopher
J. Madsen <>. Thanks, Christopher.
* Version 3.0 Patch 16 - 1997-02-11
- Bundled scripts for making a nice WWW calendar server. See the
"www" subdirectory in the release.
- Added support for the Romanian language, courtesy of Liviu Daia.
- Changed sunrise() and sunset() as follows: If the sun never rises,
sunrise() returns 1440 and sunset() returns 0. In this case,
sunrise()-sunset() returns the length of the dark period of the
day, in minutes. If the sun never sets, sunrise() returns 0 and
sunset() returns 1440, and sunset()-sunrise() returns the length
of the light period of the day, in minutes. Thanks to Michael Salmon
for explaining the utility of this. See the file "defs.rem" for the
functions _light_len and _dark_len which return the length in minutes
of the light and dark period of the day, respectively.
- If you used the "-g" option, then no background reminders were
ever issued. DOH! Thanks to Greg Badros <>
for pointing this out.
- Fixed a problem under Solaris 2.5 whereby rem2ps was skipping some
latin1 characters which it interpreted as white space.
* Version 3.0 Patch 15 - 1996-10-27
- The tar file now unpacks into a Remind subdirectory rather than into
the current working directory.
- I no longer support Remind under DOS. I don't think I've done anything
to stop it from working under DOS, but will no longer compile and test
it under DOS, and can't help you if you get stuck. Sorry -- I no longer
have a DOS machine.
- Changed psshade() to accept 1 or 3 arguments for colored shading in
PostScript calendar mode.
- Added a Print dialog to tkremind.
- Added support for Brazilian Portuguese courtesy of Marco Paganini
- Added support for Italian courtesy of Valerio Aimale
- Fixed confusing error in rem2ps help messages.
- Fixed bug in TkRemind which caused a crash if the "-m" option was used
for a month beginning on Sunday. Doh!!!
* Version 3.0 Patch 14 - 1996-05-25
- Remind is now distributed under an _AMENDED_ version of the Gnu
General Public License. These amendments are listed in the
file COPYRIGHT. The amendments were made for personal reasons;
please don't ask me to explain them. They probably don't affect
you, anyway.
- Added an X-Windows front-end to Remind. To use it, you must be
running under X-Windows on UNIX, and have the "wish" tcl/tk
interpreter, version 7.4 of tcl and 4.0 of tk. The front-end is
called "tkremind".
- Added the WARN keyword for precise advance notice. You can now
have advance warning 5, 3, 1 and 0 days in advance (for example.)
The WARN keyword operates similarly to the SCHED keyword in that it
calls a user-defined function to obtain the advance warning sequence.
- Added support for QDOS/SMSQ on the Sinclair QL microcomputer,
courtesy of Robert H. Klein <>
- Added support for AmigaDOS / SAS/C, courtesy of Martin Hohl
<>. As before, I CANNOT TEST NOR
SUPPORT THIS VERSION, but will rely on feedback from others.
- Removed the "-n" option from Rem2PS. Instead, if you want the
PostScript calendar to start on a Monday, supply the "-m" option
to Remind. It was repugnant to have two options to two programs
to accomplish one thing.
- The "hebdate" built-in function worked incorrectly with 5 arguments.
The bug was pointed out by Hershel Safer <>
- This would hang up REMIND: REM Mon 31 Feb MSG Foo
and this would fail quietly: REM Mon 31 Feb 1996 MSG Foo
Both have been fixed and now report bad date specifications.
- Remind now compiles without complaint under gcc -ansi -Wall -pedantic
(on my Linux system, anyway!)
- I had problems building the DOS version with Turbo C. I have access
only to ancient versions of Turbo C and Microsoft C. Remind built
fine with Microsoft C, but the TC version hung up. I am not too
interested in maintaining the DOS version, so when the MSC compiler
no longer works, I will drop DOS support. Please not that I will
_not_ support MS Windows, and in fact do not allow Remind to run
under Windows (see COPYRIGHT).
* Version 3.0 Patch 13 - 1994-05-06
- Added extra parameters to the "psmoon" built-in function so you
can annotate the PostScript moon icons.
- Added a command-line "time" argument to Remind for testing Remind
scripts with specific system times. Also added the realnow() function
which has the same relationship to now() as realtoday() has to today().
(See the man page!)
- Modified Rem2PS so it prints progress messages to stderr if
'-v' command-line argument is used.
- In the top of the 'finnish.h' file, added a note about
Mikko Silvonen's file of Finnish holidays.
- Fixed a bug in rem2ps which sometimes caused incorrect PostScript if
the -e and -m options were used. Thanks to Michael Neuhauser for
reporting the bug and providing a fix.
- Made the '-k' option escape shell characters in the message to make it
- Fixed a segmentation violation which resulted if not all
- Removed the prototype for DestroyValue, which is now a macro. I'm
amazed that very few compilers complained about this one!
- Updated the copyright notices everywhere.
* Version 3.0 Patch 12 - 1994-02-01
- Added support for the Danish language, courtesy of Mogens Lynnerup.
- Added support for the Polish language, courtesy of Jerzy Sobczyk.
- Made the Makefile more portable, thanks to Jim Budler.
- Removed some compiler warnings under Linux, thanks to Francois Pinard.
- Tidied the man page a bit; added a small bibliography.
- Fixed a problem with the '-k' option which resulted in a newline being
placed after the message text. This was giving sh(1) heartburn...
* Version 3.0 Patch 11 - 1993-11-26
- Added release notes to README.UNIX and README.OS2 describing one
way to make pop-up alarms under X-Windows and Presentation Manager.
- Added the $DefaultPrio system variable
- Improved OS/2 support, thanks to Darrel Hankerson, Russ Herman
and Norman Walsh.
- Made the pushing and popping of operators and operands during
expression evaluation in-line code instead of function calls. Did the
same for DestroyValue. I'm not sure if this was a good idea -- on the
Sparc using gcc, this slowed things down... go figure.
- Fixed a potential memory leak in the char() function.
- Made the TRIGGER() built-in function return its answer in English even
for the foreign-language versions -- this was required for compilers which
are not 8-bit clean, and for languages with accented letters.
- Made expression evaluation slightly faster by eliminating some unnecessary
copying of string values.
- Corrected some non-portable definitions of the macro UPPER(c)
- Fixed typos in french.h
* Version 3.0 Patch 10
- OS/2 support is now much better, thanks to Russ Herman. The Borland
C compiler under OS/2 and MS-DOS is supported.
- Added the SCHED keyword for precise control of scheduling of timed
reminders -- it's really quite nifty!
- Modified the trigger() function to take up to three arguments -- in
addition to a date, you can specify a time and a flag specifying that
the trigger should be converted from UTC to local time.
- Added $SortByDate, $SortByTime and $SortByPrio system variables.
- Added test suites for MS-DOS and OS/2, courtesy of Russ Herman.
- In PostScript output, the month and year are output in the %%Page: comments.
Makes it nicer to view multi-month calendars with previewers (eg,
- Added the PRIORITY keyword for more control of sort order of reminders.
Based on a suggestion by George M. Sipe.
- Added the msgprefix() and msgsuffix() evaluations around MSG-type
reminders for doing fancy things with reminders of different priorities.
Also added calprefix() and calsuffix() for doing the same thing in
calendar mode.
- Enabled the -g option during calendar mode as well as regular mode.
- Fixed minor bugs in the LocalToUTC and UTCToLocal functions.
- "remind -c -de file" used to cause a segmentation violation. Whoops...
- Some files which should have included <string.h> didn't include it - these
are now fixed.
- Fixed the moondate() and moontime() functions, which used to be incorrect
after November 1994.
- Fixed the Finnish language support which was missing a few newlines.
* Version 3.0 Patch 9 - 1993-10-04
- Remind is now too big to compile under the "small" model in
MS-DOS. You must recompile everything under the "medium" model.
- Functions moonphase(), moondate() and moontime() were added for dealing
with phases of the moon. The code was snarfed from "moontool" by
John Walker - see the file "moon.c" for detailed acknowledgement. Also
added psmoon() for putting little moon symbols on the PostScript calendar.
- Added some more examples to defs.rem - notably, support for ANSI
terminal color-changing escape sequences, thanks to Gail Gurman.
- Modified both Remind and Rem2PS so that calendars can start on Sunday or
Monday, depending on your preference. Unfortunately, the command-line
options are different -- for Remind, it's '-m' and for Rem2PS it's '-n'
because '-m' was already in use. Based on a suggestion by John Plate
and a patch sent by Mikko Silvonen.
- The Finnish language support is better - now, all usage and error
messages are in Finnish. In addition, the Finnish language module
supports the IBM extended character set as well as ISOLATIN1.
Thanks to Mikko Silvonen.
- Modified Rem2PS to allow more control over the placement of the small
calendars, thanks to a suggestion by Frank Vance. Also added option
to control the calendar title (e.g., "September 1993") independently
of day-of-week headings.
- Added the psshade() function to make it easier to shade PostScript
- Allowed a repeat parameter '*num' to be supplied on command line so
a 'preview' of many days' worth of reminders can be obtained easily.
- Added the $Location system variable.
- Allowed an expression to be supplied to EXIT to return an exit
- Added the FLUSH command.
- Fixed the MSF-type reminder to fill paragraphs more intelligently.
It puts double spaces after '!', '.' and '?', and can handle quotes,
brackets, etc. after periods, etc. These characters can be specified
with the $EndSent and $EndSentIg system variables. Also modified it
so that newlines in the body start new paragraphs, rather than being
swallowed as white-space.
* Version 3.0 Patch 8 - 1993-09-08
- Changed the code to more fully support foreign languages - error
messages and usage instructions can now be changed. All changes can
be localized in the appropriate language.h files.
- Added support for the French language, courtesy of Laurent Duperval.
Note that the French support is more complete than for other languages -
French usage instructions and error messages are supported.
- Added support for the Norwegian language, courtesy of Trygve Randen.
- Added code for the functions timelocal() and timegm(), courtesy of
Lucio de Re. This is for those very few machines whose libraries
include neither those functions nor mktime().
- Added the filedate() function.
- Allowed the filename to be specified as "-" to cause Remind to take
its input from the standard input stream.
- Added the "MSF" keyword to cause reminders to be formatted automatically.
This keyword paragraph-fills reminder text following user specifications.
Based on a suggestion by Ken McGlothlen.
- Added the "-e" option to Rem2PS, allowing the PostScript calendar
to fill the entire page. Thanks to Arthur G. Yaffe.
- Corrected the Hebrew holidays Tzom Gedalia, Tzom Tevet, Ta'anit
Esther, Tzom Tamuz and Tisha B'Av so they won't occur on Saturday.
Corrections made following the algorithm in "Calendrical Calculations"
by Nachum Dershowitz and Edward M. Reingold.
- Changed the dutch.h language file as suggested by Erik-Jan Vens. Made
month and day names lower-case; corrected the spelling of oktober.
- Changed HashVal in var.c to use unsigned arithmetic - it's conceivable
that a machine with signed chars could cause problems otherwise.
- Changed the LONG_* macros in config.h to LON_* to avoid conflicts
with names defined by ANSI C. Thanks to David W. Sanderson.
- Allowed the built-in function char() to accept numbers in the
range [-128, 255] (but not 0) so that char(asc(s)) works even
on machines with signed char types.
* Version 3.0 Patch 7 - 1993-07-22
- Added "system variables" to allow the user more control over
Remind operation, and to allow queries about the command-line
options from within a reminder script. They allow for specification
of longitude and latitude for use by sunrise/sunset calculations.
- Added sunrise(), sunset(), isdst() and minsfromutc() functions -
these are needed to support sunrise and sunset calculations.
- Allowed the MSG, RUN, CAL, PS and PSF keywords to be used in the
same reminder as the SATISFY keyword. This makes many complex
reminders more compact.
- Added the filedir() function to enable Remind's include to emulate
CPP's #include more closely.
- Allowed non-root users to use the "-u" option. It only affects
the "SHELL", "HOME", "USER" and "LOGNAME" environment variables -
it doesn't change the effective uid and gid when run by non-root.
- Added built-in function "easterdate" to calculate date of Easter
Sunday - function courtesy of Michael Salmon.
- Improved the Jewish holiday reminders in "defs.rem" to give advance
notice of holidays.
- Allowed the "simple calendar" option (-s) to specify a number of
weeks as well as a number of months, in the same fashion as the
-c option. Thanks to Dave Rickel.
- Corrected the behaviour of "hebdate" for jahrzeits; added an additional
parameter to specify the behaviour of dates in Adar during leap years.
- Changed kall so that "kall sh" doesn't commit suicide - patch courtesy
of Michael Salmon.
* Version 3.0 Patch 6 - 1993-05-05
- Added the PS- and PSFILE-type reminders - these allow you to include
arbitrary PostScript code in your PostScript calendars. Useful for
shading, drawing graphics on calendars, etc. Use with care, though!
- Added the "-ivar=val" option to initialize variables from the command
line. Changed the remind-all.* shell scripts to predefine the variable
- Fixed a bug in the hebmon(), hebday() and hebyear() functions - there
was an off-by-one error. Sorry!
- Fixed a bug in the hebdate() function which resulted in infinite loops
for dates after about 2075
- Fixed a bug in the -u option which sometimes caused a core dump
(embarrassed grin!) The fix is due to Tina Hoeltig. Thanks, Tina!
* Version 3.0 Patch 5 - 1993-04-27
- Added support for the Hebrew calendar - can now specify Jewish holidays
easily. Thanks to Amos Shapir for explaining the Hebrew calendar, and
to Danny Sadinoff, from whose HEBCAL program I got some inspiration.
Also thanks to David W. Tamkin and Frank Yellin for explaining the rules
for jahrzeits.
- Allowed the default page size used by Rem2PS to be selected in config.h
- Edited the defs.rem file to contain Jewish holidays. Cleaned up some
of the examples and improved the layout - thanks to George M. Sipe.
- Modified the IIF function to be more general
- Updated finnish.h to support the ISO 8859-1 character set, courtesy
of Mikko Silvonen.
- Changed the date conversion routines to greatly speed up conversion from
Julian to yyyy/mm/dd form.
- Fixed a bug in which Remind complained incorrectly about a missing quote
in the command SET foo ""
- Fixed bugs in dosubst.c which caused the %o, %1 and %@ substitutions
to be incorrect
- Fixed a bug in the man page - thanks to Ed Oskiewicz.
* Version 3.0 Patch 4 - 1993-03-08
- Added the -g option - this sorts reminders by date/time before
issuing them. (You can see I'm running out of letters to
name options!) This feature was suggested by George M. Sipe,
Paul D. Smith, and Francois Pinard.
- Added the "args()" and "dosubst()" built-in functions - see the
man page for details.
- Added more support for the ISO 8859-1 character set, and
modified the german.h file to take advantage of this, thanks
to Robert Joop.
- Allowed any character to be used as date and time separator
characters (not just "/-:.")
- Added support for the Dutch and Finnish languages, thanks to
Willem Kasdorp and Mikko Silvonen. (Anyone care to contribute
French? Italian? Spanish?)
- Made Remind issue a warning if you try to redefine a built-in
function. This warning is disabled in 'Hush' mode.
- Added the SCANFROM clause to the REM command. This allows reasonably
safe moveable OMITs such as the Labour Day example in the manual.
- Added more examples to the defs.rem file, and cleaned up some old
examples. Note that there are now safe moveable holidays for most
U.S. holidays provided in the defs.rem file.
- Added the '-k' option, which allows MSG-type reminders to be passed
to any system command. (Idea and patch courtesy of Philipp Slusallek.)
- Allowed selection of ':' or '.' as time separator characters at
- Edited the COPYRIGHT file to clarify the rules. Please read them.
- Removed hard-coding of "am" and "pm" and placed them in language-specific
header files as #defines L_AM and L_PM
- Fixed a bug in the FindToken() routine which had, through sheer luck,
never been activated until the SCANFROM clause was added!
- Fixed the UNTIL clause to check for a valid expiry date.
- Removed identifiers in the C source beginning with "_" to conform
to ANSI practice.
- Fixed a bug in the -u option which resulted in environment variables
SHELL and USER not being set correctly. Also made -u set the LOGNAME
environment variable.
- Fixed a couple of typos in the man page; added LDFLAGS to the
Makefile. (Thanks to Dave Wolfe.)
- Put my new mailing address in the README files.
* Version 3.0 Patch 3 - 1993-02-21
- Corrected bugs in Remind and Rem2PS. No new features added. You
should NOT use patch level 2 - either stick to 3.0.1 or upgrade to
* Version 3.0 Patch 2 - 1993-02-04
- Added the -u option to Remind so that root can run it as any user.
This simplifies the remind-all scripts, and makes them more efficient.
If you are worried that this option is a security hole, you can
disable it in config.h
- Changed the RUN command so that RUN OFF can be used anywhere, even
though RUN ON only works in the top-level file. This eases the
management of global files which may want to switch RUN OFF.
- Added ISO encoding (ISO 8859-1) to the PostScript output, courtesy of
Michael Salmon. This can be selected with the '-i' option in rem2ps.
- Added support for the '-' date separator as well as the '/' separator.
- Added support for languages other than English. Note that this support
is not complete - error messages are still in English. The idea and
German translation came from Wolfgang Thronicke.
- Changed the -w option to include the "padding" and "spacing" options.
NOTE INCOMPATIBILITY: In the previous patch level, creating a weekly
calendar using the -c+n option left no blank lines between the day
number and the first reminder entry. This has been changed so that one
blank line is left. To revert to the old behaviour, use the "-w,,0"
- Added the -o option to Rem2ps. This allows you to specify the margins
when producing a PostScript calendar.
- Updated the copyright notices in all the files. :-)
- Added 'make clobber' and 'make test' targets to the Unix makefile.
- Corrected typos in WHATSNEW.30 and remind.1 man page. Thanks to
Dave Wolfe <>
- Changed Remind so that supplying the -a option causes timed reminders
not to be placed into the calendar in calendar mode.
* Version 3.0 Patch 1 - 1992-12-18
- Wrote the Rem2ps program to produce PostScript calendars
- Added an 'install' target to the Makefile
- Fixed a bug which allowed the shell() function to execute in timed
reminders which were queued with RUN disabled.
- Added support for OS/2, courtesy of DARREL HANKERSON
- In expressions, can now specify literal dates as 'yyyy/mm/dd' rather than
using the date() function.
- Fixed all the source files to include "config.h" first.
- Changed the way triggers are calculated so that trigger dates are
always valid if year, month and day are specified, and there is no
UNTIL clause. See MAN page section "DETAILS ABOUT TRIGVALID()."
- Defined _POSIX_SOURCE so Remind will compile on SGI workstations (and
be more portable... I hope.)
- Fixed some rather brain-dead definitions of UPPER and LOWER, as pointed
out by <>
- Added more details to the Man page concerning how triggers are computed,
and added warnings about computing OMIT dates.
- Added the file defs.rem which contains examples of useful definitions and
- Changed the script test-rem to be a sh script instead of csh for improved
- Fixed up the README.* files to reflect the changes.
- Re-formatted the WHATSNEW.30 file.
* Version 3.0 - 1992-11-09
- Total rewrite from previous versions
- Added variables, expressions, flow-control statements, daemon mode
- Added "expression pasting"
- Added CAL-type reminders
- Added the SATISFY clause
- Improved debugging of reminder scripts
- Took out the "purge" option - it is in general too difficult to tell when
a reminder has expired for good, so now it's up to you to do this
by hand.
- Fixed a lurking bug in trigger date calculation which, amazingly, had not
been caught in the couple of years that Remind has been out!
* Version 2.3 Patch 5 - 1992-04-11
- Added the "c+n" option for printing a calendar by
weeks instead of months, courtesy Dennis Cottel (
* Version 2.3 Patch 4 - 1991-11-06
- Made the init.c file nicer. Made the Makefile
prettier. Added "make test", "make tar" and "make shar" Makefile targets.
* Version 2.3 Patch 3 - 1991-09-11
- Added a command-line option for Remind to process
queued reminders in the foreground. This makes automatic termination
of Remind processes from within X-Windows and Sunview easier.
* Version 2.3 Patch 2 - 1991-07-19
- Fixed up a problem with timed reminders which resulted
in cursor not starting from left side of screen on some systems.
- Fixed the SIGINT handler for SYSV systems - this was interrupting the
sleep(2) system call.
- Closed stdin and stdout if remind was part of a pipe - this prevents other
sections of the pipe from hanging as remind puts itself in the background.
- Added the "-h" (Hush mode) option
- Added the "%#" and "%@" modifiers for the current time.
- Made the Makefile more portable
* Version 2.3 Patch 1 - 1991-03-08
- Added the "-t" command-line option to get Remind
to trigger all non-expired reminders.
- Added Turbo C support courtesy of Rhys Weatherly
- Added the "RUN ON" and "RUN OFF" commands for a secure interface with
the Elm mail system.
- Added the "rem" shell script for running Remind with a default script.
- Added manual pages for "kall" and "rem".
* Version 2.3 - 1991-02-20
- Added the UNTIL keyword for forcing reminders to expire.
- Added the "++" form of 'back' and the "--" form of 'delta' for
ignoring OMIT information.
keywords for isolating personal or peculiar reminders from the global
OMIT context.
- Speeded up the parsing of tokens.
- Changed the source to recognize and exploit ANSI-C compilers which
accept function prototypes.
- Added the "-n" option to output the next occurrence of each reminder
in SimpleCalendar format
- Modified the calendar and SimpleCalendar formats so that the % escape
substitutions ARE performed.
* Version 2.2 - Patch 5 - 1990-12-03
- Added the BEFORE, AFTER and SKIP tokens to make the
handling of holidays more sensible. Also corrected a few more bugs.
* Version 2.2 - Patch 3 - 1990-11-28
- Added the MSG or RUN tokens in an OMIT command; also
allowed RUN-type reminders to be explicitly included in the calendar by
using the %" escape sequence.
* Version 2.2 - 1990-11-16
- Added the AT keyword, the timed reminders daemon, and the
calendar facility.
* Version 2.1 - 1990-11-06
- Added the "repeat" token for repeating reminders with a period
other than 7 days. Also fixed some bugs from version 2.0
* Version 2.0 - 1990-11-01
- first public release. Included advanced date specifications,
character substitution, and the RUN keyword.
* Version 1.0
- never publicly released.