REMIND(1) VERSION 06.02.07 REMIND(1) (NAME) remind - (THE BOOK OF REMIND) Remind . Remind << >> (The Book of Remind) Remind : https://dianne.skoll.ca/projects/remind (SYNOPSIS) remind [options] filename [date] [*rep] [time] (DESCRIPTION) Remind filename . . . filename '-' Remind . Remind GNU Readline Readline . filename Remind "*.rem" ( !) . (locale) "*.rem" . Remind "__EOF__" ( ). __EOF__ . (MODES OF OPERATION) Remind : Agenda Mode (Agenda mode) . Remind . (fork) . Calendar Mode Remind . Daemon Mode Remind . TkRemind Remind . Purge Mode Remind . (OPTIONS) Remind . " (REMINDER FILES)" . -n -n Remind . sort(1) . -n -g -o . -j[n] Remind "" (purge) . PURGE MODE . -r -r RUN shell() . -c[flags]n -c Remind . n n . . -o . n ( ) . : '+' n . 'a' Remind delta . Remind %"...%" ( %" ). 'l' Remind VT100 . VT100 . 'u' 'l' Remind UNICODE . UTF-8 . <<>> . 'z' $TerminalHyperlinks 1 . "SYSTEM VARIABLES" . 'c' Remind VT100 SPECIAL COLOR . -@[n][,m][,b] . UTF-8 Remind -c << >> . $SuppressLRM "SYSTEM VARIABLES" . -@[n][,m][,b] Remind SPECIAL COLOR SHADE VT100 . ( ) VT100 . "" "" (bright) . : n=0 Remind VT100 . n=1 xterm . n=2 (true color) xterm . m m=0 Remind Remind . m=1 Remind . m 2 Remind . t Remind . Remind . m ( m t ). b b=0 Remind SPECIAL SHADE () b=1 Remind SPECIAL SHADE VT100 . SHADE (n=1) (n=2) . m=0 m=1 . -wcol[,pad[,spc[,spc2]]]] -w (padding) (spacing) . Col . col 0 . col t Remind /dev/tty . less : remind -c -wt .reminders | less col $FormWidth col - 8 . "SYSTEM VARIABLES" . Pad << >> (padding) . . pad . Spc . spc2 0 1 . 1 . col pad spc . (space) . -s[a]n -s -c . " " . n "+" . -o . s a Remind delta . -p[a][p][p][q][+]n -p -s Rem2PS ( PostScript ) . n "+" . rem2pdf rem2html . JSON -ppp. -p rem2ps(1) . p a Remind delta . p p Remind " " JSON . rem2ps(1) . p -ppp Remind JSON rem2ps(1) . q %"...%" . INFO -pp -ppp . -p INFO . -p -pp -ppp -o . -pp -ppp -l . -l -l -p Remind rem2ps . . -m -m -c -p . ( .) -v -v Remind (verbose) . Remind $RunOff . -o -o Remind ONCE . -c -n -p -s *n ONCE . -t -t Remind delta (trigger) . -tn -t n Remind REM ++n . -tz -t z Remind REM REM . +n ++n . -tt[n] -tt Remind n . -tt n . -h -h ( "hush...") . . -a -a Remind . Remind . -a Remind . ( -a -a Remind .) -q -q Remind . -f -f Remind . -e -e ( ) . -dchars -d . chars : e (Echo) x t (trigger date) v l f p POP-OMIT-CONTEXT POP-VARS POP- FUNCS PUSH . s . Remind . h (hash table) . u Remind SET . u . : DEBUG +u SET a 1 IFTRIG Wed MSG a = [a] ENDIF a . n Remind <<>> (non- constant) q TRANSLATE _() %(...) . -g[a|d[a|d[a|d[a|d]]]] . -g Remind . a d ( ) . "SORTING REMINDERS" . -n -g . -b[n] . N 0 2 0. 0 ( / ) . 1 2 . -x[n] SATISFY REM . 1000 . -kcmd MSG cmd . '%s' . . -r RUN OFF . X xmessage . : remind '-kxmessage %s &' ... MSG xmessage . : xmessage . . -k . -k . . notify-send : remind '-k:notify-send %s &' ... -kcmd1 -k:cmd2 . -z[n] Runs Remind in "daemon mode". If n is supplied, it specifies how often (in minutes) Remind should wake up to check if the reminder script has been changed. N defaults to 1, and can range from 1 to 60. Note that the use of the -z option also enables the -f option. Remind inotify(7) Remind . -zj Remind server mode ( ) . tkremind tkremind(1) . -z0 JSON (ad-hoc) . -uname Remind uid gid name . uid gid HOME SHELL USER . LOGNAME . . 3.00.17 Remind -u -r -- RUN shell() . name + RUN shell() . -uwhatever whatever RUN -u+whatever whatever RUN . (non-root) -u . (effective uid or gid) . -+username Remind username . Remind RUN shell() . username . -+ . -y Remind TAG (tag) . -ivar=expr var expr var . Expr Remind . "INITIALIZING VARIABLES ON THE COMMAND LINE" . =expr var 0 . -ivar -ivar=0 . -ifunc(args)=definition . date [day] month [year] day month year ( ) . day . . month . date Remind "" . . time "" Remind . time -q -z . time ( 13:20) "AM/PM" ( 1:20pm) . YYYY-MM- DD YYYY/MM/DD . : YYYY-MM-DD@HH:MM. "@" (trigger) . . Remind "@" . : remind .reminders '@13 SATISFY [$Tw == 5]' "@" Remind . : remind .reminders 2026-07-01 '@13 SATISFY [$Tw == 5]' "" Remind 2026-11-13 2026-07-01 . repeat *rep . Remind rep . . "Repeated Execution" "CALENDAR MODE" . (LONG OPTIONS) Remind : --version --version Remind . --hide-completed-todos Remind TODO . TODO . --only-todos TODO . --only-events TODO . --json (Agenda Mode) JSON . --json ( -g) ( -q) . "AGENDA MODE JSON OUTPUT" . --json . JSON RUN RUN JSON . --print-errs --print-errs Remind . TRANSLATE . TRANSLATE Remind . TRANSLATE GENERATE "THE TRANSLATION TABLE" . printf "%s" "%d" Remind . --print-config-cmd Remind ./configure Remind . Remind : eval `remind --print-config-cmd` Remind. ( remind --print-config-cmd .) --print-tokens --print-tokens Remind . (syntax-highlighting) . . --max-execution-time=n ( ) n . Remind . n Remind . n . Remind . Remind . --max-expr-complexity=n n . . 10000000 ( ) . . Remind . --test --test "make test" . . --flush --flush Remind . . (REMINDER FILES) Remind . Remind . : REM Mar 31 MSG International Transgender Day of Visibility : REM [date(thisyear, 1, 1) + 180] ++5 OMIT \ sat sun BEFORE MSG [ord(thisyear-1980)] payment due %b! . . Remind . Remind . Remind '#' ';' . Remind C ( '#' ) . Remind . : # This is a comment \ This line is part of the comment because of line continuation \ and so on. REM MSG This line is not ignored (no \ above) Remind . REM (THE REM COMMAND) Remind REM . . : REM [ONCE] [date_spec] [back] [delta] [repeat] [TODO] [MAX- OVERDUE n] [COMPLETE-THROUGH complete_date] [PRIORITY prio] [SKIP | BEFORE | AFTER] [OMIT omit_list] [ADDOMIT] [NOQUEUE] [OMITFUNC omit_function] [AT time [tdelta] [trepeat]] [SCHED sched_function] [WARN warn_function] [UNTIL expiry_date | THROUGH last_date] [SCANFROM scan_date | FROM start_date] [DURATION duration] [TAG tag] [TZ timezone] [INFO "info_string"] MSG | MSF | RUN | CAL | SATISFY | SPECIAL special | PS | PSFILE body REM body MSG RUN CAL PS PSFILE SATISFY . REM MSG MSF RUN CAL SATISFY (trigger) . Remind REM Remind . . REM . MSG MSF RUN CAL SPECIAL PS PSFILE (type) . (SATISFY .) MSG body ( <> ) . -k MSG . -c -s -p -n -k . Remind MSG . . : REM 6 January Dianne's Birthday <> . MSF MSG . MSF - $FirstIndent $SubsIndent $FormWidth . <> . MSF - $EndSent $EndSentIg . ( %_ ) $FirstIndent . . RUN body . CAL Remind -c -s -p . Remind /dev/null . PS PSFILE PostScript PostScript . ( ()psshade ) . PostScript . PS PSFILE Remind -p . <> . SPECIAL << >> (out-of-band) Remind . . . Rem2PS SPECIAL PostScript PS SPECIAL PSFile PSFILE . SPECIAL . SPECIAL . (DATE SPECIFICATIONS) date_spec . : day ( ) month ( ) year () weekday. Month weekday . . date_spec : day: 1, 22, 31, 14, 3 month: JANUARY, feb, March, ApR, may, Aug year: 1990, 1993, 2030. 1990 2075 . weekday: Monday, tue, Wed, THU, Friday, saturday, sundAy weekday date_spec . (INTERPRETATION OF DATE SPECIFICATIONS) . 1. (Null) - . . : REM MSG This is triggered every time Remind runs 2. day . . . : REM 1 MSG First of every month. REM 31 MSG 31st of every month that has 31 days. 3. month . . : REM Feb MSG Every day in February 4. day month . : REM 6 Jan MSG Every 6th of January REM Feb 29 MSG Every 29th of February 5. year . : REM 1991 MSG Every day in 1991 6. year day . : REM 1 1990 MSG 1st of every month in 1990 REM 1992 23 MSG 23rd of every month in 1992 7. year month . : REM Feb 1991 MSG Every day in Feb 1991 REM 1992 September MSG Every day in Sept 1992 8. year, month day . : REM 8 Jan 1991 MSG 8th January 1991. REM 1992 March 9 MSG 9th March 1992. 9. weekday. : REM Sat MSG Every Saturday REM Mon Tue Wed Thu Fri MSG Every working day REM Monday Wednesday MSG Every Monday and Wednesday 10. weekday day . : REM Sat 1 MSG First Saturday of every month REM Mon Tue Wed Thu Fri 15 \ MSG 1st working day on or after 15th of every month 11. weekday month . : REM Mon March MSG Every Monday in March REM Mon Tue Wed Thu Fri Feb MSG Every working day in February 12. weekday, month day . : REM Mon 1 March MSG First Monday in March REM Sat Sun 15 July MSG First Sat or Sun on or after 15 July 13. weekday year . : REM Sat Sun 1991 MSG Every Saturday and Sunday in 1991 14. weekday, day year . : REM Mon 15 1990 MSG 1st Mon after 15th of every month in 1990 REM Mon Tue Wed Thu Fri 1 1990 \ MSG 1st working day of every month in 1990 15. weekday, month year . : REM Mon Wed 1991 Feb MSG Every Mon and Wed in Feb 1991. 16. weekday, day, month year . : REM Mon Tue Wed Thu Fri 28 Oct 1990 \ MSG 1st working day on or after 28 October 1990. weekday day Remind day weekday . day weekday . : REM Mon Tue 28 Oct 1990 MSG Hi . weekday . (SHORT-HAND DATE SPECIFICATIONS) YYYY-MM-DD YYYY/MM/DD . : REM 5 June 2010 MSG Cool! REM 2010-06-05 MSG Cool! YYYY-MM-DD@HH:MM . : REM 19 Dec 2010 AT 16:45 MSG Hi REM 2010-12-19@16:45 MSG Hi : : REM 19 Dec 2010 AT 16:45 +60 MSG Hi REM 2010-12-19@16:45 +60 MSG Hi <<+60>> delta tdelta . AT . REMIND (THE REMIND ALGORITHM) Remind : . ( Remind . Remind .) <
> . (BACKWARD SCANNING) . . back : REM Mon 1 -7 MSG Last Monday of every month. back . Remind <<>> . --7 -7 OMIT . (ADVANCE WARNING) . . delta REM . <<+>> n . <<+>> <<++>> OMIT . Remind n . : REM 6 Jan +5 MSG Remind me of birthday 5 days in advance. . (PERIODIC REMINDERS) . : REM Wed MSG Event! . repeat REM . ( ) . repeat . . : REM 28 Oct 1992 *14 MSG Payday . delta back repeat . back . . SCANFROM FROM SCANFROM FROM Remind <
> . SCANFROM 03.00.04 Remind . FROM 03.01.00 . (PRIORITY) PRIORITY 0 9999 . . . PRIORITY 5000 . ( $DefaultPrio . <> .) (EXPIRY DATES) . . : REM Fri UNTIL 11 Dec 1992 MSG Class today. : . : REM 1992-11-30 *1 +2 UNTIL 1992-12-04 MSG Jury duty repeat *1 ( ) . THROUGH *1 UNTIL . REM : REM 1992-11-30 *1 +2 UNTIL 1992-12-04 MSG Jury duty REM 1992-11-30 +2 THROUGH 1992-12-04 MSG Jury duty THROUGH UNTIL Remind . : OMIT 2021-01-08 REM 2021-01-01 THROUGH 2021-01-08 AFTER MSG Test 2021-01-08 2021-01-09 AFTER 2021-01-08 . ONCE (THE ONCE KEYWORD) . : REM Fri RUN do_backup REM Fri ONCE RUN do_backup Remind Remind . Remind login. do_backup . ONCE Remind . Remind ONCE . ONCE . (timestamp file) Remind $OnceFile SYSTEM VARIABLES . Remind $OnceFile ONCE . Remind -o ONCE $OnceFile . (LOCALLY OMITTING WEEKDAYS) OMIT REM << >> delta back . OMIT . : REM 1 +1 OMIT Sat Sun MSG Important Event . . delta +1 . <<++1>> . . REM 1 -1 OMIT Sat Sun MSG Last working day of month back -1 . OMIT . ( . <> .) <<--1>> OMIT . . : OMIT Sat Sun REM 15 OMIT Fri Sat MSG Whatever REM . (COMPUTED LOCAL OMITS) OMITFUNC REM . OMITFUNC . DATE <<>> 0 . : FSET _third(x) (day(x) % 3) || \ (wkdaynum(x) == 0) || \ (wkdaynum(x) == 6) REM OMITFUNC _third AFTER MSG Working day divisible by 3 . : o OMITFUNC _third _third(x) <<>> . . third_ . o AFTER . OMITFUNC AFTER . OMITFUNC OMIT OMIT . . OMIT ( ()isomitted) . OMITFUNC . Remind SATISFY ( -x) . OMIT (ADDING TRIGGER DATES TO THE OMIT CONTEXT) ADDOMIT REM ( ) OMIT . : REM ... whatever ... ADDOMIT MSG Foo : REM ... whatever ... SATISFY 1 IF trigvalid() OMIT [trigdate()] MSG Foo ENDIF (TIMED REMINDERS) AT time tdelta trepeat . time 0:00 12:00 23:59 . <> . 12:00am 12:00pm 11:59pm . <> <> <> . 13:39 13.39 . Remind . . Remind . NOQUEUE REM NOQUEUE ( ) (popup) . tdelta Remind tdelta trep . SCHED tdelta . 5:00pm : REM Mon Tue Wed Thu Fri AT 17:00 MSG Time to leave! : REM Fri ++1 AT 1:00PM MSG Lunch at 1pm Friday. tdelta trepeat repeat delta . 12:00pm : REM AT 12:00 +45 MSG Example 10:45 11:45 : REM AT 12:00 +75 *30 MSG Example2 <<+75>> 10:45 . 30* . tdelta trepeat . 10:45am 11:15am 11:45am 12:00pm . <<+>> <<++>> tdelta . Remind . Remind -a . -q . Remind . Remind -f . xinitrc. : remind -fa myreminders & X-Windows Remind . (WARNING ABOUT TIMED REMINDERS) : ( ) . . OMIT REM . SCHED WARN (THE SCHED AND WARN KEYWORDS) SCHED WARN . . <> . TAG INFO DURATION TAG <<>> . Remind TkRemind . . TAG . REM TAG . . -y Remind TAG . <<__syn__>> MD5 REM . REM . INFO TAG . info_string info_string . INFO "\n" . INFO "Header: Value" . (Header) . (Value) . . INFO . . : REM 26 Feb 2025 INFO "Location: Boardroom #2" \ INFO "Description: Go over latest pull requests" \ MSG Engineering meeting INFO : Location: Description: Url:. TkRemind INFO Url: INFO Location: Description: . Location: Url: Description: . DURATION . 1:00pm : REM 5 March 2021 AT 13:00 DURATION 1:30 MSG Meeting REM 5 March 2021 AT 13:00 DURATION 90 MSG Meeting REM 5 March 2021 AT 1:00pm DURATION 1:30 MSG Meeting REM 5 March 2021 AT 1:00pm DURATION 90 MSG Meeting DURATION . ( ) : REM 20 Feb AT 00:00 DURATION [4*24]:00 MSG away REM 20 Feb AT 00:00 DURATION [4*24*60] MSG away duration hours:minutes minutes integer ( ) . 00:00 0 Remind DURATION . hours:minutes hours 00-23 . REM (SYNTACTIC SUGAR FOR REM) REM . : REM First Monday April MSG Foo REM Mon 1 April MSG Foo REM Second Monday May MSG Bar REM Mon 8 May MSG Bar REM Third Monday MSG Third Monday of every month REM Mon 15 MSG Third Monday of every month REM Fourth Sunday June 2025 MSG Fourth Sunday in June 2025 REM Sun 22 June 2025 MSG Fourth Sunday in June 2025 REM Last Monday MSG Last Monday of every month REM Mon 1 --7 MSG Last Monday of every month REM Last Monday April MSG Last Monday of every April REM Mon 1 May --7 MSG Last Monday of every April REM Last Monday December 2025 MSG Last Monday of Dec 2025 REM Monday 1 Jan 2026 --7 MSG Last Monday of Dec 2025 Last . IN ( ) : REM Second Monday in May MSG foo REM Last Monday in December 2025 MSG Bar back . : REM ~~1 MSG Last day of every month REM Lastday MSG Last day of every month REM 1 --1 MSG Last day of every month REM May ~~1 MSG Last day of May REM Lastday May MSG Last day of May REM 1 June --1 MSG Last day of May REM Dec 2025 ~~1 MSG Last day of December 2025 REM Lastday Dec 2025 MSG Last day of December 2025 REM 1 Jan 2026 --1 MSG Last day of December 2025 REM Apr ~1 OMIT SAT SUN MSG Last workday of April REM Lastworkday April OMIT SAT SUN MSG Last workday of April REM 1 May -1 OMIT SAT SUN MSG Last workday of April REM Apr ~~7 MSG Seventh-last day of April REM 1 May --7 MSG Seventh-last day of April REM Apr ~2 OMIT SAT SUN MSG Second-last workday of April REM 1 May -2 OMIT SAT SUN MSG Second-last workday of April "Lastday" ~~1 "Lastworkday" ~1 . First/Second/Third/Fourth/Last ~ ~~ back . First/Second/Third/Fourth/Last . : REM First Monday 3 June MSG Huh? REM April 3 ~~1 MSG What? REM Second June MSG Where's the weekday??? (THE SUBSTITUTION FILTER) REM . "%x" ( "x" ) . ( .) %a "on weekday, day month, year" ( ) . : REM 18 Oct 1990 +4 MSG Meeting with Bob %a. "Meeting with Bob on Thursday, 18 October, 1990." . "Meeting with Bob tomorrow." . "Meeting with Bob today." . %b "in diff day's time" ( diff ) diff . ( OMIT .) : REM 18 Oct 1990 +4 MSG Meeting with Bob %b. "Meeting with Bob in 2 days' time." . "Meeting with Bob tomorrow." . "Meeting with Bob today." . %c "on weekday" ( ) . : REM 18 Oct 1990 +4 MSG Meeting with Bob %c. "Meeting with Bob on Thursday." . "Meeting with Bob tomorrow." . "Meeting with Bob today." . %d "day" . %e "on dd-mm-yyyy" . %f "on mm-dd-yyyy" . %g "on weekday, day month" . %h "on dd-mm" . %i "on mm-dd" . %j "on weekday, month day-th, year" . "st" "nd" "rd" "th" . %k "on weekday, month day-th" . %l "on yyyy-mm-dd" . %m "month" . %n ( ) . %o " (today)" Remind . Remind . REM BANNER . ( " BANNER" .) %p diff ( ) "s" ( day ). : REM 1 Jan +4 MSG %x day%p to go before New Year! %q diff "'s" . "s'" . : REM 1 Jan +4 MSG New Year in %x day%q time! %r ( ) . %s "st" "nd" "rd" "th" . %t ( ) . %u "on weekday, day-th month, year" . %a "st" "nd" "rd" "th" day () . %v "on weekday, day-th month" . %w "weekday" . %x diff () . diff OMIT . ( .) %y "year" . %z "yy" . %(any_text) any_text . [_("any_text")] . % INFO any_text . [triginfo("any_text")] . %_ (-) (Newline) . . : o remind -c . o rem2pdf remind -pp -ppp . o rem2html remind -pp . o tkremind . o rem2ps (Space) . rem2ps rem2pdf . o " " ( -s -n -p remind) . () . %1 "now" () "m minutes from now" (m ) "m minutes ago" (m ) "h hours from now" (h ) "h hours ago" (h ) "h hours and m minutes from now" (h m ) "h hours and m minutes ago" (h m ) . "d days," . -a . "...ago" () . %2 AT "at hh:mmam" "..pm" . %3 "at hh:mm" . %4 "mm" mm "" AT . AT . %5 "ma" ma %4 . %6 AT "ago" () "from now" ( / ) . %7 AT . . ( %7 .) %8 AT (%7) . . %9 %8 "s" ( minutes ). %0 %7 "s" ( hours ). %! AT "is" "was" . %! . %? AT "are" "were" . %? . %@ %2 . %# %3 . %: TODO COMPLETE-THROUGH " (done)" . . Remind TODO Agenda Calendar () . %" (- ) . -c -s -p Remind . " (CALENDAR MODE)" . : o Remind "%" . $AddBlankLines . o a b c e f g h i j k l u v "today" () "tomorrow" () . %w %y . o a c e f g h i j k l u v 2 3 ( %*c) "at" "on" . o ! ? (%*! %*?) ()realtoday ()today . o ( ) AT . delta . %1 delta . delta . o ( ). o "%" . "%" "%%" . "% " Remind MSG CAL RUN . (EVENTS AND TODOS) REM EVENT () . . ... . Remind . TODO ( ) . TODO Remind (Due Date) . REM TODO TODO . : REM TODO 15 August 2025 ++5 MSG Buy cat food %b. Agenda ( ) Remind ... Remind "Buy cat food yesterday." ( ) TODO . (MARKING TODOS AS DONE) TODO . TODO TODO REM ( ) . . TODO COMPLETE-THROUGH . : REM TODO 30 April ++15 COMPLETE-THROUGH 2025-04-30 MSG File taxes . . COMPLETE-THROUGH Remind . COMPLETE-THROUGH 2026-04-30 Remind ( ) . COMPLETE-THROUGH TODO . COMPLETED-THROUGH COMPLETE-THROUGH . (LIMITING REMINDERS ABOUT OVERDUE TODOS) Remind (TODO) . Remind MAX-OVERDUE n . Remind n . : REM TODO 2025-08-13 ++5 MAX-OVERDUE 5 MSG Task: %b. Remind ++ 2025-08-08 . . MAX- OVERDUE 2025-08-18 . 2025-08-19 Remind --- MAX-OVERDUE . (MORE DETAILS ABOUT TODOS) (TODOs) Agenda ( ) . Calendar () . COMPLETE-THROUGH Remind . TODO COMPLETE-THROUGH Remind ! : REM TODO Wed +7 MSG Take out the trash %a (%b) Agenda 2025-08-13 : Take out the trash on Wednesday, 3 January, 1990 (13006 days ago) Remind ! : REM TODO Wed +7 COMPLETE-THROUGH 2025-08-13 MSG Take out the trash %a (%b) : Take out the trash on Wednesday, 20 August, 2025 (in 7 days' time) FROM UNTIL . : REM TODO Wed +7 FROM 2025-08-06 UNTIL 2025-08-27 MSG Plants %b. "Plants 7 days ago." Remind . COMPLETE-THROUGH 2025-08-27 Remind . (Purge Mode) Remind TODO . TODO Remind . OMIT (THE OMIT COMMAND) OMIT REM . : OMIT weekday [weekday...] : OMIT [day] month [year] : OMIT [day1] month1 [year1] THROUGH [day2] month2 [year2] OMIT "" ( ) . "-" "+" back delta "--" "++" . : OMIT Saturday Sunday OMIT 1 Jan OMIT 7 Sep 1992 OMIT 15 Jan THROUGH 14 Feb OMIT May # Equivalent to OMIT May 1 THROUGH May 31 OMIT 25 Dec THROUGH 4 Jan OMIT 2023-05-03 THROUGH 2023-05-12 OMIT Jun THROUGH July # Equivalent to OMIT Jun 1 THROUGH July 31 (OMIT) . . - . - . OMIT . ( Remind .) REM : OMIT 7 Sep 1992 OMIT 1992-09-07 delta MSG RUN OMIT . : OMIT 1 Jan REM 1 Jan +4 MSG New year's day is %b! OMIT 1 Jan +4 MSG New year's day is %b! THROUGH OMIT . : OMIT 3 Jan 2011 OMIT 4 Jan 2011 OMIT 5 Jan 2011 OMIT 3 Jan 2011 THROUGH 5 Jan 2011 Remind OMIT . N ( ) OMIT N OMIT . "Too many full OMITs" . OMIT THROUGH REM : OMIT 6 Sep 2010 THROUGH 10 Sep 2010 MSG Vacation THROUGH THROUGH . : OMIT 25 Dec THROUGH 6 Jan OMIT 25 Dec 2024 THROUGH 6 Jan 2025 : OMIT 25 Dec THROUGH 6 Jan 2025 OMIT 25 Dec 2024 THROUGH 6 Jan OMIT : OMIT DUMP OMIT DUMP . BEFORE AFTER SKIP (THE BEFORE, AFTER AND SKIP KEYWORDS) (OMIT) OMIT OMIT OMITFUNC REM -back +delta . . : OMIT 11 Nov +4 MSG Remembrance Day REM Wed +1 MSG Code meeting %b. ( ) . . : BEFORE . BEFORE . AFTER . . SKIP . . . BEFORE AFTER . . . : REM 1 OMIT Sat Sun AFTER RUN do_backup . 1 . OMIT AFTER . AFTER OMIT . (TIMEZONE SUPPORT) REM TZ . TZ AT . : REM Wednesday AT 14:00 TZ America/Toronto MSG 2PM Eastern (%2). REM Wednesday AT 23:59 TZ America/Los_Angeles SATISFY [$Td == 13] MSG Foo %b %2. SATISFY OMITFUNC REM . REM . UTC 2025-09-04 UTC Remind : SET $AddBlankLines 0 BANNER % REM Wednesday AT 14:00 TZ America/Toronto MSG 2PM Eastern (%2). set a $T set b $Tt REM MSG a = [a], b = [b] REM Wednesday AT 23:59 TZ America/Los_Angeles SATISFY [$Td == 13] MSG Foo %b %2. set c $T set d $Tt REM MSG c = [c], d = [d] : a = 2025-09-10, b = 18:00 c = 2026-05-14, d = 06:59 ( 2025-09-10 : ) 2025-09-10 : UTC . (SATISFied) : UTC . TZ . America/Toronto america/toronto . /usr/share/zoneinfo Remind . /usr/share/zoneinfo "!" . : REM Thursday AT 14:45 TZ !EST+5EDT,M3.2.0/2,M11.1.0/2 MSG Old TZ format TZ OMIT . : America/Toronto : # A Friday OMIT 2025-09-05 # A Saturday OMIT 2025-09-13 REM Saturday AT 01:00 TZ Europe/Amsterdam SKIP MSG Early Sat AM 2025-09-05 America/Toronto . 2025-09-05 (OMIT) SKIP Europe/Amsterdam 2025-09-06 ( ) . 2025-09-12 America/Toronto . 2025-09-12 2025-09-13 Europe/Amsterdam . Remind (include ) #include C. : INCLUDE holidays.rem INCLUDE birthdays.rem INCLUDE "quote files with spaces.rem" INCLUDE (nested) . ( !) ( ) . INCLUDE "-" Remind (standard input) . INCLUDE Remind ( !) "*.rem" . "*.rem" . INCLUDE Remind . DO . /home/user/.reminders/foo.rem Remind /home/user : # Read /home/user/.reminders/bar.rem DO bar.rem # Read /usr/share/bar.rem - absolute path DO /usr/share/bar.rem # Read /home/user/bar.rem INCLUDE bar.rem # Read /usr/share/bar.rem - absolute path INCLUDE /usr/share/bar.rem INCLUDE DO (backward-compatibility) DO . (symbolic link) DO . Remind (resolve) . SYSINCLUDE DO . Remind "/usr/share/remind" . RETURN (THE RETURN COMMAND) RETURN Remind . "" (included) ( top- level ). RETURN : IF already_done RETURN ENDIF set already_done 1 preserve already_done # Do expensive processing here RUN (THE RUN COMMAND) . RUN . RUN : RUN OFF (top-level) . RUN ON . RUN ON INCLUDE . RUN ON . RUN OFF . Remind -r RUN shell() RUN . -k . Remind . (group-writable world-writable) . set-uid . RUN ()shell . (root) root . Remind RUN ()shell . EXPR (THE EXPR COMMAND) Remind . Remind . : EXPR OFF Remind EXPR OFF . : EXPR ON RUN ON EXPR ON . INCLUDECMD (THE INCLUDECMD COMMAND) Remind (included) . stdout REM . : INCLUDECMD extract_reminders_for dfs "extract_reminders_for" . INCLUDECMD Remind Remind Remind INCLUDECMD "". RUN INCLUDECMD "RUN disabled" . Remind INCLUDECMD /dev/null . INCLUDECMD popen(3) . (meta- characters) () . Remind ( [expr]). INCLUDECMD "!" Remind RUN . "!" RUN . INCLUDECMD INCLUDE . Remind INCLUDECMD () . INCLUDECMD . " " ( ) INCLUDECMD today() . INCLUDECMD . . BANNER (THE BANNER COMMAND) Remind : Reminders for Friday, 30th October, 1992 (today): ( -k .) BANNER . REM . : BANNER format format body () REM . (implicit trigger) . : BANNER Reminders for %w, %d%s %m, %y%o: BANNER % . : BANNER Hi - here are your reminders for %y-%t-%r: OMIT (CONTROLLING THE OMIT CONTEXT) OMIT (global) . : PUSH-OMIT-CONTEXT OMIT (stack) . CLEAR-OMIT-CONTEXT OMIT " " . POP-OMIT-CONTEXT OMIT PUSH-OMIT-CONTEXT . OMIT OMIT . : PUSH-OMIT-CONTEXT # Save the current context CLEAR-OMIT-CONTEXT # Clean the slate # Block of reminders goes here POP-OMIT-CONTEXT # Restore the saved omit context (EXPRESSIONS) Remind . Remind C . (DATA TYPES) Remind : INT INT (machine word) . INT "int" C . STRING STRING () . C BASIC . Remind UTF-8 . UTF-8 . UTF-8 "" "een" . Remind index strlen substr . mbindex mbstrlen mbsubstr mb . . TIME TIME : (duration) . TIME . TIME 00:00 23:59 0 1439 . TIME ( ). . DATE DATE ( ) . DATE . DATETIME DATETIME . DATETIME . DATETIME DATE TIME . (CONSTANTS) Remind : INT (INT constants) 12, 36, -10, 0, 1209, 0x1F, 0xfe00 ( ) STRING (STRING constants) "Hello there", "This is a test", "\nHello\tThere", "", " is Cool! " "" . Remind (escape sequences) "\a" "\b" "\f" "\n" "\r" "\t" "\v" C . "\xAB" A B C . "\x" "\x00" . "\"" . . "\\" . TIME (TIME constants) 12:33, 0:01, 14:15, 16:42, 12.16, 13.00, 1.11, 4:30PM, 12:20am TIME "AM/PM" . "AM/PM" . . Remind . ( .) TIME Remind ( AT) ( 00:00 23:59) ( 12:00am 11:59pm) . TIME Remind am pm . TIME DATE DATETIME 12:56 '12:56' TIME . DATE (DATE constants) DATE 'yyyy/mm/dd' 'yyyy-mm-dd' . . : '1993/02/22', '1992-12-25', '1999/01/01' DATE . '-' '/' . '-' '/' . Remind 03.00.01 . date() . 03.00.02 '-' . DATETIME (DATETIME constants) DATETIME DATE "@HH:MM" "am" "pm" . : '2008-04-05@23:11', '1999/02/03@14:06', '2001-04-07@08:30', '2020-01-01@3:20pm' DATETIME . DATE TIME DATETIME . / (ZERO VALUES AND TRUE/FALSE) (zero value) IF IIF (false) . : INT - 0 DATE - '1990-01-01' TIME - 00:00 DATETIME - '1990-01-01@00:00' STRING - "" ( ) (true) . (OPERATORS) Remind . . C . ! - ( ) * / % ( ) + - (/ ) < <= > >= () == != ( ) && (AND ) || (OR ) (DESCRIPTION OF OPERATORS) ! . . 0 1 . - (). INT . * . INT . STRING INT STRING INT STRING . INT . / . INT . % (Modulus). INT . + : INT + INT - INT . INT + TIME TIME + INT - TIME INT TIME . 00:00 23:59 . TIME + TIME TIME TIME + INT . INT + DATE DATE + INT - DATE INT DATE . INT + DATETIME DATETIME + INT - DATETIME INT DATETIME . DATETIME + TIME TIME + DATETIME TIME DATETIME + INT . STRING + STRING - STRING STRING . STRING + anything anything + STRING - -STRING STRING . coerce() . - : INT - INT - INT . DATE - DATE - DATE ( INT) . TIME - TIME - TIME ( INT) . DATETIME - DATETIME - DATETIME ( INT) . DATE - INT - DATE INT DATE . TIME - INT - TIME INT TIME . DATETIME - INT - DATETIME INT DATETIME . DATETIME - TIME - TIME INT (/coerce) . <, <=, >, and >= . . 1 0 . (lexical) . ==, != == 1 0 . != . == 0 != 1 . . && AND . . . "" . || OR . . "" . (NOTES) "int" C Remind "Number too high" . C (overflow) . . "+" (associative) . : 1 + 2 + "string" + 3 + 4 yields "3string34" 1 + (2 + "string") + (3 + 4) yields "12string7" 12:59 + 1 + "test" yields "13:00test" 12:59 + (1 + "test") yields "12:591test" (short-circuit) C . || (true) . && (false) . (VARIABLES) Remind . SET : SET var expr var . (_) . . "Afoo" "afOo" . : SET a 10 + (9*8) SET b "This is a test" SET mydir getenv("HOME") SET time 12:15 SET date today() . SET -ivar=expr (global scope) . UNSET : UNSET var [var...] : UNSET a b mydir time date (SYSTEM VARIABLES) Remind << >> Remind . 03.00.07 Remind . <<$>> . SET . . . -i . . . <<>> SET . INT ( ) . $AddBlankLines 1 () Remind . ( .) $AddBlankLines 0 Remind . % . %_ . $CalcUTC 1 () Remind C (UTC) . ( sunrise()) . 0 $MinsFromUTC . $CalMode () -c . $CalType ( STRING) -c -s -p "monthly" . -c+ -s+ -p+ "weekly" . "none" . $Daemon () -z . 0 . ( -z0 -zj) -1 . $DateSep ( STRING) "/" "-" . DATE DATETIME Remind . $DedupeReminders 1 Remind . . 0 Remind . : SET $DedupeReminders 1 REM Wednesday MSG Phooey REM 20 MSG Phooey "Phooey" . "Phooey" . $DedupeReminders 0 Remind . : SET $DedupeReminders 0 REM Wednesday MSG Hello SET $DedupeReminders 1 REM Wednesday MSG Hello Remind "Hello" . "Hello" $DedupeReminders 0 . . : SET $DedupeReminders 1 set a "foo" REM MSG [a] set a "bar" REM MSG [a] set a "foo" REM MSG [a] REM "foo" . "bar" . "foo" . $DefaultColor ( STRING) . 0 255 -1 . $DefaultColor "-1 -1 -1" MSG . $DefaultColor MSG MSF CAL SPECIAL COLOR $DefaultColor . $DefaultColor "-1 -1 -1" . $DefaultPrio PRIORITY . . $DefaultPrio 5000 0 9999 . $DefaultDelta 0 10000 . Remind REM () ++$DefaultDelta . $DefaultDelta . $DefaultTDelta +N AT . 0 -tt . $DefaultDelta +0 AT . $DeltaOverride () n -tn . $DontFork () -c . $DontTrigAts () -a . $DontQueue () -q . $EndSent ( STRING) . MSF . $EndSent ".!?" ( ) . $EndSentIg ( STRING) MSF . "'>)]}"+CHAR(34) ( ) . : MSF He said, "Huh! (Two spaces will follow this.)" Yup. ( ) . $ExpressionTimeLimit n n . (DoS) . $ExpressionTimeLimit . . $FirstIndent MSF . 0 . $FoldYear . 1 UTC << >>. () . . 0 . UTC 1 . << TIME_T >> . $FormWidth MSF. . . MSF . $HideCompletedTodos () --hide-completed-todos . $HushMode () -h . $IgnoreOnce () -o . ONCE . $InfDelta () -t n . $IntMax () INT. . $IntMin () INT. - . $Latitude ( STRING) . Remind . $Latitude "-90.0" "90.0" . $Latitude "C" (".") . $Longitude ( STRING) . Remind . $Longitude "-180.0" "180.0" . $Longitude "C" (".") . : SET $Latitude "40.68933" SET $Longitude "-74.04454" $LatDeg $LatMin $LatSec () . $LatDeg -90 90 -59 59 . . . $Latitude . $Location ( STRING) . . . $LongDeg $LongMin $LongSec () . $LongDeg -180 180 . . : . ! Remind . $Longitude . $Longitude . sunrise() sunset() . Remind SET . $LongDeg $LongMin $LongSec $Longitude $Longitude $LongDeg $LongMin $LongSec . $Latitude $LatDeg $LatMin $LatSec . $JSONMode () --json . $MaxLateMinutes Remind (suspend) . (suspend) Remind . $MaxLateMinutes 1 1440 Remind $MaxLateMinutes . Remind $MaxLateMinutes . $MaxLateMinutes . $MaxSatIter SATISFY ( ). 10 . 10,000 . $MaxStringLen Remind . 65535 . $MaxStringLen 0 -1 Remind . $MaxStringLen 0 -1 (DoS) Remind . $MinsFromUTC (UTC) . $CalcUTC Remind . . $CalcUTC $MinsFromUTC . . $MinsFromUTC -i $CalcUTC -i 0 . $NextMode () -n . $MaxFullOmits () OMIT ( ). $MaxPartialOmits () OMIT ( ). $NumFullOmits () OMIT OMIT . $NumPartialOmits () OMIT OMIT . $NumQueued () . $NumTrig () . : PostScript () . $NumTrig . $NumTrig . ( << >> .) $NumTrig REM IFTRIG . $OnceFile ( STRING) Remind ONCE $OnceFile . . $OnceFile ONCE . . $OnceFile ONCE Remind $OnceFile . $ParseUntriggered Remind REM . 0 () 1 . REM : REM 2020-01-01 MSG ["bad_expression" / 2] $ParseUntriggered 1 Remind <> ( ) . $ParseUntriggered 0 () Remind 2020-01-01 . $ParseUntriggered 0 . 0 . $PrefixLineNo () -l . $PSCal () -p . $Repeat () n *n Remind . $RunOff () RUN . $Shaded () SHADE . (agenda). . . : SET n $NumTrig # ... # # IF $NumTrig > n && !$Shaded REM SPECIAL SHADE 255 255 128 ENDIF $SimpleCal () -p -s . $SortByDate () -g 0 1 2 . $SortByPrio () -g 0 1 2 . $SortByTime () -g 0 1 2 . $SubsIndent ( ) MSF . 0 . $SuppressImplicitWarnings REM REM MSG Remind . $SuppressImplicitWarnings 1 . 0 . $SuppressLRM Remind -c UTF-8 (LRM) . : SET $SuppressLRM 1 LRM Remind '-i$SuppressLRM=1' . $SysInclude ( STRING) . Remind . $SysInclude "/usr/share/remind" . $T ( DATE INT) trigdate(). ( .) $Tb ( DATE INT) trigbase(). $Td () day(trigdate()). $Tm () monnum(trigdate()). $Tu ( DATE INT) triguntil(). $Tw () wkdaynum(trigdate()). $Ty () year(trigdate()). $Tt ( TIME INT) trigtime(). $TimeSep ( STRING) ":" "." . TIME DATETIME Remind . $TimetIs64bit () time_t C 1 . 0 C Remind . << TIME_T >> . $TodoFilter () 0 (TODO) . 1 --only-todos . 2 --only-events . $UntimedFirst () -g "d" 1 0 . $U ( DATE) today(). ( .) $Ud () day(today()). $Um () monnum(today()). $Uw () wkdaynum(today()). $Uy () year(today()). $UseVTColors () -@ -cc 1 0 . $UseBGVTColors () -@,,1 1 0 . $Use256Colors () -@1 1 0 . $UseTrueColors () -@2 1 0 . $TerminalBackground () -1 ( -@,0 ) 0 ( -@,1 ) 1 . <<>> . $TerminalHyperlinks ( INT) HTML ( https://gist.github.com/egmontkob/eb114294efbcd5adb1944c9f3cb5feda ) 1 . Remind "Url:" . Remind $TerminalHyperlinks 1 0 . $WarningLevel ( STRING) Remind . Remind $WarningLevel AB.CD.EF AB CD EF . AB.CD.EF Remind . $WarningLevel Remind . Remind 05.00.00 : SET $WarningLevel "05.00.00" $WarningLevel remind . : $Daemon $DontFork $DontTrigAts $DontQueue $HushMode $IgnoreOnce $InfDelta $NextMode . (SAVING AND RESTORING VARIABLES) OMIT () . : SET a 1 UNSET b # PUSH-VARS $DefaultColor $AddBlankLines a b SET $DefaultColor "255 0 0" SET $AddBlankLines 0 SET a 3 SET b 4 REM MSG Hello # POP-VARS # $DefaultColor $AddBlankLines # . a 1 # b PUSH-VARS / . . (push) . POP-VARS PUSH-VARS . POP-VARS (unset) . (BUILT-IN FUNCTIONS) Remind . C - . . <<()>> . Remind . . "i" "s" "d" "t" "q" INT STRING DATE TIME DATETIME . . "di_arg" DATE INT . "x_arg" . (underscore) . : _(s_message) message . message . : TRANSLATE "Goodbye" "Tot ziens" SET a _("Goodbye") a "Tot ziens" . << (THE TRANSLATION TABLE)>> . %(text) () [_("text")] . : REM MSG %(Goodbye) REM MSG [_("Goodbye")] _("Goodbye") % . REM (expression pasting) ( ). abs(i_num) num . access(s_file, si_mode) file . Mode "rwx" . mode access(2) . mode 0 -1 . adawn([dq_date]) << >> (astronomical dawn) date . date today() . datetime . adusk([dq_date]) << >> (astronomical twilight) date . date today() . ampm(tq_time [,s_am [,s_pm [,i_lz]]]) STRING time ( TIME DATETIME ) "AM/PM" . am pm "AM" "PM" . lz (leading zero) . lz . lz . $DateSep $TimeSep $DateTimeSep . : ampm(0:22) returns "12:22AM" ampm(17:45, "am", "pm") returns "5:45pm" ampm(17:45, "am", "pm", 1) returns "05:45pm" ampm('2020-03-14@21:34') returns "2020-03-14@9:34PM" ansicolor(i_red, i_green, i_blue [,i_bg [,i_clamp]]) STRING ANSI . red green blue 0 255 . -1 ANSI "ESC[0m" . ansicolor Remind ( ?B-@?R ) . ansicolor . ?B-@?R . bg 0 1 . 0 () . 1 . 256 (true-color) . clamp 0 1 . 0 () . 1 Remind . : "128 128 0" ansicolor("") ansicolor(-1,-1,-1) ANSI . ANSI . : IF $CalMode FSET fg(r,g,b) "" FSET bg(r,g,b) "" ELSE FSET fg(r,g,b) ansicolor(r,g,b) FSET bg(r,g,b) ansicolor(r,g,b,1) ENDIF REM [fg(255,0,0)][bg(64,64,64)]Red on Gray[fg(-1,-1,-1)] in agenda mode REM SPECIAL COLOR 0 255 0 Green in agenda and calendar mode ansicolor ansicolor(-1,-1,-1) . args(s_fname) fname -1 . . . args() 03.00.04 Remind . asc(s_string) INT (ASCII) string . asc("") 0 . UTF-8 UTF-8 . codepoint(s_string) INT (code point) string . codepoint("") 0 . baseyr() << >> (base year) Remind ( 1990). baseyr() . catch(x_arg1, x_arg2) arg1 . arg1 arg2 . catch() . : catch(4/2, 33) => 2, because 4/2 evaluates without error catch(4/0, 33) => 33, because 4/0 gives a divide-by-zero error catch(2, 1/0) => 2, and the second argument is not evaluated catch(4/0, 1/0) results in a divide-by-zero error catch arg2 . catcherr() catch() . Remind . : # No "catch" invocations yet: sets a to "Ok" set a catcherr() # Sets b to "oops" and a to "Division by zero" set b catch(1/0, "oops") set a catcherr() # Sets b to 1 and a to "Division by zero". The catch error # is never cleared by a non-error catch() set b catch(4-3, "not-evaluated") set a catcherr() char(i_i1 [,i_i2...]) INT . STRING . UTF-8 char . 0 . char(0) "" . mbchar(i_i1 [,i_i2...]) INT . STRING . . 0 . mbchar(0) "" . . choose(i_index, x_arg1 [,x_arg2...]) choose INT . index n n- . index 1 arg1 . index . : choose(0, "foo", 1:13, 1000) returns "foo" choose(1, "foo", 1:13, 1000) returns "foo" choose(2, "foo", 1:13, 1000) returns 1:13 choose(3, "foo", 1:13, 1000) returns 1000 choose(4, "foo", 1:13, 1000) returns 1000 . . coerce(s_type, x_arg) arg type . Type "INT" "STRING" "DATE" "TIME" "DATETIME" ( ). : arg type . type "STRING" arg . type "DATE" arg INT baseyr() . arg STRING . DATETIME . arg TIME . type "TIME" arg INT . arg STRING . DATETIME . arg DATE . type "DATETIME" arg INT baseyr() . STRING . . type "INT" DATE TIME DATETIME . arg STRING . columns([s_arg]) columns() : TTY . TTY "/dev/tty" . -1 . columns(str) str . ANSI . columns(str) . Remind columns(str) . columns(str) mbstrlen(str) . (combining characters) . (double-width) . const(x_arg) arg "" (constant) . (Purge Mode) . << (NON-CONSTANT EXPRESSIONS)>> . current() DATETIME . . date(i_y, si_m, i_d) date() DATE y m d . 1 12 . datepart(dq_datetime) DATE datetime . datetime(args) datetime() . DATETIME . DATE TIME . DATE INT . TIME . . INT . INT 0 12 . TIME . INT . ( .) dawn([dq_date]) << >> (civil dawn) date . date today() . datetime . day(dq_date) DATE DATETIME INT date . daysinmon(si_m, i_y) or daysinmon(dq_date) m (1-12) y . 1 12 . DATE DATETIME . defined(s_var) var 1 0 . defined() STRING X : defined("X") : defined(X) X STRING . dosubst(s_str [,d_date [,t_time]]) or dosubst(s_str [,q_datetime]) STRING str . date time ( datetime) . date time today() now() . str "%" . dosubst() date ( date < today() ) . dosubst() 03.00.04 Remind . dusk([dq_date]) << >> (civil twilight) date . date today() . easterdate([dqi_arg]) arg INT . arg DATE DATETIME arg . ( datetime .) arg today() . easterdate . orthodoxeaster . escape(s_string [,i_add_quotes]) STRING . : set a escape("foo" + char(10) + "bar") a "foo\nbar" "\n" "\" "n" . Remind TRANSLATE INFO. add_quotes escape . eval(s_arg) arg . . : SET x 2 FSET f(x) x + eval("1 + x") REM MSG F is [f(9)] "F is 12" x eval() x . RUN eval() eval() shell() . evaltrig(s_trigger [,dq_start]) trigger REM IFTRIG DATE ( AT DATETIME) . INT . evaltrig . start . : evaltrig("Mon 1", '2008-10-07') '2008-11-03' "Mon 1" . : evaltrig("Mon 1", '2008-11-01') - evaltrig("Mon 1", '2008-10-01') . evaltrig ( OMIT AT SKIP ) SATISFY MSG . filedate(s_filename) filename . filename baseyr() baseyr() . filedatetime(s_filename) filename . filename baseyr() baseyr() . filedir() . INCLUDE : INCLUDE [filedir()]/stuff "stuff" . DO stuff . filedir() . . filename() Remind ( STRING) . . getenv(s_envvar) getenv(2). . "" . getenv("HOME") getenv("home") . hebdate(i_day, s_hebmon [,idq_yrstart [,i_jahr [,i_aflag]]]) - << (THE HEBREW CALENDAR)>> . hebday(dq_date) - << (THE HEBREW CALENDAR)>> . hebmon(dq_date) - << (THE HEBREW CALENDAR)>> . hebyear(dq_date) - << (THE HEBREW CALENDAR)>> . hex(i_n) STRING n . "0x" . hour(tq_time) time . htmlescape(s_str) str "<" "<" ">" ">" "&" "&" . htmlstriptags(s_str) str HTML . "<" ">" . iif(x_test1, x_arg1, [x_test2, x_arg2,...], x_default) test1 (true) arg1 . test2 arg2 . test (false) default . . - 03.00.05 Remind . iif() Remind . index(s_search, s_target [,i_start) INT target search . index (non-ASCII) . mbindex . 1 . target search 0 . start search target . mbindex(s_search, s_target [,i_start]) index() . start 1 . isany(arg1 [,arg2, ..., argN]); arg1 arg2 argN 1 0 . 0 . : (a == b) || (a == c) || (a == d) || (a == e) isany(a, b, c, d, e) isconst(x_any) 1 0 . isconst arg isconst 1 . << (NON-CONSTANT EXPRESSIONS)>> . isdst([d_date [,t_time]]) or isdst(q_datetime) . date today() time . C . 03.00.07 Remind . isleap(idq_arg) arg 1 0 . Arg INT DATE DATETIME . DATE DATETIME . isomitted(dq_date) OMIT date (omitted) 1 0 . ( datetime .) OMIT OMITFUNC . language() STRING Remind . Remind . "English" . _("LANGID") ISO 639 ! localtoutc(q_datetime) DATETIME DATETIME (UTC) . lower(s_string) STRING string . : (ASCII) . mblower . mblower(s_string) STRING string . . max(x_arg1 [,x_arg2...) . . < . min(x_arg1 [,x_arg2...) . . < . minsfromutc([d_date [,t_time]]) or minsfromutc(q_datetime) ( GMT) . date today() time . UTC . . C . 03.00.07 Remind . minute(tq_time) time . mon(dqis_arg) arg DATE DATETIME . arg INT 1 12 . arg STRING . : mon("Mar") "March" . monnum(dq_date) or monnum(s_str) INT 1 12 date . DATE DATETIME STRING str ( ) . str . moondate(i_phase [,d_date [,t_time]]) or moondate(i_phase, q_datetime) phase date time . Phase 0 3 0 1 2 () 3 . date today() . time . : SET fullmoon moondate(2) moontime(i_phase [,d_date [,t_time]]) or moontime(i_phase, q_datetime) phase date time . Phase 0 3 0 1 2 3 . date today() . time . Moontime() moondate() . moondate() moontime() "Old Farmer's Almanac" . : MSG Next full moon at [moontime(2)] on [moondate(2)] moondatetime(i_phase [,d_date [,t_time]]) or moondatetime(i_phase, q_datetime) moondate moontime DATETIME . moonphase([d_date [,t_time]]) or moonphase(q_datetime) date time today() . 0 359 . 0 180 90 . moonrise([d_date]) DATETIME date . date today() . date . : SET mr moonrise() IF datepart(mr) == today() REM NOQUEUE [mr] MSG Moon rises at %3. ELSE REM MSG No moonrise today ENDIF moonrisedir([d_date]) INT date . date today() . 0 359 0 90 180 270 . moonset([d_date]) moonrise() DATETIME date . moonsetdir([d_date]) moonrisedir() . multitrig(s_trig1 [,s_trig2, [... s_trigN]]) multitrig evaltrig today() . multitrig trig : trig multitrig . today() multitrig 1990-01-01 . : # Returns 1990-01-01 because neither would trigger today SET a trig("Mon", "Wed") # Returns 2024-03-25 because it's the earlier trigger date SET a multitrig("Mon", "Wed") # Returns 2024-03-27 because it's the first that would trigger today SET a trig("Wed +3", "Mon +3") # Returns 2024-03-25 because it's the earlier trigger date SET a multitrig("Wed +3", "Mon +3") # Returns 1990-01-01 because all triggers have expired SET a multitrig("2000", "2022", "1998", "2023") multitrig Remind trig . : REM [multitrig("Mar 31", "Jun 30", "Sep 30", "Dec 31")] +7 MSG %"End of [ord($Tm/3)] quarter%" is %b. : PUSH-OMIT-CONTEXT OMIT Sat Sun REM [multitrig("Mar ~1", "Jun ~1", "Sep ~1", "Dec ~1")] +7 MSG %"Last working day of [ord($Tm/3)] quarter%" is %b. POP-OMIT-CONTEXT evaltrig multitrig DATE DATETIME . AT multitrig . ndawn([dq_date]) << >> (nautical dawn) date . date today() . datetime . ndusk([dq_date]) << >> (nautical twilight) date . date today() . nonomitted(dq_start, dq_end [, i_step] [,s_wkday...]) (non-omitted) start end . start . end . end start . nonomitted INT (step) nonomitted . : nonomitted('2023-07-01', '2023-07-29', 7) 2023-07-01 ( ) 2023-07-29 . ( 2023-07-01 2023-07-29 .) step . OMIT . REM OMITFUNC . a ( OMIT ): set a nonomitted('2007-08-01', '2007-08-16', "Sat", "Sun") ( ) . nonomitted . . << >> . : IF today() >= '2007-09-04' set daynum nonomitted('2007-09-04', today(), "Sat", "Sun") REM OMIT SAT SUN SKIP CAL Day [(daynum % 6) + 1] ENDIF nonomitted OMIT . OMIT . nonomitted . : (<< >> "Black Box") . (<< >> "Blue Box") . . : fset _garbhol(x) wkdaynum(x) == 5 && nonomitted(x-4, x+1) < 5 REM 12 November 1999 *14 AFTER OMITFUNC _garbhol MSG Black Box REM 19 November 1999 *14 AFTER OMITFUNC _garbhol MSG Blue Box : _garbhol(x) () x () OMIT . REM . AFTER _garbhol . REM AFTER _garbhol . nonconst(x_arg) arg (non-constant) . "NON-CONSTANT EXPRESSIONS" . now() TIME . . (Calendar Mode) now() 00:00 . ord(i_num) num . ord(2) "2nd" ord(213) "213th" . ordx ord(n) ordx(n) . (callback) ordx RUN . orthodoxeaster([dqi_arg]) arg INT . arg DATE DATETIME arg . ( datetime .) arg today() . orthodoxeaster . easterdate . ostype() "UNIX" . Remind OS/2 MS-DOS . pad(x_arg, s_padstr, i_len [, i_right]) arg len ( ) padstr len (pad) . right . : pad(3, "0", 2) --> "03" pad(465, "0", 2) --> "465" pad("foo", " ", 5) --> " foo" pad("foo", " ", 5, 1) --> "foo " pad("foo", "bar", 11) --> "barbarbafoo" mbpad(x_arg, s_padstr, i_len [, i_right]) pad . . ASCII pad mbpad . plural(i_num [,s_str1 [,s_str2]]) . num "s" num "" . num str1 + "s" . str1 . num str1 str2 . psmoon(i_phase [,i_size [,s_note [,i_notesize]]]) [] STRING PostScript - . Phase 0 ( ) 1 ( ) 2 ( ) 3 ( ) . size PostScript ( ) . . PostScript : REM [moondate(0)] PS [psmoon(0)] REM [moondate(1)] PS [psmoon(1)] REM [moondate(2)] PS [psmoon(2)] REM [moondate(3)] PS [psmoon(3)] note . . notesize PostScript ( ) . notesize . ( -- Remind .) : REM [moondate(0)] PS [psmoon(0, -1, moontime(0)+"")] . psshade(i_gray) or psshade(i_red, i_green, i_blue) [] STRING PostScript . Num 0 ( ) 100 ( ) . 0 100 . : REM Sat Sun PS [psshade(95)] PostScript PostScript . psmoon psshade SPECIAL SHADE SPECIAL MOON "Out-of-Band Reminders" . realcurrent() ( DATETIME) . current() . realnow() . now() 00:00 . realtoday() . <<>> Remind . rows() TTY . TTY "/dev/tty" . -1 . sgn(i_num) num -1 1 0 . shell(s_cmd [,i_maxlen]) cmd cmd . (space) . RUN OFF -r shell() cmd . shell cmd cmd /dev/null . maxlen shell() maxlen ( ) . maxlen $MaxStringLen . shellescape(s_str) str " " "*" . : SET a shellescape("a b*? c&d$e") a : "a\ b\*\?\ c\&d\$e" slide(d_start, i_amt [, i_step] [,s_wkday...]) nonomitted . amt ( ) step start (omitted). step . step- . wkday . : OMIT 14 May 2009 SET a slide('2009-05-13', 5, "Sat", "Sun") a 2009-05-21 . . : OMIT 14 May 2009 SET a slide('2009-05-21', -5, "Sat", "Sun") a 2009-05-13 . : OMIT 14 May 2009 SET a slide('2009-05-07', 2, 7) a '2009-05-28' . : OMIT 13 May 2009 SET a slide('2009-05-07', 2, 7) a '2009-05-21' . 2009-05-13 << >> . soleq(i_which [, dqi_start]) soleq . which 0 3 : 0 () 1 () 2 () 3 () . start DATE DATETIME soleq start ( start DATETIME .) start today() . soleq() DATETIME . . soleq() $SysInclude/seasons.rem . stdout() Remind . : "TTY" "BLOCKDEV" ( ) "CHARDEV" ( /dev/null) "DIR" ( ) "PIPE" FIFO "SYMLINK" ( ) "SOCKET" "UNKNOWN" . stdout() TTY TTY TTY . strlen(s_str) str . str "Number too high" . strlen . ASCII UTF-8 . mbstrlen(str) strlen . substr(s_str, i_start [,i_end]) STRING str start end . . end str . substr . mbsubstr(s_str, i_start [,i_end]) substr . sunrise([dq_date]) TIME date ( today()) . sunrise() INT 1440 . sunset([dq_date]) TIME date ( today()) . sunset() INT 1440 . sunrise() sunset() "Almanac for Computers for the year 1978" L. E. Doggett USNO . . ( "System Variables" .) . 03.00.07 Remind . time(i_hr, i_min) TIME hr min . timepart(tq_datetime) TIME datetime . timezone([dq_datetime]) DATETIME . Remind current() . DATETIME DATE Remind 00:00 . today() <<>> Remind . ( ) . trig(s_1 [,s_2, ...]) s_n trig s_n REM IFTRIG . . 1990-01-01 . trig trig . trig IFTRIG . : REM [trig("Mon Jun +3", "Mon July +3")] +3 MSG Meeting %b : 3+ trig . trig ( ) REM trig . Remind (short-circuit) : SET a trig("Mon +7") || trig("Fri +7") ()trig . ("trig("Mon +7 (true) OR ("trig("Fri +7 trig() . : trig() SATISFY . : REM [trig("Mar", "Apr")] SATISFY [$Td == 15] MSG 15 Mar or April Remind ... . trig 2022-03-05 . Remind REM : REM 2022-03-05 SATISFY [$Td == 15] MSG 15 Mar or April SATISFY . : trig() SATISFY . trigdate() REM IFTRIG . REM . REM 0 . trigdatetime() ()trigdate REM AT DATETIME . AT DATE . 0 . "MULTI-DAY EVENTS" . trigeventstart() DATETIME REM AT . DURATION trigdatetime() . REM AT -1 ( trigdatetime() .) "MULTI-DAY EVENTS" . trigeventstarttz() trigeventstart() TZ DATETIME . TZ trigeventstart() . trigeventduration() TIME REM AT DURATION . trigduration() . REM AT DURATION -1 . "MULTI-DAY EVENTS" . trigback() <<>> (back) REM IFTRIG . N- N N-- . 0 . trigbase() <<>> (base) REM IFTRIG . . 0 . trigbase() : REM 2025-05-05 *7 UNTIL 2025-05-26 MSG Meeting: week #[(trigdate() - trigbase())/trigrep()+1] 2025-05-05 "Meeting: week #1" . 2025-05-12 "Meeting: week #2" . trigdelta() <<>> (delta) REM IFTRIG . N+ N N++ . 0 . trigtimedelta() trigdelta() AT . trigrep() <<>> (repeat) REM IFTRIG . N* N . 0 . trigtimerep() trigrep() AT . trigtz() TZ REM IFTRIG . . trigduration() DURATION ( TIME) . DURATION -1 . "MULTI-DAY EVENTS" . trigpriority() (PRIORITY) REM IFTRIG . triguntil() UNTIL REM IFTRIG ( DATE) . UNTIL -1 . THROUGH triguntil() "THROUGH yyyy-mm-dd" "*1 UNTIL yyyy-mm-dd" . trigscanfrom() SCANFROM REM IFTRIG ( DATE) . SCANFROM -1 . FROM SCANFROM "FROM yyyy-mm-dd" SCANFROM "yyyy-mm-dd" . trigfrom() FROM REM IFTRIG ( DATE) . FROM -1 . triginfo(s_header) STRING INFO header . (:) . . "At home" a b : REM INFO "Location: At home" MSG test SET a triginfo("location") SET b triginfo("no_such_header") trigistodo() REM TODO 1 0 . trigcompletethrough() DATE COMPLETE-THROUGH REM . COMPLETE-THROUGH INT . trigmaxoverdue() INT MAX- OVERDUE REM . MAX-OVERDUE -1 . trigger(d_date [,t_time [,i_utcflag]]) or trigger(q_datetime [,i_utcflag]) REM SCANFROM UNTIL . Remind trigger REM . Remind . date time utcflag date time UTC . : trigger('1993/04/01') "1 April 1993" trigger('1994/08/09', 12:33) "9 August 1994 AT 12:33" : trigger('1994/08/09@12:33'). : trigger('1994/12/01', 03:00, 1) "30 November 1994 AT 22:00" EST UTC . . trigger() "1 January 1990" UTC . . . trigtags() (TAGs) REM . . ( ) . trigtime() REM AT . REM AT 0 . REM AT DURATION trigtime() + trigduration() . trigtimetz() trigtime() TZ . TZ trigtime() . trigvalid() trigdate() REM 1 0 . REM . REM : REM Mon OMIT Mon SKIP MSG Impossible! typeof(x_arg) arg "STRING" "INT" "DATE" "TIME" "DATETIME" . tzconvert(q_datetime, s_srczone [,s_dstzone]) datetime srczone dstzone . srczone . dstzone . DATETIME . . : tzconvert('2007-07-08@01:14', "Canada/Eastern", "Canada/Pacific") returns 2007-07-07@22:14 /usr/share/zoneinfo srczone dstzone Remind . "!" . upper(s_string) STRING string . : ASCII . ASCII mbupper . mbupper(s_string) STRING string . . utctolocal(q_datetime) DATETIME UTC DATETIME . value(s_varname [,x_default]) . value("X"+"Y") XY . XY . varname . value("XY", 0) XY 0 XY . value (lazy) varname . version() Remind . 06.02.07 "06.02.07" . Remind version() . weekno([dq_date, [i_wkstart, [i_daystart]]]) . ISO 8601 today() . date ISO 8601 . wkstart 0 6 ( 0 6 ). wkstart 1 . daystart . daystart 7 wkstart daystart . wkstart daystart . daystart 29 ( ISO 8601). wkday(dqi_arg) arg DATE DATETIME . arg INT 0 6 ("Sunday" "Saturday") . wkdaynum(dq_date) or wkdaynum(s_str) 0 6 date . (0 6 .) STRING str ( ) . str . year(dq_date) INT date . TIME_T (MACHINES WITH A 32-BIT TIME_T TYPE) C time_t . (UTC) . time_t C :: UTC . Remind <<>> (fold) . (daylight saving) ( ). Remind UTC UTC . UTC . $FoldYear Remind . $FoldYear Remind . (MULTI-DAY EVENTS) AT DURATION . REM : REM 1991-02-13 AT 16:00 DURATION 72:00 MSG 72-hour event REM 1991-02-13 THROUGH 1991-02-16 AT 16:00 MSG Four events : : . : . Remind . : trigdatetime() trigduration() DURATION . trigdatetime() trigduration() . : #!/bin/sh remind - 12 feb 1991 '*6' <<'EOF' BANNER % REM 1991-02-13 AT 16:00 DURATION 72:00 SATISFY 1 set a trigdatetime() set b trigduration() set c trigeventstart() set d trigeventduration() MSG now=[today()] dt=[a] dur=[b] estart=[c] edur=[d]% EOF : now=1991-02-12 dt=1991-02-13@16:00 dur=72:00 estart=1991-02-13@16:00 edur=72:00 now=1991-02-13 dt=1991-02-13@16:00 dur=72:00 estart=1991-02-13@16:00 edur=72:00 now=1991-02-14 dt=1991-02-14@00:00 dur=64:00 estart=1991-02-13@16:00 edur=72:00 now=1991-02-15 dt=1991-02-15@00:00 dur=40:00 estart=1991-02-13@16:00 edur=72:00 now=1991-02-16 dt=1991-02-16@00:00 dur=16:00 estart=1991-02-13@16:00 edur=72:00 now=1991-02-17 dt=1991-02-13@16:00 dur=72:00 estart=-1 edur=-1 trigdatetime() trigduration() trigeventstart trigeventduration . trigeventstart trigeventduration -1 (implementation artifact) . (SELF-OVERLAPPING EVENTS) << >>. Remind ( ). : #!/bin/sh remind - '*5' 10 Feb 1991 <<'EOF' BANNER % REM MON at 0:00 DURATION 192:0 MSG [today()] [trigeventstart()] [trigduration()]% EOF : 1991-02-10 1991-02-04@00:00 48:00 1991-02-11 1991-02-11@00:00 192:00 1991-02-12 1991-02-11@00:00 168:00 1991-02-13 1991-02-11@00:00 144:00 1991-02-14 1991-02-11@00:00 120:00 -- -- -- . . (EXPRESSION PASTING) Remind << >> (expression pasting) . Remind <<>> (paste ). . : REM [mydate] MSG foo <> <> (parser) . <<[>> <<[[>> . : REM MSG Here are [[square] brackets! : Remind <<>> STRING (coerce) . . . : ["[a+b]"] Remind <<[a+b]>> . . . : o Remind SET IF . : SET a 4+5 : SET a [4+5] o . : ["SET"] a 1 Remind ( ) . Remind REM . Remind REM . : REM 12 Nov 1993 AT 13:05 MSG BOO! 12 Nov 1993 AT 13:05 MSG BOO! [12] ["Nov " + 1993] AT [12:05+60] MSG BOO! o (MSG CAL ) REM . MSG : REM ["12 Nov 1993 AT 13:05 " + "MSG" + " BOO!"] (escape hatch) SPECIAL type type type MSG MSF RUN CAL PS PSFILE . : SET type "MSG" REM 12 Nov 2024 SPECIAL [type] Hello Remind . (COMMON PITFALLS WITH EXPRESSION PASTING) ( ) . : REM[expr]MSG[expr] . delta back . : REM +[mydelta] Nov 12 1993 MSG foo mydelta . (FLOW CONTROL COMMANDS) Remind . . IF . IF (THE IF COMMAND) IF : IF expr t-command t-command... ELSE f-command f-command... ENDIF . ELSE . IF INCLUDE . expr INT DATE 1990-01-01 TIME 00:00 DATETIME 1990-01-01@00:00 STRING (non- null) IF (true) t-commands . expr (null) f-commands ( ELSE) . : IF defined("want_hols") INCLUDE /usr/share/remind/holidays ENDIF IF today() > '1992/2/10' set missed_ap "You missed it!" ELSE set missed_ap "Still have time..." ENDIF IFTRIG (THE IFTRIG COMMAND) IFTRIG IF (trigger) ( REM) REM (true) . : IFTRIG 1 Nov ; Executed on 1 Nov ELSE ; Executed except on 1 Nov ENDIF IFTRIG 1 -1 OMIT Sat Sun +4 ; Executed on last working day of month, ; and the 4 working days preceding it ELSE ; Executed except on above days ENDIF IFTRIG trigdate() . UNTIL delta IFTRIG . CAL MSG SATISFY (parse error) . (USER-DEFINED FUNCTIONS) Remind . FSET : FSET fname(args) expr Fname . Args expr . expr . Args . : FSET double(x) 2*x FSET yeardiff(date1, date2) year(date1) - year(date2) FSET since(x) ord($Ty - x) . : REM 1 Nov +12 MSG Dean's [since(1984)] birthday is %b. (Dean) . : Dean's 8th birthday is today. . : REM 4 June MSG [since(1989)] anniversary of the Tienanmen Square massacre : o expr (global) ( ) . o . o value() . : fset func(x) value("x") set x 1 set y func(5) y x . o . ( ) ( ) . o . Remind ( ) (_) . o RUN RUN RUN . FUNSET . . : FUNSET myfunc1 otherfunc thirdfunc myfunc1 otherfunc thirdfunc . FUNSET Remind . FRENAME . : . : FRENAME func_a func_b func_a func_b (unset) . func_a func_b func_a . func_b FRENAME . FRENAME . Remind . FUNSET . <<->> <> : FSET - f(x) 2*x # You must have space before and after the "-" # This will NOT work: # FSET -f(x) 2*x (SAVING AND RESTORING FUNCTIONS) . (stack) (push) (pop). : PUSH-FUNCS msgprefix FSET msgprefix(x) "My new prefix: " INCLUDE block_of_reminders.rem POP-FUNCS block_of_reminders.rem msgprefix . POP-FUNCS msgprefix ( ) (unset) . PUSH-FUNCS . . . Remind . POP-FUNCS PUSH-FUNCS . POP-FUNCS . : FUNSET a FSET b(x) 2*x REM MSG [b(3)] # Outputs 6 PUSH-FUNCS a b FSET a(x) 22*x FSET b(x) 3*x REM MSG [a(3)] [b(3)] # Outputs 66 9 POP-FUNCS REM MSG [a(3)] # Undefined function "a" REM MSG [b(3)] # Outputs 6 (PRECISE SCHEDULING) WARN delta . warn_function . warn_function INT . Remind delta warn_function ... . n warn_function : o n n . o n n OMIT (). . : FSET _wfun(x) choose(x, 5, 3, 1, 0) REM 4 July WARN _wfun MSG American Independence Day is %b. (NOTES) 1 warn_function Remind . 2 warn_function (monotonically decreasing) Remind . 3 warn_function ( ) . warn_function . WARN SCHED . sched_function . SCHED tdelta trep . INT . Remind AT delta repeat . . . . INT TIME . TIME . n n . n AT . SCHED AT . : FSET _sfun(x) choose(x, -60, 30, 15, 10, 3, 1, 1, 1, 1, 0) REM AT 13:00 SCHED _sfun MSG foo -: : . : . : : : : : : : . (NOTES) 1 sched_func Remind AT delta repeat sched_func . 2 sched_func . Remind sched_func . 3 sched_func AT . AT . ( ) AT AT . 4 ( ) . . 5 Remind . . SATISFY (THE SATISFY CLAUSE) REM SATISFY : REM trigger SATISFY expr : Remind . trigdate() . expr . . Remind expr . expr -x . expr trigvalid() <> . trigvalid() . expr trigdate() Remind expr . expr trigdate() Remind . SATISFY: (Friday the 13th) . : # WRONG! REM Fri 13 +2 MSG Friday the 13th is %b. . . : REM 13 SATISFY wkdaynum(trigdate()) == 5 IF trigvalid() REM [trigdate()] +2 MSG \ Friday the 13th is %b. ENDIF REM : REM 13 SATISFY $Tw == 5 . SATISFY (== 5). . : REM Fri SATISFY day(trigdate()) == 13 <<>> << >> . : . : REM 15 SATISFY [isany($Tm, 1, 4, 7, 10)] MSG 15th Reminder! REM . (Labour Day) OMIT . : # Note: SATISFY 1 is an idiom for "do nothing" REM Mon 1 Sept SATISFY 1 OMIT [trigdate()] (CAVEAT): . OMIT . : REM Mon AFTER msg hello . . . Remind OMIT <> . ( SCANFROM << (DETAILS ABOUT TRIGGER COMPUTATION)>> ). OMIT . Remind 03.00.07 MSG RUN SATISFY : REM trigger_stuff SATISFY [expr] MSG body expr SATISFY . MSG RUN . expr . << >> : REM 13 +2 SATISFY [$Tw == 5] MSG Friday the 13th is %b. : REM Mon Wed Thu SATISFY [$Td %2 ] MSG Here it is!!! SATISFY OMITFUNC . SATISFY OMITFUNC . (POSSIBLY-UNCOMPUTABLE TRIGGERS) <> . : REM Mon SKIP SATISFY [isomitted($T+1)] MSG Work between holidays Remind <> . MAYBE-UNCOMPUTABLE : REM MAYBE-UNCOMPUTABLE Mon SKIP SATISFY [isomitted($T+1)] MSG Work between holidays MAYBE-UNCOMPUTABLE . MAYBE-UNCOMPUTABLE evaltrig() -1 . : SET a evaltrig("MAYBE-UNCOMPUTABLE Mon SKIP OMIT Mon") a -1 . (DEBUGGING REMINDER SCRIPTS) -d . -dx . DEBUG . : DEBUG [+flagson] [-flagsoff] flagson flagsoff <> . <<+>> . . : DEBUG +x set a very_complex_expression(many_args) DEBUG -x DUMPVARS (THE DUMPVARS COMMAND) DUMPVARS . : DUMPVARS [-c] [var...] . . (dump) . . -c (constant) <<>> . ERRMSG (THE ERRMSG COMMAND) ERRMSG : ERRMSG body body ( today()) . : IF !defined("critical_var") ERRMSG You must supply a value for "critical_var" EXIT ENDIF EXIT (THE EXIT COMMAND) EXIT . . . ( ) . INT EXIT . . FLUSH (THE FLUSH COMMAND) FLUSH . Remind (flush) . Remind (pipes) . JSON (AGENDA MODE JSON OUTPUT) --json Remind JSON . JSON JSON . : banner banner . banner . banner Remind . noreminders noreminders . noreminders . noreminders <> ( ). event event . JSON <> rem2ps(1) . calendar_body plain_body raw_body . JSON . <> tkremind JSON . (CALENDAR MODE) -c -s -p Remind << >> . Remind . () . -a Remind . -p Rem2PS PostScript . PostScript : remind -p .reminders | rem2ps (pipe) lpr PostScript . <<.reminders>> : remind -c .reminders jan 1993 Remind . today() . today() . MSG CAL . RUN . %"...%" . : REM 6 Jan MSG %"Dianne's birthday%" is %b Remind <> . <> . %"...%" RUN . %"%" MSG CAL . (PRESERVING VARIABLES) Remind . <> <> : SET me shell("whoami") SET hostname shell("hostname") Remind '*N' . PRESERVE <<>> . . : IF ! defined("initialized") set initialized 1 set me shell("whoami") set hostname shell("hostname") fset func(x) complex_expr preserve initialized me hostname ENDIF : <> . IF ENDIF . PRESERVE initialized me hostname . initialized . today() . ( '$' ) . Remind ( INCLUDE) () . . . Remind -b . -g -g . (REPEATED EXECUTION) repeat -c -p -s Remind . today() . . repeat -q -z . Remind : remind .reminders '*7' : (echo 'banner %'; echo 'msg [today()]%') | remind - '*1000' (INITIALIZING VARIABLES ON THE COMMAND LINE) -i Remind . -ivar=expr expr . (escapes) expr . -i . -i -i . . today() -i realtoday() . PRESERVE <<>> (preserved) . -i value() defined() . : -ifunc(args)=definition . (MORE ABOUT POSTSCRIPT) PS PSFILE PostScript . PS PostScript ( ) PSFILE . Rem2PS PSFILE PostScript . PostScript PostScript . PostScript . PostScript . PS PSFILE . PostScript . PostScript . PostScript save-restore . PostScript PostScript save-restore PostScript . PostScript PostScript . PostScript . PostScript PostScript <<>> today() . . PostScript PostScript . PostScript ( ) . : LineWidth . Border . . BoxWidth and BoxHeight . InBoxHeight . . /DayFont, /EntryFont, /SmallFont, /TitleFont and /HeadFont ( ) . DaySize, EntrySize, TitleSize and HeadSize . ( .) : REM PS Border BoxHeight Border sub DaySize sub moveto \ /DayFont findfont DaySize scalefont setfont \ ([hebday(today())] [hebmon(today())]) show DaySize /DayFont . PostScript PostScript . PostScript PostScript . PostScript . (DAEMON MODE) -z Remind << >> . <<>> . . Remind ( ) . Remind . Remind inotify(7) Remind . Remind . Remind -f : remind -z .reminders & sh bash <> (log out) . (PURGE MODE) -j Remind (purge mode) . . Remind <<.purged>> . Remind .purged . Remind *.rem .purged . Remind (INCLUDE) .purged . -j Remind .purged INCLUDE . Remind -j2 .purged ( ) . .purged INCLUDE . . Remind .purged (hand-merge) . Remind .purged : : #!P: Expired: Remind : #!P: Cannot purge SATISFY-type reminders #!P: The next IF evaluated false... #!P: REM statements in IF block not checked for purging. #!P: The previous IF evaluated true. #!P: REM statements in ELSE block not checked for purging #!P: The next IFTRIG did not trigger. #!P: REM statements in IFTRIG block not checked for purging. #!P: Next line has expired, but contains expression... please verify #!P: Next line may have expired, but contains non-constant expression #!P: or a relative SCANFROM clause #!P! Could not parse next line: Some-Error-Message-Here #!P! Problem calculating trigger date Remind .purged <<#!P>> . .purged . (Hush) -h (Purge) -j Remind . .purged <<#!P: Expired>> . (NON-CONSTANT EXPRESSIONS) REM Remind . ( shell()). Remind : o ( ) . o o ( today()) ( shell()) . Remind : o OMITFUNC o SCANFROM Remind . . IF IF . : SET d '2025-06-01' # d is constant REM [d] MSG Hello! # eligible for purging SET d today() - 3 # d is non-constant REM [d] MSG Hello! # not eligible for purging IF wkdaynum(today()) == 3 set d '2025-06-01' # d is non-constant ELSE set d '2026-01-01' # d is non-constant ENDIF SET d '2025-06-01' # d is constant IF today() > today() + 3 # This branch is never taken, but... SET d '2029-01-01' # d is still marked non-constant ENDIF # Although here d is still '2025-06-01', it is marked # non-constant because as far as Remind is concerned, # the IF body *might* have been executed depending on today() IF...ENDIF Remind . : SET var const(var) -i . nonconst . : REM 1992-01-01 MSG This will be purged after Jan 1 1992 REM [nonconst('1992-01-01')] MSG This will never be purged REM Wed UNTIL 1993-12-31 MSG This will be purged after 1993 REM Wed UNTIL [nonconst('1993-12-31')] MSG Never purged n Remind . Remind DEBUG +n DEBUG -n . (SORTING REMINDERS) -g Remind . . . Remind . -g <> <> . ( ) . <> . . . . . . . SORTBANNER DATE . : Remind ( ) SORTBANNER . . . - : # Switch off the normal banner BANNER % REM 11 March 1993 ++1 MSG Not so important REM 17 March 1993 ++7 MSG Way in the future REM 10 March 1993 MSG Important Reminder REM 11 March 1993 ++1 MSG Not so important - B FSET sortbanner(x) iif(x == today(), \ "***** THINGS TO DO TODAY *****", \ "----- Things to do %b -----") -gaa : ***** THINGS TO DO TODAY ***** Important Reminder ----- Things to do tomorrow ----- Not so important Not so important - B ----- Things to do in 7 days' time ----- Way in the future args() SORTBANNER . ( SORTBANNER .) : # Create a default sortbanner function if it hasn't already # been defined if args("sortbanner") != 1 fset sortbanner(x) "--- Things to do %b ---" endif MSGPREFIX() MSGSUFFIX() (MSGPREFIX() AND MSGSUFFIX()) msgprefix() msgsuffix() . . MSG MSF Remind : o msgprefix() . . . o . o msgsuffix() . . . : <> <<(not important) >> . fset msgprefix(x) iif(x==0, "URGENT: ", \ x==6000, "(not important) ", "") ( -c -s -p) calprefix() calsuffix() . ( CAL RUN MSG). (NOTES) (carriage return) . msgsuffix() . msgsuffix (backspace) . . ( .) : FSET msgsuffix(x) char(8) + " - suffix on same line" Remind msgprefix() msgsuffix() sortbanner() . : fset msgprefix(x) x/0 (COMPILE-TIME SUPPORT FOR OTHER LANGUAGES) ?BRemind?R . . (RUN-TIME SUPPORT FOR OTHER LANGUAGES) ?BRemind?R . . : $Monday, $Tuesday, $Wednesday, $Thursday, $Friday, $Saturday, $Sunday . UTF-8 . $January, $February, $March, $April, $May, $June, $July, $August, $September, $October, $November, $December . UTF-8 . $Ago, $Am, $And, $At, $Hour, $Is, $Minute, $Now, $On, $Pm, $Today, $Tomorrow, $Was . ?B$Am?R ?B$Pm?R "AM" "PM" ( ) . $Hplu, $Mplu "hour" () "minute" () . "s" . $Fromnow "from now" ( ) . . ?BIF?R . ?BRem2PS?R UTF-8 . ?BTkRemind?R ?Brem2html?R ?Brem2pdf?R UTF-8 . (RUN-TIME MODIFICATION OF THE SUBSTITUTION FILTER) Remind . . ?BRemind?R . : subst_ampm(h) 0 23 . "AM" "PM" . subst_ordinal(d) 1 31 . . ?Id?R "st" "nd" "rd" "th" . subst_?IN?R?B(alt, date, time)?R ?I?R ?IN?R . "%N" ?I ?R. : ?Ialt?R "%*N" ?Idate?R ?Itime?R . subst_?IN?R?Bx(alt, date, time)?R ?I?R . ?Bsubst_?IN?R ?Idate?R ?Itoday()?R . "today" "tomorrow" . . "%b" "the day after tomorrow" . : FSET subst_bx(a,d,t) iif(d==today()+2, "the day after tomorrow", "in " + (d-today()) + " days' time") REM [today()+3] ++3 MSG Event 1 is %b% REM [today()+2] ++3 MSG Event 2 is %b% REM [today()+1] ++3 MSG Event 3 is %b% REM [today()] ++3 MSG Event 4 is %b% : Event 1 is in 3 days' time Event 2 is the day after tomorrow Event 3 is tomorrow Event 4 is today Event 2 "in 2 days' time" "tomorrow" "today" -- ?Bsubst_bx?R . ?Bsubst_Nx?R ?Bsubst_N?R . : FSET subst_bx(a,d,t) iif(d==today()+2, "the day after tomorrow", 0) - : %: ?Bsubst_colon?R %! ?Bsubst_bang?R %? ?Bsubst_question?R %@ ?Bsubst_at?R %# ?Bsubst_hash?R : ?Bsubst_?Iname?B(alt, date, time)?R ?B%{name}?R ?Balt?R 0 ?Bdate?R ?Btime?R . ?B%{name}?R . ?B%*{name}?R ?Balt?R 1 . ?B%{name}?R ?Bsubst_?Iname?R ?B%{name}?R . ?BRemind?R ?BRUN?R . (THE TRANSLATION TABLE) ?BRemind?R . ( ) ( ) . ?BRemind?R . ?BTRANSLATE?R ( ?BTRANS?R ). ?BTRANSLATE?R . : TRANSLATE "New Moon" "Nieuwe maan" TRANSLATE "First Quarter" "Eerste kwartier" TRANSLATE "Full Moon" "Volle maan" TRANSLATE "Last Quarter" "Laatste kwartier" ?B_?R : REM NOQUEUE [moondatetime(0)] MSG [_("New Moon")] (%2) REM NOQUEUE [moondatetime(1)] MSG [_("First Quarter")] (%2) REM NOQUEUE [moondatetime(2)] MSG [_("Full Moon")] (%2) REM NOQUEUE [moondatetime(3)] MSG [_("Last Quarter")] (%2) ?BTRANSLATE?R ?B_?R . ?BTRANSLATE?R : ?I?R ?BRemind?R . ?BDUMP?R ?BRemind?R . ?BCLEAR?R ?BRemind?R . ?BTRANSLATE GENERATE?R ( TRANSLATE) . : TRANSLATE "untranslated" "" : echo "TRANSLATE GENERATE" | remind -h - > /tmp/skeleton.rem : (echo INCLUDE mylang.rem; echo TRANSLATE GENERATE) | remind -h - > /tmp/mylang-update.rem ?Bmylang-update.rem?R . ?B_()?R ?B%(...)?R TRANSLATE : remind -q -n -dq myscript.rem 2>&1 | grep ^TRANSLATE | sort | uniq ?B$Monday?R ?B$December?R ?B$Ago?R ?BSET?R ?BRemind?R ?I?R . ?I ?R ?B$Hplu?R ?B$Mplu?R . "December" ?B$December?R . ?BTRANSLATE CLEAR?R . ?BLANGID?R ?Ben?R . ?BLANGID?R ISO 639 . : TRANSLATE "LANGID" "nl" ?B_("LANGID")?R . ?B_()?R : 1 . . 2 . . 3 . . 4 . . (LANGUAGE PACKS) ?BRemind?R ?B[$SysInclude]/lang?R . : da.rem () de.rem () es.rem () fr.rem () is.rem () it.rem () nl.rem () no.rem () pl.rem () pt.rem () ro.rem (). ( de.rem) : SYSINCLUDE lang/de.rem ?BRemind?R : SYSINCLUDE lang/auto.rem ?BRemind?R . (THE HEBREW CALENDAR) ?BRemind?R - . (jahrzeits ) (smachot ) . (THE HEBREW YEAR) . : (Tishrey) (Heshvan) (Kislev) (Tevet) (Shvat) (Adar) (Nisan) (Iyar) (Sivan) (Tamuz) (Av) (Elul). UTF-8 ?I?R UTF-8 : , , , , , , , , , , , . . . ' ' . ?BRemind?R : Tishrey Tishri Tishrei Heshvan Cheshvan Kheshvan Shvat Shevat Tamuz Tammuz Adar A Adar 1 Adar I 1 . Adar B Adar 2 Adar II 2 . Iyar Iyyar . . . . ?Ichaser?R () . ?Ishalem?R () . . ?BRemind?R . ?BRemind?R . . "hdate" (Amos Shapir) . . (HEBREW DATE FUNCTIONS) hebday(d_date) ?Idate?R . . hebday('1993/04/12') . hebmon(d_date) ?Idate?R . hebmon('1993/04/12') "Nisan" . ivritmon(d_date) ?Idate?R UTF-8 . ivritmon('1993/04/12') "" . hebyear(d_date) ?Idate?R . hebyear('1993/04/12') . hebdate(i_day, s_hebmon [,id_yrstart [,i_jahr [,i_aflag]]]) ?Bhebdate()?R . ?BDATE?R . ?Iday?R . ?Ihebmon?R . ?I UTF-8?R . "Adar A" "Adar B" . . ?Iyrstart?R ?BDATE?R ?BINT?R . ?BDATE?R ?Bhebdate()?R . : hebdate(15, "Nisan", '1990/01/01') 1990/03/30 . ?Iyrstart?R ?BINT?R . : hebdate(22, "Kislev", 5756) 1995/12/15 . ?BRemind?R . ?Iyrstart?R ?Btoday()?R . ?Ijahr?R ?Bhebdate()?R : ?Ijahr?R 0 () ?Bhebdate()?R . : hebdate(30, "Adar A", 1993/01/01) 1995/03/02 . (Purim Katan) . ?Ijahr?R 1 : o ?Ichaser?R () o ?Ichaser?R () o o (smachot) - "JAHRZEITS" . ?Ijahr?R 2 : o ?Ichaser?R o o ?Ijahr?R 0 1 2 "JAHRZEITS" . ?Iaflag?R . ?Iaflag?R ?I?R ?Iyrstart?R ?BDATE?R . ?Iaflag?R ?Ihebmon?R "Adar" . : o ?Iaflag?R 0 . . o ?Iaflag?R 1 . . o ?Iaflag?R 2 . . (JAHRZEITS) (jahrzeit) . - . . : o ?Ichaser?R ?Ichaser?R . ?Ichaser?R . o ?Ichaser?R ?Ichaser?R . ?Ichaser?R . o . o . ?Ijahr?R . ?Iaflag?R . (Frank Yellin) "The Comprehensive Hebrew Calendar" (Arthur Spier) "Calendrical Calculations" . . (E. M. Reingold) (Nachum Dershowitz) . (OUT-OF-BAND REMINDERS) ?BSPECIAL?R << >> (out-of-band) ?BRemind?R ?Btkremind?R ?BRem2PS?R . ?Bremind -p?R . ( COLOR ?B-p?R MSG .) ?BSPECIAL?R ?BSPECIAL?R . ?BRem2PS?R ?Btkremind?R ?Brem2html?R . ?BSHADE?R ?Bpsshade()?R . : REM Sat Sun SPECIAL SHADE 128 REM Mon SPECIAL SHADE 255 0 0 ?BSHADE?R 0 255 . (0) (255) . RGB (0) (255) . . ( ?BRem2PS?R ?Btkremind?R ?Brem2html?R .) ?BMOON?R ?Bpsmoon()?R . : REM [moondate(0)] SPECIAL MOON 0 REM [moondate(1)] SPECIAL MOON 1 REM [moondate(2)] SPECIAL MOON 2 REM [moondate(3)] SPECIAL MOON 3 . ?BMOON?R : ... SPECIAL MOON phase moonsize fontsize msg ?IPhase?R 0 3 0 1 2 3 . ?Imoonsize?R PostScript . -1 . ?Ifontsize?R PostScript ?Imsg?R . ?IMsg?R . ?BRem2PS?R ?Imoonsize?R ?Ifontsize?R . ?BCOLOR?R . : REM ... SPECIAL COLOR 255 0 0 This is a bright red reminder REM ... SPECIAL COLOR 0 128 0 This is a dark green reminder COLOR ("COLOR") ("COLOUR") . . COLOR 0 255 . . COLOR ?Bremind?R MSG . ?BRemind?R ?B-@?R[?In?R] SPECIAL COLOR . ?B$DefaultColor?R " (SYSTEM VARIABLES)" . ?BWEEK?R . ISO 8601 . "(W?In?R)" WEEK . REM Monday SPECIAL WEEK (W[weekno()]) (MISCELLANEOUS) (COMMAND AND KEYWORD ABBREVIATIONS) : o ?BCLEAR-OMIT-CONTEXT?R --> ?BCLEAR?R o ?BPUSH-OMIT-CONTEXT?R --> ?BPUSH?R o ?BPOP-OMIT-CONTEXT?R --> ?BPOP?R o ?BDUMPVARS?R --> ?BDUMP?R o ?BBANNER?R --> ?BBAN?R o ?BINCLUDE?R --> ?BINC?R o ?BMAYBE-UNCOMPUTABLE?R --> ?BMAYBE?R o ?BSCANFROM?R --> ?BSCAN?R (NIFTY EXAMPLES) ?BRemind?R . REM 5 Feb 1991 AT 14:00 +45 *30 RUN mail -s "Meeting at %2" $LOGNAME : : : : . "Meeting at 2:00pm" . REM AT 17:00 RUN echo "5:00pm - GO HOME!" | xless -g +0+0 & : xless . xless "5:00pm - GO HOME!" . REM AT 23:59 RUN (sleep 120; remind -a [filename()]) & . ?BRemind?R . . ?BRemind?R . remind -c12 /dev/null Jan 1993 ?BRemind?R . REM CAL [trigdate()-date(year(trigdate()), 1, 1)+1] ( ) . REM Tue 2 Nov SATISFY (year(trigdate())%4) == 0 IF trigvalid() REM [trigdate()] ++5 MSG U.S. Presidential Election!! ENDIF . ?BREM?R . ( .) ?BSATISFY?R . ?BREM?R . (DETAILS ABOUT TRIGGER COMPUTATION) ?I?R . ?BRemind?R . ?BRemind?R ( ?Btoday()?R) ( ?Btoday()?R) . ?BRemind?R ?BSATISFY?R ?Btrigdate()?R . ?BRemind?R . ?BSCANFROM?R ( ?BUNTIL?R ) . ?BRemind?R ?Iscan_date?R ?BSCANFROM?R . : REM Mon 1 SCANFROM 17 Jan 1992 MSG Foo . ?BRemind?R "Mon 1" . ?BSCANFROM?R . (Labour Day) . . : REM Mon 1 Sept SCANFROM [today()-7] ADDOMIT MSG Labour Day REM Mon AFTER MSG Hello ?BSCANFROM?R ?BRemind?R . . AFTER . SCANFROM -N N . : REM Mon 1 Sept SCANFROM -7 ADDOMIT MSG Labour Day REM Mon AFTER MSG Hello SCANFROM ?ISCANFROM ?R SCANFROM ?ISCANFROM ?R . ?BSCANFROM?R ?BOMIT?R . ( ) ?BOMIT?R . . ?BFROM?R ?BUNTIL?R . ?BFROM?R . : REM Mon Thu FROM 23 Jul 2007 UNTIL 2 Aug 2007 MSG Test ( ) . ?BFROM?R : REM Mon Thu SCANFROM [max(today(), '2007-07-23')] UNTIL 2 Aug 2007 MSG Test . ?BRemind?R ?BFROM?R ?BSCANFROM?R . ?BFROM?R ?BSCANFROM?R . ?BREM?R ( ) ?BREM?R ?I .?R . ?BREM?R ?BREM?R . "defs.rem" ?BRemind?R . TRIGVALID() (DETAILS ABOUT TRIGVALID()) ?Btrigvalid()?R ?BRemind?R ?BREM?R ?BIFTRIG?R 1 . ?BRemind?R ?I ?R 1 . ?Btrigvalid()?R 1 ?Btrigdate()?R : ?BREM?R ?BIFTRIG?R ?BUNTIL?R ?BSATISFY?R ?Iday?R ?Imonth?R ?Iyear?R ?BRemind?R . 03.00.01 ?BRemind?R . (FILES) : $HOME/.reminders ?B$HOME?R . ?BRemind?R . : /usr/share/remind . $SysInclude . (AUTHOR) (Dianne Skoll) ?BRemind?R . "moontool" (John Walker) . / https://github.com/signetica/MoonRise . (Stephen R. Schmitt) (Cyrus Rahman) . (Michael Schwartz) . (Marc T. Kaufman) . "hdate" (Amos Shapir) . . "complete" / . ?B?R -- Wolfgang Thronicke ?B?R -- Willem Kasdorp and Erik-Jan Vens ?B?R -- Mikko Silvonen (complete) ?B?R -- Laurent Duperval (complete) ?B?R -- Trygve Randen ?B?R -- Mogens Lynnerup ?B?R -- Jerzy Sobczyk (complete) ?B ?R -- Marco Paganini (complete) ?B?R -- Valerio Aimale ?B?R -- Liviu Daia ?B?R -- Rafa Couto ?B?R -- Bjorn Davidhsson (BUGS) Remind dianne@skoll.ca . ?Bversion()?R . ?BRemind?R . ?BRemind?R ( ?BOMIT?R ). (BIBLIOGRAPHY) Nachum Dershowitz and Edward M. Reingold, "Calendrical Calculations", ?ISoftware-Practice and Experience?R, Vol. 20(9), Sept. 1990, pp 899-928. L. E. Doggett, ?IAlmanac for computers for the year 1978?R, Nautical Almanac Office, USNO. Richard Siegel and Michael and Sharon Strassfeld, ?IThe First Jewish Catalog?R, Jewish Publication Society of America. Jean Meeus, ?IAstronomical Algorithms, Second Edition?R, Willmann-Bell, Inc. (HOME PAGE) https://dianne.skoll.ca/projects/remind (MAILING LIST) https://dianne.skoll.ca/mailman/listinfo/remind-fans (SEE ALSO) ?Brem?R(1), ?Brem2ps?R(1), ?Brem2pdf?R(1), ?Btkremind?R(1), ?Brem2html?R(1) Remind 2026-06-05 REMIND(1)