diff -pruN 04.00.01-1/configure 04.00.02-1/configure
--- 04.00.01-1/configure	2022-06-03 20:22:19.000000000 +0000
+++ 04.00.02-1/configure	2022-08-02 18:58:15.000000000 +0000
@@ -4006,7 +4006,7 @@ _ACEOF
 fi
 done
 
-VERSION=04.00.01
+VERSION=04.00.02
 
 
 
diff -pruN 04.00.01-1/configure.in 04.00.02-1/configure.in
--- 04.00.01-1/configure.in	2022-06-03 20:22:19.000000000 +0000
+++ 04.00.02-1/configure.in	2022-08-02 18:58:15.000000000 +0000
@@ -65,7 +65,7 @@ else
 fi
 
 AC_CHECK_FUNCS(setenv unsetenv glob mbstowcs setlocale initgroups)
-VERSION=04.00.01
+VERSION=04.00.02
 AC_SUBST(VERSION)
 AC_SUBST(PERL)
 AC_SUBST(PERLARTIFACTS)
diff -pruN 04.00.01-1/debian/changelog 04.00.02-1/debian/changelog
--- 04.00.01-1/debian/changelog	2022-06-04 08:15:52.000000000 +0000
+++ 04.00.02-1/debian/changelog	2022-08-02 19:31:36.000000000 +0000
@@ -1,3 +1,9 @@
+remind (04.00.02-1) unstable; urgency=medium
+
+  * New upstream version 04.00.02
+
+ -- Jochen Sprickerhof <jspricke@debian.org>  Tue, 02 Aug 2022 21:31:36 +0200
+
 remind (04.00.01-1) unstable; urgency=medium
 
   * Add upstream source
diff -pruN 04.00.01-1/docs/WHATSNEW 04.00.02-1/docs/WHATSNEW
--- 04.00.01-1/docs/WHATSNEW	2022-06-03 20:22:19.000000000 +0000
+++ 04.00.02-1/docs/WHATSNEW	2022-08-02 18:58:15.000000000 +0000
@@ -1,5 +1,21 @@
 CHANGES TO REMIND
 
+* VERSION 4.0 Patch 2 - 2022-08-02
+
+- IMPROVEMENT: remind: Allow more forms of OMIT as per Ian D. Allen!'s request:
+
+               OMIT Month [THROUGH Month]
+               OMIT Day Month [THROUGH Day Month]
+               OMIT Day Month Year [THROUGH Day Month Year]
+
+- BUG FIX: Make $T behave as documented, exactly like trigdate().  $T would
+  return '1989-12-31' rather than 0 if the trigger date was not valid.
+
+- BUG FIX: TkRemind: Fix resizing bug for a calendar with 6 rows.
+
+- DOCUMENTATION IMPROVEMENT: Improve TkRemind documentation; document use
+  of inotifywait if available.
+
 * VERSION 4.0 Patch 1 - 2022-06-03
 
 - IMPROVEMENT: Add $SuppressLRM system variable to suppress the UTF-8
diff -pruN 04.00.01-1/.github/README.md 04.00.02-1/.github/README.md
--- 04.00.01-1/.github/README.md	1970-01-01 00:00:00.000000000 +0000
+++ 04.00.02-1/.github/README.md	2022-08-02 18:58:15.000000000 +0000
@@ -0,0 +1,7 @@
+# Remind has moved
+
+For various reasons, I have decided to move Remind off GitHub.  This repo
+will be archived.  To create merge requests or issues, please visit
+Remind's new home at https://salsa.debian.org/dskoll/remind
+
+-- Dianne Skoll
diff -pruN 04.00.01-1/man/remind.1 04.00.02-1/man/remind.1
--- 04.00.01-1/man/remind.1	2022-06-03 20:22:19.000000000 +0000
+++ 04.00.02-1/man/remind.1	2022-08-02 18:58:15.000000000 +0000
@@ -1532,11 +1532,11 @@ In addition to being a keyword in the \f
 \fBOMIT\fR is a command in its own right.  Its syntax is:
 .PP
 .RS
-\fBOMIT\fR \fIday\fR \fImonth\fR [\fIyear\fR]
+\fBOMIT\fR [\fIday\fR] \fImonth\fR [\fIyear\fR]
 .PP
 or:
 .PP
-\fBOMIT\fR \fIday1\fR \fImonth1\fR \fIyear1\fR \fBTHROUGH\fR \fIday2\fR \fImonth2\fR \fIyear2\fR
+\fBOMIT\fR [\fIday1\fR] \fImonth1\fR [\fIyear1\fR] \fBTHROUGH\fR [\fIday2\fR] \fImonth2\fR [\fIyear2\fR]
 .RE
 .PP
 The \fBOMIT\fR command is used to "globally" omit certain days
@@ -1545,8 +1545,13 @@ The \fBOMIT\fR command is used to "globa
 "\-\-" and "\+\+" forms.  Some examples:
 .PP
 .nf
-	OMIT 1 Jan
-	OMIT 7 Sep 1992
+    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
 .fi
 .PP
 The first example specifies a holiday that occurs on the same date each
@@ -1578,9 +1583,7 @@ equivalent:
 .fi
 .PP
 The \fBTHROUGH\fR keyword lets you conveniently OMIT a range of days.
-The starting and ending points must be fully-specified (ie, they must
-include day, month and year.).  For example, the following sequences
-are equivalent:
+For example, the following sequences are equivalent:
 .PP
 .nf
 	OMIT 3 Jan 2011
@@ -1592,12 +1595,28 @@ are equivalent:
 	OMIT 3 Jan 2011 THROUGH 5 Jan 2011
 .fi
 .PP
-You can make a THROUGH \fBOMIT\fR do double-duty as a \fBREM\fR command:
+You can make a THROUGH \fBOMIT\fR do double-duty as a \fBREM\fR command as
+long as both dates are fully specified
 .PP
 .nf
 	OMIT 6 Sep 2010 THROUGH 10 Sep 2010 MSG Vacation
 .fi
-
+.PP
+If you use a THROUGH clause, then either the year must be supplied before
+and after the THROUGH, or it must be missing before and after the THROUGH.
+The following are legal:
+.PP
+.nf
+    OMIT 25 Dec THROUGH 6 Jan
+    OMIT 25 Dec 2024 THROUGH 6 Jan 2025
+.fi
+.PP
+But the following are not:
+.PP
+.nf
+    OMIT 25 Dec THROUGH 6 Jan 2025
+    OMIT 25 Dec 2024 THROUGH 6 Jan
+.nf
 .PP
 You can debug your global OMITs with the following command:
 .PP
@@ -2342,8 +2361,8 @@ For example, the coordinates of the Stat
 are approximately set by:
 .PP
 .nf
-        SET $Latitude   "40.68933"
-        SET $Longitude "-74.04454"
+    SET $Latitude   "40.68933"
+    SET $Longitude "-74.04454"
 .fi
 .RE
 .TP
@@ -3238,7 +3257,7 @@ takes \fIa\fR back to 2009-05-13.
 .TP
 .B strlen(s_str)
 Returns the length of \fIstr\fR.  If the length of \fIstr\fR is too large
-to represent as an integers, emits a "Number too high" error.
+to represent as an integer, emits a "Number too high" error.
 .TP
 .B substr(s_str, i_start [,i_end])
 Returns a \fBSTRING\fR consisting of all characters in \fIstr\fR from
diff -pruN 04.00.01-1/man/tkremind.1 04.00.02-1/man/tkremind.1
--- 04.00.01-1/man/tkremind.1	2022-06-03 20:22:19.000000000 +0000
+++ 04.00.02-1/man/tkremind.1	2022-08-02 18:58:15.000000000 +0000
@@ -18,13 +18,13 @@ as well as the tcllib extension.  It als
 binary.  If you are using Tcl/Tk 8.5, you may also need either the Img
 or the tkpng extension to handle PNG images.
 
-.SH OPTIONS
-\fBTkRemind\fR itself has no options.  However, it passes certain options
-on to \fBRemind\fR.  The options it passes are
-\fB\-b\fR, \fB\-g\fR, \fB\-x\fR, \fB\-i\fR and \fB\-m\fR.
-See the \fBRemind\fR man page for details about the options.
-Note that \fBTkRemind\fR will respect the \fB\-m\fR and
-\fB\-b1\fR options and adjust its appearance accordingly.
+.SH COMMAND-LINE OPTIONS
+\fBTkRemind\fR itself has no command-line options.  However, it passes
+certain options on to \fBRemind\fR.  The options it passes are
+\fB\-b\fR, \fB\-g\fR, \fB\-x\fR, \fB\-i\fR and \fB\-m\fR.  See the
+\fBRemind\fR man page for details about the options.  Note that
+\fBTkRemind\fR will respect the \fB\-m\fR and \fB\-b1\fR options and
+adjust its appearance accordingly.
 
 \fIRead_file\fR is the file from which \fBTkRemind\fR reads reminders.
 It is in standard \fBRemind\fR format.  \fIWrite_file\fR is the file
@@ -44,8 +44,14 @@ include the line:
 .PP
 
 \fIConfig_file\fR is the file in which \fBTkRemind\fR stores
-its options.  If it is omitted, it defaults to \fI$HOME/.tkremindrt\fR.
+its options.  If it is omitted, it defaults to \fI$HOME/.config/tkremindrc\fR.
 
+.PP
+If \fB$HOME/.reminders\fR is a \fIdirectory\fR, then \fBTkRemind\fR defaults to
+reading \fB$HOME/.reminders\fR and writing new reminders to
+\fB$HOME/.reminders/100-tkremind.rem\fR.  If you want to keep your
+reminders in a directory \fB$HOME/.reminders\fR, you should create that
+directory before starting \fBTkRemind\fR.
 .SH THE CALENDAR WINDOW
 When you start \fBTkRemind\fR, it displays a calendar for the current
 month, with today's date highlighted.  Reminders are filled into each
@@ -274,7 +280,7 @@ Similar to Change entry font, but applie
 .PP
 Once you've configured the options the way you like them,
 press \fBApply Options\fR to put them into effect, \fBSave Options\fR
-to put them into effect and save them in $HOME/.tkremindrc, or
+to put them into effect and save them in $HOME/.config/tkremindrc, or
 \fBCancel\fR to cancel any changes you made.
 
 .SH KEYBOARD SHORTCUTS
@@ -293,6 +299,19 @@ Next Month
 .B Home
 Today
 
+.SH IMMEDIATE UPDATES
+
+If you are running \fBTkRemind\fR on Linux and have the
+\fBinotifywait\fR program installed (part of the \fBinotify-tools\fR
+or similar package), then \fBTkRemind\fR redraws the calendar window
+\fIimmediately\fR if \fB$HOME/.reminders\fR changes (or, if it is a
+directory, any files in that directory change.)
+.PP
+This lets \fBTkRemind\fR react immediately to hand-edited reminders or
+to reminder files that are imported from another calendar system (for example,
+you may have a cron job that periodically imports your Google Calendar
+entries into Remind format.)
+
 .SH ODDS AND ENDS
 \fBTkRemind\fR performs some basic consistency checks when you add or
 preview a reminder.  However, if you edit a reminder in the previewer,
@@ -323,8 +342,7 @@ You can use this to activate certain rem
 for \fBTkRemind\fR (for example).
 .PP
 \fBTkRemind\fR uses tags to keep track of reminders in the
-script file.  It also places special comments in the reminder
-file to store additional state.  You can certainly mix
+script file. You can certainly mix
 "hand-crafted" reminders with reminders created by \fBTkRemind\fR
 if you are aware of the following rules and limitations:
 .TP
@@ -334,15 +352,16 @@ where \fInnn\fR is a number.  You should
 in hand-crafted reminders.
 .TP
 o
-Do not edit lines starting with "# TKTAGnnn", "# TKEND", or any
-lines in between.  You can move such lines, but be careful to move
-them as a single block.
-.TP
-o
 Hand-crafted reminders cannot be edited with \fBTkRemind\fR, and
 for hand-crafted timed reminders, you will not be presented with
 the "Don't remind me again" option when they pop up.
 
+.PP
+However, rather than mixing hand-edited files with \fBTkRemind\fR-generated
+ones, it is better to make \fB$HOME/.reminders\fR a directory and keep
+your hand-edited files in a separate \fB*.rem\fR file than \fBTkRemind\fR's
+\fB100-tkremind.rem\fR file.
+
 .SH SERVER MODE
 
 \fBRemind\fR has a special mode for interacting with programs like
@@ -400,13 +419,13 @@ This line is emitted in response to a \f
 .SH AUTHOR
 TkRemind was written by Dianne Skoll <dianne@skoll.ca>
 
-\fBTkRemind\fR is Copyright 1996-2020 by Dianne Skoll.
+\fBTkRemind\fR is Copyright 1996-2022 by Dianne Skoll.
 
 .SH FILES
 
-$HOME/.reminders -- default reminder file.
+$HOME/.reminders -- default reminder file or directory.
 
-$HOME/.tkremindrc -- \fBTkRemind\fR saved options.
+$HOME/.config/tkremindrc -- \fBTkRemind\fR saved options.
 
 .SH SEE ALSO
 \fBremind\fR, \fBrem2ps\fR, \fBrem2pdf\fR, \fBrem2html\fR
diff -pruN 04.00.01-1/scripts/tkremind 04.00.02-1/scripts/tkremind
--- 04.00.01-1/scripts/tkremind	2022-06-03 20:22:19.000000000 +0000
+++ 04.00.02-1/scripts/tkremind	2022-08-02 18:58:15.000000000 +0000
@@ -547,7 +547,9 @@ proc ConfigureCalFrame { w firstDay numD
 	$w.t$i configure -state disabled -takefocus 0
     }
     for {set i $first} {$i <= $last} {incr i} {
+	set row [expr ($i/7)+1]
 	grid $w.f$i
+        grid rowconfigure $w $row -weight 1
         pack $w.l$i -in $w.f$i -side top -expand 0 -fill x
         pack $w.t$i -in $w.f$i -side top -expand 1 -fill both
         raise $w.l$i
@@ -581,7 +583,7 @@ proc ConfigureCalFrame { w firstDay numD
             pack $w.t$i -in $w.f$i -side top -expand 1 -fill both
             raise $w.l$i
             raise $w.t$i
-	    grid rowconfigure $w [expr $row+1] -weight 1
+	    grid rowconfigure $w $row -weight 1
 	}
 	$w.l$i configure -text "" -command "" -state normal -relief flat -foreground $Option(LabelColor) -background $Option(WinBackground) -highlightcolor $Option(LineColor) -highlightbackground $Option(WinBackground)
         $w.l$i configure -state disabled
diff -pruN 04.00.01-1/src/err.h 04.00.02-1/src/err.h
--- 04.00.01-1/src/err.h	2022-06-03 20:22:19.000000000 +0000
+++ 04.00.02-1/src/err.h	2022-08-02 18:58:15.000000000 +0000
@@ -70,7 +70,7 @@
 #define E_MON_TWICE	     51
 #define E_DAY_TWICE	     52
 #define E_UNKNOWN_TOKEN	     53
-#define E_SPEC_MON_DAY	     54
+#define E_SPEC_MON    	     54
 #define E_2MANY_PART	     55
 #define E_2MANY_FULL	     56
 #define E_PUSH_NOPOP	     57
@@ -187,7 +187,7 @@ EXTERN char *ErrMsg[]
     "Month specified twice",
     "Day specified twice",
     "Unknown token",
-    "Must specify month and day in OMIT command",
+    "Must specify month in OMIT command",
     "Too many partial OMITs",
     "Too many full OMITs",
     "Warning: PUSH-OMIT-CONTEXT without matching POP-OMIT-CONTEXT",
diff -pruN 04.00.01-1/src/langs/finnish.h 04.00.02-1/src/langs/finnish.h
--- 04.00.01-1/src/langs/finnish.h	2022-06-03 20:22:19.000000000 +0000
+++ 04.00.02-1/src/langs/finnish.h	2022-08-02 18:58:15.000000000 +0000
@@ -195,7 +195,7 @@ EXTERN char *ErrMsg[] =
     "Kuukausi annettu kahdesti",
     "Päivä annettu kahdesti",
     "Tuntematon sana tai merkki",
-    "OMIT-komennossa on annettava kuukausi ja päivä",
+    "OMIT-komennossa on annettava kuukausi",
     "Liian monta osittaista OMIT-komentoa",
     "Liian monta täydellistä OMIT-komentoa",
     "Varoitus: PUSH-OMIT-CONTEXT ilman POP-OMIT-CONTEXTia",
diff -pruN 04.00.01-1/src/langs/polish.h 04.00.02-1/src/langs/polish.h
--- 04.00.01-1/src/langs/polish.h	2022-06-03 20:22:19.000000000 +0000
+++ 04.00.02-1/src/langs/polish.h	2022-08-02 18:58:15.000000000 +0000
@@ -185,7 +185,7 @@ EXTERN char *ErrMsg[] =
     "Miesiąc podany dwókrotnie",
     "Dzień podany dwókrotnie",
     "Nieznane słowo",
-    "W komendzie OMIT trzeba podać miesiąc i dzień",
+    "W komendzie OMIT trzeba podać miesiąc",
     "Za dużo częściowych komend OMIT",
     "Za dużo pełnych komend OMIT",
     "Ostrzeżenie: PUSH-OMIT-CONTEXT bez POP-OMIT-CONTEXT",
diff -pruN 04.00.01-1/src/langs/portbr.h 04.00.02-1/src/langs/portbr.h
--- 04.00.01-1/src/langs/portbr.h	2022-06-03 20:22:19.000000000 +0000
+++ 04.00.02-1/src/langs/portbr.h	2022-08-02 18:58:15.000000000 +0000
@@ -194,7 +194,7 @@ EXTERN char *ErrMsg[] =
     "Mes especificado duas vezes",
     "Dia especificado duas vezes",
     "Token desconhecido",
-    "Mes e dia devem ser especificados no comando OMIT",
+    "O mes deve ser especificados no comando OMIT",
     "Muitos OMITs parciais",
     "Muitos OMITs full",
     "Aviso: PUSH-OMIT-CONTEXT sem POP-OMIT-CONTEXT correspondente",
diff -pruN 04.00.01-1/src/omit.c 04.00.02-1/src/omit.c
--- 04.00.01-1/src/omit.c	2022-06-03 20:22:19.000000000 +0000
+++ 04.00.02-1/src/omit.c	2022-08-02 18:58:15.000000000 +0000
@@ -271,7 +271,6 @@ static void InsertIntoSortedArray(int *a
     *cur = key;
 }
 
-static int DoThroughOmit(ParsePtr p, int y, int m, int d);
 static void DumpOmits(void);
 
 /***************************************************************/
@@ -283,11 +282,15 @@ static void DumpOmits(void);
 /***************************************************************/
 int DoOmit(ParsePtr p)
 {
-    int y = NO_YR, m = NO_MON, d = NO_DAY, r;
+    int y[2] = {NO_YR, NO_YR}, m[2] = {NO_MON, NO_MON}, d[2] = {NO_DAY, NO_DAY}, r;
     Token tok;
-    int parsing=1;
+    int parsing = 1;
+    int seen_through = 0;
     int syndrome;
     int not_first_token = -1;
+    int start, end, tmp;
+
+    int mc, dc;
 
     DynamicBuffer buf;
     DBufInit(&buf);
@@ -308,28 +311,28 @@ int DoOmit(ParsePtr p)
 
 	case T_Date:
 	    DBufFree(&buf);
-	    if (y != NO_YR) return E_YR_TWICE;
-	    if (m != NO_MON) return E_MON_TWICE;
-	    if (d != NO_DAY) return E_DAY_TWICE;
-	    FromJulian(tok.val, &y, &m, &d);
+	    if (y[seen_through] != NO_YR) return E_YR_TWICE;
+	    if (m[seen_through] != NO_MON) return E_MON_TWICE;
+	    if (d[seen_through] != NO_DAY) return E_DAY_TWICE;
+	    FromJulian(tok.val, &y[seen_through], &m[seen_through], &d[seen_through]);
 	    break;
 
 	case T_Year:
 	    DBufFree(&buf);
-	    if (y != NO_YR) return E_YR_TWICE;
-	    y = tok.val;
+	    if (y[seen_through] != NO_YR) return E_YR_TWICE;
+	    y[seen_through] = tok.val;
 	    break;
 
 	case T_Month:
 	    DBufFree(&buf);
-	    if (m != NO_MON) return E_MON_TWICE;
-	    m = tok.val;
+	    if (m[seen_through] != NO_MON) return E_MON_TWICE;
+	    m[seen_through] = tok.val;
 	    break;
 
 	case T_Day:
 	    DBufFree(&buf);
-	    if (d != NO_DAY) return E_DAY_TWICE;
-	    d = tok.val;
+	    if (d[seen_through] != NO_DAY) return E_DAY_TWICE;
+	    d[seen_through] = tok.val;
 	    break;
 
 	case T_Delta:
@@ -338,8 +341,9 @@ int DoOmit(ParsePtr p)
 
 	case T_Through:
 	    DBufFree(&buf);
-	    if (y == NO_YR || m == NO_MON || d == NO_DAY) return E_INCOMPLETE;
-	    return DoThroughOmit(p, y, m, d);
+            if (seen_through) return E_UNTIL_TWICE;
+            seen_through = 1;
+            break;
 
 	case T_Empty:
 	case T_Comment:
@@ -358,26 +362,85 @@ int DoOmit(ParsePtr p)
 	    return E_UNKNOWN_TOKEN;
 	}
     }
-    if (m == NO_MON || d == NO_DAY) return E_SPEC_MON_DAY;
 
-    if (y == NO_YR) {
-	if (NumPartialOmits == MAX_PARTIAL_OMITS) return E_2MANY_PART;
+    if (!seen_through) {
+        /* We must have at least a month */
+        if (m[0] == NO_MON) return E_SPEC_MON;
+        m[1] = m[0];
+        y[1] = y[0];
+        if (d[0] == NO_DAY) {
+            d[0] = 1;
+            if (y[0] == NO_YR) {
+                d[1] = MonthDays[m[0]];
+            } else {
+                d[1] = DaysInMonth(m[0], y[0]);
+            }
+        } else {
+            d[1] = d[0];
+            m[1] = m[0];
+            y[1] = y[0];
+        }
+    } else {
+        if (m[0] == NO_MON) return E_SPEC_MON;
+        if (m[1] == NO_MON) return E_SPEC_MON;
+        if ((y[0] != NO_YR && y[1] == NO_YR) ||
+            (y[0] == NO_YR && y[1] != NO_YR)) {
+            return E_BAD_DATE;
+        }
+        if (d[0] == NO_DAY) d[0] = 1;
+        if (d[1] == NO_DAY) {
+            if (y[1] == NO_YR) {
+                d[1] = MonthDays[m[1]];
+            } else {
+                d[1] = DaysInMonth(m[1], y[1]);
+            }
+        }
+    }
 
-	if (d > MonthDays[m]) return E_BAD_DATE;
-	syndrome = (m<<5) + d;
-	if (!BexistsIntArray(PartialOmitArray, NumPartialOmits, syndrome)) {
-	    InsertIntoSortedArray(PartialOmitArray, NumPartialOmits, syndrome);
-	    NumPartialOmits++;
-	}
+    if (y[0] == NO_YR) {
+        /* Partial OMITs */
+	if (d[0] > MonthDays[m[0]]) return E_BAD_DATE;
+	if (d[1] > MonthDays[m[1]]) return E_BAD_DATE;
+        dc = d[0];
+        mc = m[0];
+        while(1) {
+            syndrome = (mc<<5) + dc;
+            if (!BexistsIntArray(PartialOmitArray, NumPartialOmits, syndrome)) {
+                InsertIntoSortedArray(PartialOmitArray, NumPartialOmits, syndrome);
+                NumPartialOmits++;
+            }
+            if (mc == m[1] && dc == d[1]) {
+                break;
+            }
+            dc++;
+            if (dc > MonthDays[mc]) {
+                dc = 1;
+                mc++;
+                if (mc > 11) {
+                    mc = 0;
+                }
+            }
+        }
     } else {
+        /* Full OMITs */
+	if (d[0] > DaysInMonth(m[0], y[0])) return E_BAD_DATE;
+	if (d[1] > DaysInMonth(m[1], y[1])) return E_BAD_DATE;
+        start = Julian(y[0], m[0], d[0]);
+        end   = Julian(y[1], m[1], d[1]);
+        if (end < start) {
+            Eprint("Error: THROUGH date earlier than start date");
+            return E_BAD_DATE;
+        }
 
-	if (d > DaysInMonth(m, y)) return E_BAD_DATE;
-	syndrome = Julian(y, m, d);
-        r = AddGlobalOmit(syndrome);
-        if (r) {
-            return r;
+        for (tmp = start; tmp <= end; tmp++) {
+            if (!BexistsIntArray(FullOmitArray, NumFullOmits, tmp)) {
+                if (NumFullOmits >= MAX_FULL_OMITS) return E_2MANY_FULL;
+                InsertIntoSortedArray(FullOmitArray, NumFullOmits, tmp);
+                NumFullOmits++;
+            }
         }
     }
+
     if (tok.type == T_Tag || tok.type == T_Duration || tok.type == T_RemType || tok.type == T_Priority) return E_PARSE_AS_REM;
     return OK;
 
@@ -394,95 +457,6 @@ AddGlobalOmit(int jul)
     return OK;
 }
 
-static int
-DoThroughOmit(ParsePtr p, int ystart, int mstart, int dstart)
-{
-    int yend = NO_YR, mend = NO_MON, dend = NO_DAY, r;
-    int start, end, tmp;
-    int parsing = 1;
-
-    Token tok;
-
-    DynamicBuffer buf;
-    DBufInit(&buf);
-
-    while(parsing) {
-	if ( (r=ParseToken(p, &buf)) ) return r;
-	FindToken(DBufValue(&buf), &tok);
-
-	switch(tok.type) {
-	case T_Date:
-	    DBufFree(&buf);
-	    if (yend != NO_YR) return E_YR_TWICE;
-	    if (mend != NO_MON) return E_MON_TWICE;
-	    if (dend != NO_DAY) return E_DAY_TWICE;
-	    FromJulian(tok.val, &yend, &mend, &dend);
-	    break;
-
-	case T_Year:
-	    DBufFree(&buf);
-	    if (yend != NO_YR) return E_YR_TWICE;
-	    yend = tok.val;
-	    break;
-
-	case T_Month:
-	    DBufFree(&buf);
-	    if (mend != NO_MON) return E_MON_TWICE;
-	    mend = tok.val;
-	    break;
-
-	case T_Day:
-	    DBufFree(&buf);
-	    if (dend != NO_DAY) return E_DAY_TWICE;
-	    dend = tok.val;
-	    break;
-
-	case T_Empty:
-	case T_Comment:
-	case T_RemType:
-	case T_Priority:
-	case T_Tag:
-	case T_Duration:
-	    DBufFree(&buf);
-	    parsing = 0;
-	    break;
-
-	default:
-	    Eprint("%s: `%s' (OMIT)", ErrMsg[E_UNKNOWN_TOKEN],
-		   DBufValue(&buf));
-	    DBufFree(&buf);
-	    return E_UNKNOWN_TOKEN;
-
-	}
-    }
-    if (yend == NO_YR || mend == NO_MON || dend == NO_DAY) return E_INCOMPLETE;
-    if (dend > DaysInMonth(mend, yend)) return E_BAD_DATE;
-    if (dstart > DaysInMonth(mstart, ystart)) return E_BAD_DATE;
-
-    start = Julian(ystart, mstart, dstart);
-    end   = Julian(yend,   mend,   dend);
-
-    if (end < start) {
-	Wprint("Warning: Swapping dates on OMIT ... THROUGH ... line");
-	tmp = start;
-	start = end;
-	end = tmp;
-    }
-
-    tmp = end - start + 1;
-
-    /* Don't create any OMITs if there would be too many. */
-    if (NumFullOmits + tmp >= MAX_FULL_OMITS) return E_2MANY_FULL;
-    for (tmp = start; tmp <= end; tmp++) {
-	if (!BexistsIntArray(FullOmitArray, NumFullOmits, tmp)) {
-	    InsertIntoSortedArray(FullOmitArray, NumFullOmits, tmp);
-	    NumFullOmits++;
-	}
-    }
-    if (tok.type == T_Tag || tok.type == T_Duration || tok.type == T_RemType || tok.type == T_Priority) return E_PARSE_AS_REM;
-    return OK;
-}
-
 void
 DumpOmits(void)
 {
diff -pruN 04.00.01-1/src/var.c 04.00.02-1/src/var.c
--- 04.00.01-1/src/var.c	2022-06-03 20:22:19.000000000 +0000
+++ 04.00.02-1/src/var.c	2022-08-02 18:58:15.000000000 +0000
@@ -170,10 +170,11 @@ static int latitude_func(int do_set, Val
 static int trig_date_func(int do_set, Value *val)
 {
     UNUSED(do_set);
-    val->type = DATE_TYPE;
     if (!LastTrigValid) {
+        val->type = INT_TYPE;
 	val->v.val = 0;
     } else {
+        val->type = DATE_TYPE;
 	val->v.val = LastTriggerDate;
     }
     return OK;
diff -pruN 04.00.01-1/tests/test.cmp 04.00.02-1/tests/test.cmp
--- 04.00.01-1/tests/test.cmp	2022-06-03 20:22:19.000000000 +0000
+++ 04.00.02-1/tests/test.cmp	2022-08-02 18:58:15.000000000 +0000
@@ -1024,7 +1024,7 @@ set a057 value("a05"+"6")
 "a05" + "6" => "a056"
 value("a056") => "SDFJHSDF KSJDFH KJSDFH KSJDFH"
 set a058 version()
-version() => "04.00.01"
+version() => "04.00.02"
 set a059 wkday(today())
 today() => 1991-02-16
 wkday(1991-02-16) => "Saturday"
@@ -2594,7 +2594,7 @@ a086  4
 a109  2012-01-01
 a128  2018-02-03@16:45
 a039  "February"
-a058  "04.00.01"
+a058  "04.00.02"
 a077  "1992 92
 "
 a096  -4
@@ -2766,7 +2766,7 @@ Variable  Value
      $SubsIndent  0           [0, 132]
          $Sunday  "Sunday"
     $SuppressLRM  0           [0, 1]
-              $T  1990-01-01
+              $T  0
              $Td  -1
        $Thursday  "Thursday"
         $TimeSep  ":"
@@ -3943,6 +3943,118 @@ $MaxStringLen => 65535
 pad("foo", "0", 65536) => String too long
 ../tests/test.rem(799): String too long
 
+# Test OMIT
+CLEAR-OMIT-CONTEXT
+
+OMIT Apr
+OMIT Jun THROUGH July 15
+OMIT Sep 5 THROUGH Sep 10
+OMIT 2024-12-25 THROUGH 2025-01-04
+OMIT Apr 2022 through July
+../tests/test.rem(808): Bad date specification
+
+OMIT DUMP
+Global Full OMITs (11 of maximum allowed 1000):
+	2024-12-25
+	2024-12-26
+	2024-12-27
+	2024-12-28
+	2024-12-29
+	2024-12-30
+	2024-12-31
+	2025-01-01
+	2025-01-02
+	2025-01-03
+	2025-01-04
+Global Partial OMITs (81 of maximum allowed 366):
+	04-01
+	04-02
+	04-03
+	04-04
+	04-05
+	04-06
+	04-07
+	04-08
+	04-09
+	04-10
+	04-11
+	04-12
+	04-13
+	04-14
+	04-15
+	04-16
+	04-17
+	04-18
+	04-19
+	04-20
+	04-21
+	04-22
+	04-23
+	04-24
+	04-25
+	04-26
+	04-27
+	04-28
+	04-29
+	04-30
+	06-01
+	06-02
+	06-03
+	06-04
+	06-05
+	06-06
+	06-07
+	06-08
+	06-09
+	06-10
+	06-11
+	06-12
+	06-13
+	06-14
+	06-15
+	06-16
+	06-17
+	06-18
+	06-19
+	06-20
+	06-21
+	06-22
+	06-23
+	06-24
+	06-25
+	06-26
+	06-27
+	06-28
+	06-29
+	06-30
+	07-01
+	07-02
+	07-03
+	07-04
+	07-05
+	07-06
+	07-07
+	07-08
+	07-09
+	07-10
+	07-11
+	07-12
+	07-13
+	07-14
+	07-15
+	09-05
+	09-06
+	09-07
+	09-08
+	09-09
+	09-10
+CLEAR-OMIT-CONTEXT
+OMIT 2000-01-01 THROUGH 2020-12-31
+../tests/test.rem(812): Too many full OMITs
+
+OMIT Dec 5 2029 through Dec 4 2029
+../tests/test.rem(814): Error: THROUGH date earlier than start date
+
 # Don't want Remind to queue reminders
 EXIT
 
diff -pruN 04.00.01-1/tests/test.rem 04.00.02-1/tests/test.rem
--- 04.00.01-1/tests/test.rem	2022-06-03 20:22:19.000000000 +0000
+++ 04.00.02-1/tests/test.rem	2022-08-02 18:58:15.000000000 +0000
@@ -798,6 +798,21 @@ set a pad(11:33, " ", 12)
 set a pad(11:33, " ", 12, 1)
 set a pad("foo", "0", $MaxStringLen+1)
 
+# Test OMIT
+CLEAR-OMIT-CONTEXT
+
+OMIT Apr
+OMIT Jun THROUGH July 15
+OMIT Sep 5 THROUGH Sep 10
+OMIT 2024-12-25 THROUGH 2025-01-04
+OMIT Apr 2022 through July
+
+OMIT DUMP
+CLEAR-OMIT-CONTEXT
+OMIT 2000-01-01 THROUGH 2020-12-31
+
+OMIT Dec 5 2029 through Dec 4 2029
+
 # Don't want Remind to queue reminders
 EXIT
 
