Compare commits

...

22 Commits

Author SHA1 Message Date
Dianne Skoll
1cd6205cdd Make TkRemind work on dumb systems that use "poor-man's" bold and italic. 2025-10-23 12:08:02 -04:00
Dianne Skoll
6d9ccc1522 Make bold and italic work on stupid systems. 2025-10-23 11:49:58 -04:00
Dianne Skoll
0268020579 Bump version to 06.01.07 2025-10-23 11:23:10 -04:00
Dianne Skoll
5803d1dd7e Update changelog 2025-10-23 11:22:40 -04:00
Dianne Skoll
5dfce21af6 Add ?tkr=1 2025-10-23 11:18:37 -04:00
Dianne Skoll
8ddb956f9a Change cursor inside links 2025-10-22 23:36:58 -04:00
Dianne Skoll
32421815cd Make the version numbers in WHATSNEW match the ones in Remind. 2025-10-22 22:51:00 -04:00
Dianne Skoll
dbe3bc13fa Make links blue. 2025-10-22 16:48:05 -04:00
Dianne Skoll
c68c716585 Make URLs in man pages clickable. 2025-10-22 16:09:30 -04:00
Dianne Skoll
7a1a5abc0f Give the window an appropriate title. 2025-10-22 13:05:14 -04:00
Dianne Skoll
53a1318306 Tweak man pages to remove "4th Berkeley Distribution" 2025-10-22 12:59:23 -04:00
Dianne Skoll
78fecf28c4 More info 2025-10-22 12:40:20 -04:00
Dianne Skoll
6081d29b11 Reduce flicker. 2025-10-22 12:33:51 -04:00
Dianne Skoll
e0a5125ee0 Set focus to man page window so PgUp, etc work as expected. 2025-10-22 12:30:50 -04:00
Dianne Skoll
c3f790a99b Allow for browsing of other man pages in the "SEE ALSO" section. 2025-10-22 12:27:15 -04:00
Dianne Skoll
3eb507451e Nicely format the man page. 2025-10-22 11:33:20 -04:00
Dianne Skoll
e9e0368418 six => seven 2025-10-22 10:28:49 -04:00
Dianne Skoll
759ae1ab80 Add a "help" button that shows TkRemind's man page, positioned to a useful place. 2025-10-22 10:25:42 -04:00
Dianne Skoll
e8602824a0 Add helpful message. 2025-10-22 09:47:57 -04:00
Dianne Skoll
62301a88cc We don't use _chan any more. 2025-10-20 14:17:52 -04:00
Dianne Skoll
6b163092c7 Check spelling of Perl man pages too. 2025-10-20 13:55:33 -04:00
Dianne Skoll
f8ac99d22e Tighten up display 2025-10-20 13:43:04 -04:00
15 changed files with 398 additions and 162 deletions

18
configure vendored
View File

@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
# Generated by GNU Autoconf 2.72 for remind 06.01.06.
# Generated by GNU Autoconf 2.72 for remind 06.01.07.
#
#
# Copyright (C) 1992-1996, 1998-2017, 2020-2023 Free Software Foundation,
@@ -601,8 +601,8 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='remind'
PACKAGE_TARNAME='remind'
PACKAGE_VERSION='06.01.06'
PACKAGE_STRING='remind 06.01.06'
PACKAGE_VERSION='06.01.07'
PACKAGE_STRING='remind 06.01.07'
PACKAGE_BUGREPORT=''
PACKAGE_URL='https://dianne.skoll.ca/projects/remind/'
@@ -1258,7 +1258,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
'configure' configures remind 06.01.06 to adapt to many kinds of systems.
'configure' configures remind 06.01.07 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1320,7 +1320,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
short | recursive ) echo "Configuration of remind 06.01.06:";;
short | recursive ) echo "Configuration of remind 06.01.07:";;
esac
cat <<\_ACEOF
@@ -1408,7 +1408,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
remind configure 06.01.06
remind configure 06.01.07
generated by GNU Autoconf 2.72
Copyright (C) 2023 Free Software Foundation, Inc.
@@ -1871,7 +1871,7 @@ cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
It was created by remind $as_me 06.01.06, which was
It was created by remind $as_me 06.01.07, which was
generated by GNU Autoconf 2.72. Invocation command line was
$ $0$ac_configure_args_raw
@@ -4895,7 +4895,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
This file was extended by remind $as_me 06.01.06, which was
This file was extended by remind $as_me 06.01.07, which was
generated by GNU Autoconf 2.72. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -4960,7 +4960,7 @@ ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config='$ac_cs_config_escaped'
ac_cs_version="\\
remind config.status 06.01.06
remind config.status 06.01.07
configured by $0, generated by GNU Autoconf 2.72,
with options \\"\$ac_cs_config\\"

View File

@@ -1,6 +1,6 @@
dnl Process this file with autoconf to produce a configure script.
AC_INIT(remind, 06.01.06, , , https://dianne.skoll.ca/projects/remind/)
AC_INIT(remind, 06.01.07, , , https://dianne.skoll.ca/projects/remind/)
AC_CONFIG_SRCDIR([src/queue.c])
cat <<'EOF'

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,6 @@
# Save variables and functions that we will mess with
PUSH-VARS InIsrael IncludeIsraeliHolidays Reform IncludeOmer IncludeOmerCal SunCal ostart yz
PUSH-FUNCS _chan _h2 _h2I _YZ _PastSat _BackTwoSat
PUSH-FUNCS _h2 _h2I _YZ _PastSat _BackTwoSat
SET InIsrael value("InIsrael", 0)
SET IncludeIsraeliHolidays value("IncludeIsraeliHolidays", 1)

View File

@@ -1,5 +1,4 @@
.TH REM 1 "@RELEASE_DATE@" "User Commands" "VERSION @VERSION@"
.UC 4
.TH REM 1 "@RELEASE_DATE@" "Remind" "VERSION @VERSION@"
.SH NAME
rem \- Invoke Remind with a default filename
.SH SYNOPSIS

View File

@@ -1,5 +1,4 @@
.TH REM2PS 1 "@RELEASE_DATE@" "User Commands" "VERSION @VERSION@"
.UC 4
.TH REM2PS 1 "@RELEASE_DATE@" "Remind" "VERSION @VERSION@"
.SH NAME
rem2ps \- draw a PostScript calendar from Remind output
.SH SYNOPSIS

View File

@@ -1,5 +1,4 @@
.TH REMIND 1 "@RELEASE_DATE@" "User Commands" "VERSION @VERSION@"
.UC 4
.TH REMIND 1 "@RELEASE_DATE@" "Remind" "VERSION @VERSION@"
.SH NAME
remind \- a sophisticated reminder service
.SH SYNOPSIS

View File

@@ -1,5 +1,4 @@
.TH TKREMIND 1 "@RELEASE_DATE@" "User Commands" "VERSION @VERSION@"
.UC 4
.TH TKREMIND 1 "@RELEASE_DATE@" "Remind" "VERSION @VERSION@"
.SH NAME
tkremind \- graphical front-end to Remind calendar program
.SH SYNOPSIS
@@ -54,9 +53,10 @@ directory before starting \fBTkRemind\fR.
When you start \fBTkRemind\fR, it displays a calendar for the current
month, with today's date highlighted. Reminders are filled into each
box on the calendar. If a box contains many reminders, you can scroll
it up and down by dragging mouse button 2 in the box. Note that there
is no specific indication of an over-full box; you'll just have to
notice that the box appears completely full.
it up and down by dragging mouse button 2 in the box or by using the
scroll wheel (if your mouse has one.) Note that there is no specific
indication of an over-full box; you'll just have to notice that the
box appears completely full.
.SH NAVIGATING
To change to the previous or next month, click the \fB<\-\fR
@@ -76,7 +76,7 @@ To add a reminder, click button 1 in any day number in the calendar.
The \fBAdd Reminder...\fR dialog will pop up, with values preselected for
the day you clicked.
The dialog has six basic groups of controls. The first three lines
The dialog has seven basic groups of controls. The first three lines
select one of three types of reminders. Choose the type of reminder
with the radio buttons, and choose the values of the days, months, and
years by selecting values from pull-down menus. The pull-down menus

View File

@@ -5,7 +5,7 @@ use ExtUtils::MakeMaker;
sub manifypods {
my ($self,%attribs) = @_;
my $result = $self->SUPER::manifypods(%attribs);
$result =~ s/^(POD2MAN_EXE\s*=\s*)(.+)$/$1$2 --center 'VERSION @VERSION@' --date '@RELEASE_DATE@'/m;
$result =~ s/^(POD2MAN_EXE\s*=\s*)(.+)$/$1$2 --center 'VERSION @VERSION@' --date '@RELEASE_DATE@' --release Remind/m;
return $result;
}
}

View File

@@ -251,7 +251,8 @@ if ($settings->{eps}) {
# Don't read from a terminal
if (-t STDIN) { ## no critic
print STDERR "I can't read data from a terminal. Please run like this:\n";
print STDERR " remind -pp [options] filename | $me [options] > out.pdf\n";
print STDERR " remind -pp [options] filename | $me [options] > out.pdf\n\n";
print STDERR "For help, run: $me --help\n";
exit(1);
}

View File

@@ -690,7 +690,7 @@ sub draw_day
$cr->restore();
}
$so_far += $h + 2 * $settings->{border_size};
$so_far += $h + $settings->{border_size};
my $entry_height = 0;
my $done = 0;
foreach my $entry (@{$self->{entries}->[$day]}) {
@@ -819,7 +819,7 @@ sub draw_title
=head2 get_rgb($color)
Parses a 3- or 6-hex-digit color value and returs [red, green, blue]. If
Parses a 3- or 6-hex-digit color value and returns [red, green, blue]. If
color could not be parsed, returns undef
=cut

View File

@@ -753,6 +753,8 @@ proc CreateCalWindow { dayNames } {
balloon_add_help .b.queue "See the queue of pending reminders (debugging purposes only)"
button .b.quit -text {Quit} -command {Quit} -bd 0 -foreground $Option(LabelColor) -background $Option(WinBackground) -highlightthickness 1 -highlightcolor $Option(LineColor) -highlightbackground $Option(WinBackground)
balloon_add_help .b.quit "Quit TkRemind"
button .b.help -text {Help} -command [list ShowManPage tkremind 1 1] -bd 0 -foreground $Option(LabelColor) -background $Option(WinBackground) -highlightthickness 1 -highlightcolor $Option(LineColor) -highlightbackground $Option(WinBackground)
balloon_add_help .b.help "Show TkRemind manual"
label .b.status -text "" -width 25 -relief flat -bd 0 -foreground $Option(LabelColor) -background $Option(WinBackground) -highlightthickness 0
bind .b.status <ButtonPress-1> [list ShowTodaysReminders 1 ""]
bind .b.status <ButtonPress-3> [list ShowTodaysReminders 1 ""]
@@ -761,7 +763,7 @@ proc CreateCalWindow { dayNames } {
balloon_add_help .b.nqueued "See the queue of pending reminders (debugging purposes only)"
bind .b.nqueued <ButtonPress-1> [list DoQueue]
bind .b.nqueued <ButtonPress-3> [list DoQueue]
pack .b.prev .b.this .b.next .b.goto .b.print .b.options .b.queue .b.quit -side left -fill both -padx 1
pack .b.prev .b.this .b.next .b.goto .b.print .b.options .b.queue .b.quit .b.help -side left -fill both -padx 1
pack .b.status -side left -fill both -expand 1 -padx 1
pack .b.nqueued -side left -fill both -padx 1
pack .b -side bottom -fill x -expand 0 -pady 1
@@ -1046,6 +1048,7 @@ proc SaveOptions { w } {
.b.print configure -foreground $Option(LabelColor) -background $Option(WinBackground)
.b.queue configure -foreground $Option(LabelColor) -background $Option(WinBackground)
.b.quit configure -foreground $Option(LabelColor) -background $Option(WinBackground)
.b.help configure -foreground $Option(LabelColor) -background $Option(WinBackground)
.b.options configure -foreground $Option(LabelColor) -background $Option(WinBackground)
. configure -background $Option(LineColor)
.h configure -background $Option(LineColor)
@@ -4876,6 +4879,205 @@ proc set_button_to_errors {} {
.b.queue configure -text {Errors...} -command {ShowErrors} -bg #FF5555 -fg black
}
proc ShowManPage { cmd jump destroy } {
global Option env
set w ".man"
if { $destroy != 0 } {
catch { destroy $w }
set l [luminance $Option(WinBackground)]
if {$l < 20000} {
set link_color "#8888FF"
} else {
set link_color "#0000DD"
}
toplevel $w -background $Option(WinBackground)
text $w.t -width 84 -height 30 -wrap none -yscrollcommand "$w.sb set" -foreground $Option(TextColor) -background $Option(BackgroundColor) -font CalBoxFont
$w.t tag configure bold -font {-weight bold}
$w.t tag configure italic -font {-slant italic}
$w.t tag configure underline -underline 1
catch {
$w.t tag configure underline -underlinefg $link_color
}
scrollbar $w.sb -orient vertical -command "$w.t yview"
button $w.ok -text OK -command [list destroy $w] -foreground $Option(TextColor) -background $Option(BackgroundColor) -highlightthickness 1 -highlightcolor $Option(LineColor) -highlightbackground $Option(WinBackground)
grid $w.t -row 0 -column 0 -sticky nsew
grid $w.sb -row 0 -column 1 -sticky ns
grid $w.ok -row 1 -column 0 -stick w
grid columnconfigure $w 0 -weight 1
grid columnconfigure $w 1 -weight 0
grid rowconfigure $w 0 -weight 1
grid rowconfigure $w 1 -weight 0
$w.t tag configure man -foreground $link_color
$w.t tag configure url -foreground $link_color
# Not supported on old Tk versions
catch {
$w.t tag configure man -underlinefg $link_color
$w.t tag configure url -underlinefg $link_color
}
$w.t tag bind man <ButtonPress-1> [list NavigateToManPage $w.t]
$w.t tag bind man <Enter> [list ManEnter $w.t]
$w.t tag bind man <Leave> [list ManLeave $w.t]
$w.t tag bind man <Motion> [list ManMove $w.t]
$w.t tag bind url <ButtonPress-1> [list ManURL $w.t]
$w.t tag bind url <Enter> [list URLEnter $w.t]
$w.t tag bind url <Leave> [list URLLeave $w.t]
$w.t tag bind url <Motion> [list URLMove $w.t]
} else {
$w.t configure -state normal
$w.t delete 1.0 end
}
set env(COLUMNS) 80
set env(MANWIDTH) 80
set env(MAN_KEEP_FORMATTING) 1
set taglist {}
set seealso 0
if {[catch {
set fp [open "|man $cmd" "r+"]
while {[gets $fp line] >= 0} {
# Some systems render bold as "X bs X" and underline as "_ bs X"
# Convert them to our bold and italic indicators
set line [regsub -all {((_\b.)+)} $line "\033\[3m\\0\033\[23m" ]
set line [regsub -all {(_\b)} $line "" ]
set line [regsub -all {((.\b.)+)} $line "\033\[1m\\0\033\[22m" ]
set line [regsub -all {(.\b)} $line "" ]
if {$jump != 0} {
if {[regexp -- {THE.*CALENDAR.*WINDOW} $line]} {
$w.t yview moveto 1
}
}
if {[regexp -- {SEE.*ALSO} $line]} {
set seealso 1
} else {
if {$seealso != 0} {
set seealso 0
lappend taglist man
} else {
set idx [lsearch -exact $taglist "man"]
set taglist [lreplace $taglist $idx $idx]
}
}
set old_taglist $taglist
$w.t insert end " ";
set indexes [regexp -indices -inline -all -- {\e\[[0-9]+m} $line]
if {[llength $indexes] > 0} {
set out 0
foreach i $indexes {
set first [lindex $i 0]
set last [lindex $i 1]
set esc_seq [string range $line [expr $first+2] [expr $last-1]]
switch -- $esc_seq {
"0" {
set idx [lsearch -exact $taglist "bold"]
set taglist [lreplace $taglist $idx $idx]
set idx [lsearch -exact $taglist "italic"]
set taglist [lreplace $taglist $idx $idx]
}
"1" {
lappend taglist "bold"
}
"3" {
lappend taglist "italic"
}
"22" {
set idx [lsearch -exact $taglist "bold"]
set taglist [lreplace $taglist $idx $idx]
}
"23" {
set idx [lsearch -exact $taglist "italic"]
set taglist [lreplace $taglist $idx $idx]
}
}
if { $first > $out } {
ManAddLine $w.t [string range $line $out [expr $first-1]] $old_taglist
}
set old_taglist $taglist
set out [expr $last+1]
}
if {$out < [string length $line]} {
ManAddLine $w.t [string range $line $out end] $taglist
}
} else {
ManAddLine $w.t $line $taglist
}
$w.t insert end "\n";
}
close $fp
} err]} {
$w.t insert end "Could not display TkRemind manual page: $err"
}
$w.t configure -state disabled
if { $destroy } {
CenterWindow $w .
raise $w
}
wm title $w "$cmd Manual Page"
focus $w.t
}
proc ManAddLine { t text tags } {
if {[lsearch -exact $tags man] >= 0} {
$t insert end $text $tags
return
}
if {[regexp -nocase -- {(.*)(https?://[-.a-z0-9_/]+)(.*)} $text m first url last]} {
set t2 tags
lappend t2 url
$t insert end $first $tags
$t insert end $url $t2
$t insert end $last $tags
return
}
$t insert end $text $tags
}
proc URLEnter { t } {
catch {
$t configure -cursor arrow
set r [$t tag prevrange url current]
$t tag add underline [lindex $r 0] [lindex $r 1]
}
}
proc URLLeave { t } {
$t configure -cursor xterm
$t tag remove underline 1.0 end
}
proc URLMove { t } {
URLLeave $t
URLEnter $t
}
proc ManURL { t } {
catch {
set r [$t tag prevrange url current]
set url [$t get [lindex $r 0] [lindex $r 1]]
exec xdg-open "$url?tkr=1"
}
}
proc ManEnter { t } {
$t configure -cursor arrow
$t tag add underline [list current wordstart] [list current wordend]
}
proc ManLeave { t } {
$t configure -cursor xterm
$t tag remove underline 1.0 end
}
proc ManMove { t } {
ManLeave $t
ManEnter $t
}
proc NavigateToManPage { t } {
set text [$t get [list current wordstart] [list current wordend]]
if {[regexp -nocase -- {[a-z0-9_]+} $text man]} {
ShowManPage $man 0 0
}
}
proc ShowErrors {} {
global RemindErrors Option
set w ".errors"
@@ -4921,4 +5123,9 @@ proc DoneShowingErrors {} {
destroy .errors
}
proc luminance { color } {
set rgb [winfo rgb . $color]
return 0.299 * [lindex $rgb 0] + 0.587 * [lindex $rgb 1] + 0.114 * [lindex $rgb 2]
}
main

View File

@@ -13,6 +13,7 @@
13ths
15am
1GB
1p
1pm
20am
20pm
@@ -22,6 +23,7 @@
2s
30PM
34am
3pm
3string34
45am
45pm
@@ -510,6 +512,7 @@ datetime
datetimes
day1
day2
daymap
dayname
daynames
daynum
@@ -591,6 +594,7 @@ gridline
gridlines
groff
gvim
hashref
hasn
hdate
hebdate
@@ -736,6 +740,7 @@ num
ok
oktober
ol
oldstyle
ons
ordx
orthodoxeaster
@@ -785,6 +790,7 @@ rem2ps
rem2ps2
remind's
rescan
rgb
rn
ro
romanian
@@ -911,6 +917,7 @@ ubitux
ui
uid
unbuffered
undef
undefine
underlinefg
uniq
@@ -941,6 +948,8 @@ wkstart
wn
www
x00
x1
x2
xAB
xdg
xinitrc
@@ -948,6 +957,8 @@ xless
xmessage
xsiz
xsiz1
y1
y2
year1
year2
yeardiff

View File

@@ -662,6 +662,12 @@ for i in ../man/*.1 ; do
fi
done
if test -d ../rem2pdf/blib ; then
PERLMANS=`find ../rem2pdf/blib -name '*.1p' -o -name '*.3pm'`
else
PERLMANS=""
fi
# If we have "spellintian", run it against man pages
cat <<'EOF' >> $OUT
@@ -673,7 +679,7 @@ spellintian /dev/null < /dev/null > /dev/null 2>&1
if test $? = 0 ; then
echo "Linting man pages"
# we grep out some false-positives from rem2ps
spellintian --picky ../man/*.1 2>&1 | grep -v -F 'MinX MinX (duplicate word)' | grep -v -F 'MinY MinY (duplicate word)' | grep -v -F 'show show (duplicate word)' >> $OUT 2>&1
spellintian --picky $PERLMANS ../man/*.1 2>&1 | grep -v -F 'MinX MinX (duplicate word)' | grep -v -F 'MinY MinY (duplicate word)' | grep -v -F 'show show (duplicate word)' >> $OUT 2>&1
fi
# If we have "hunspell", run it against man pages
@@ -688,14 +694,13 @@ HUNSPELL="hunspell -d en_US -l -p manpage-personal-dict"
$HUNSPELL /dev/null < /dev/null > /dev/null 2>&1
if test $? = 0; then
echo "Spell-checking man pages, WHATSNEW and README.md"
cat ../man/*.1 | $HUNSPELL -n >> $OUT 2>&1
cat ../man/*.1 $PERLMANS | $HUNSPELL -n >> $OUT 2>&1
cat ../docs/WHATSNEW | $HUNSPELL >> $OUT 2>&1
cat ../README.md | $HUNSPELL >> $OUT 2>&1
# If we have pod2man, check rem2pdf and rem2html man pages too
pod2man < ../rem2html/rem2html.in > /dev/null 2>&1
if test $? = 0 ; then
pod2man < ../rem2html/rem2html.in | $HUNSPELL -n >> $OUT 2>&1
pod2man < ../rem2pdf/bin/rem2pdf.in | $HUNSPELL -n >> $OUT 2>&1
fi
fi

View File

@@ -1046,7 +1046,7 @@ set a057 value("a05"+"6")
"a05" + "6" => "a056"
value("a056") => "SDFJHSDF KSJDFH KJSDFH KSJDFH"
set a058 version()
version() => "06.01.06"
version() => "06.01.07"
set a059 wkday(today())
today() => 1991-02-16
wkday(1991-02-16) => "Saturday"
@@ -2609,7 +2609,7 @@ a056 "SDFJHSDF KSJDFH KJSDFH KSJDFH"
a007 "1991-02-16"
a057 "SDFJHSDF KSJDFH KJSDFH KSJDFH"
a008 "11:44"
a058 "06.01.06"
a058 "06.01.07"
a059 "Saturday"
a010 12
a060 6
@@ -5562,8 +5562,8 @@ REM SATISFY ""
REM SATISFY [version() > "01.00.00"]
../tests/test.rem(1074): SATISFY: expression has no reference to trigdate() or $T...
../tests/test.rem(1074): Trig = Saturday, 16 February, 1991
version() => "06.01.06"
"06.01.06" > "01.00.00" => 1
version() => "06.01.07"
"06.01.07" > "01.00.00" => 1
../tests/test.rem(1074): Trig(satisfied) = Saturday, 16 February, 1991
REM SATISFY [max(x, max(x, 1, 2, 3), 4, 5, 6) * 5]
../tests/test.rem(1075): SATISFY: expression has no reference to trigdate() or $T...
@@ -23707,7 +23707,7 @@ SECURITY: Won't read world-writable file or directory!
Error reading include_dir/ww: Can't open file
SECURITY: Won't read world-writable file or directory!
Error reading include_dir/ww: No files matching *.rem
06.01.06
06.01.07
Enabling test mode: This is meant for the acceptance test.
Do not use --test in production.
In test mode, the system time is fixed at 2025-01-06@19:00