From ed57f62911939e4cd38586953afb53da9385d562 Mon Sep 17 00:00:00 2001 From: Dianne Skoll Date: Sun, 2 Nov 2025 08:48:16 -0500 Subject: [PATCH] Add navigation to the Agenda Mode window. --- man/tkremind.1.in | 12 +++-- scripts/tkremind.in | 104 +++++++++++++++++++++++++++++++++----------- 2 files changed, 86 insertions(+), 30 deletions(-) diff --git a/man/tkremind.1.in b/man/tkremind.1.in index f7258bdf..6531c5f3 100644 --- a/man/tkremind.1.in +++ b/man/tkremind.1.in @@ -61,7 +61,7 @@ box appears completely full. .SH NAVIGATING To change to the previous or next month, click the \fB<\-\fR or \fB\->\fR button, respectively. You can also use the left/right arrow -keys or PageUp/PageDown to navigate. +keys or PgUp/PgDown to navigate. To change back to the current month, click \fBToday\fR or press the Home key. To go to a specific month, click \fBGo To Date...\fR. This @@ -150,12 +150,16 @@ You will have to hand-edit it to change it. .SH SEEING A SINGLE DAY'S REMINDERS Right-click on any day number in the calendar to pop up a window with that day's reminders in Agenda Mode. You can left- or right-click the -current date and time indicator at the bottom of the window to see today's -reminders in Agenda Mode. +current date and time indicator at the bottom of the calendar window +to see today's reminders in Agenda Mode. In the Agenda Mode display, hovering over a reminder will show ancillary information such as a Location, URL or Description. Clicking on a reminder -will open an editor on the REM command that created the reminder. +will open an editor on the REM command that created the reminder. You can +also navigate in the Agenda Mode window one day at a time using the +forward and back arrow buttons or left/right arrow keys or PgUp/PgDown. +You can get back to today by clicking \fBToday\fR or pressing the +Home key. .SH PRINTING To print the current month's calendar, click \fBPrint...\fR on the diff --git a/scripts/tkremind.in b/scripts/tkremind.in index 37fe2f7b..5dfedaa4 100644 --- a/scripts/tkremind.in +++ b/scripts/tkremind.in @@ -871,6 +871,10 @@ proc CreateCalWindow { dayNames } { wm protocol . WM_DELETE_WINDOW Quit wm deiconify . bind . Quit + bind . ".b.print flash; .b.print invoke" + bind . ".b.help flash; .b.help invoke" + bind . ".b.help flash; .b.help invoke" + bind . ".b.help flash; .b.help invoke" bind . ".b.prev flash; .b.prev invoke" bind . ".b.next flash; .b.next invoke" bind . ".b.prev flash; .b.prev invoke" @@ -1642,7 +1646,8 @@ proc MoveMonth {delta} { } else { set dt [format "%04d-%02d-%02d" $CurYear [expr $CurMonth+1] $CurDay] set dt [clock scan $dt -format "%Y-%m-%d"] - set dt [expr $dt + 7 * 24 * 60 * 60 * $delta] + # Move to noon to avoid Daylight Saving Time issues! + set dt [expr $dt + 7 * 24 * 60 * 60 * $delta + 43200] set CurYear [clock format $dt -format %Y] set CurMonth [expr [string trim [clock format $dt -format %N]] - 1] set CurDay [string trim [clock format $dt -format %e] ] @@ -4671,6 +4676,61 @@ proc daily_rem_enter { lines } { set Balloon(HelpId) [after $Balloon(HelpTime) [list details_popup $lines]] } +proc MakeTodaysRemindersWindow { w date } { + global Option + if {[winfo exists $w]} { + foreach t [$w.text tag names] { + $w.text tag delete $t + } + if {"$date" == ""} { + set wtitle "Today's Reminders" + } else { + set wtitle "Reminders for $date" + } + raise $w + return + } + + catch { destroy $w } + toplevel $w -background $Option(WinBackground) + if {"$date" == ""} { + set wtitle "Today's Reminders" + } else { + set wtitle "Reminders for $date" + } + wm iconname $w "Reminders" + frame $w.buttons -background $Option(LineColor) + text $w.text -width 80 -height 20 -wrap word -yscrollcommand "$w.sb set" -foreground $Option(TextColor) -background $Option(BackgroundColor) -font CalboxFont -spacing1 3 + scrollbar $w.sb -orient vertical -command "$w.text yview" + button $w.ok -text "OK" -command "destroy $w" -foreground $Option(LabelColor) -background $Option(BackgroundColor) -highlightthickness 1 -highlightcolor $Option(LineColor) -highlightbackground $Option(WinBackground) + button $w.next -text "\u2b9e" -command [list MoveTodaysReminders $w 1] -foreground $Option(LabelColor) -background $Option(BackgroundColor) -highlightthickness 1 -highlightcolor $Option(LineColor) -highlightbackground $Option(WinBackground) + balloon_add_help $w.next "Move forward one day" + button $w.prev -text "\u2b9c" -command [list MoveTodaysReminders $w -1] -foreground $Option(LabelColor) -background $Option(BackgroundColor) -highlightthickness 1 -highlightcolor $Option(LineColor) -highlightbackground $Option(WinBackground) + button $w.today -text "Today" -command { ShowTodaysReminders 1 [clock format [clock seconds] -format "%Y-%m-%d"] } -foreground $Option(LabelColor) -background $Option(BackgroundColor) -highlightthickness 1 -highlightcolor $Option(LineColor) -highlightbackground $Option(WinBackground) + balloon_add_help $w.today "Move to today" + balloon_add_help $w.prev "Move backward one day" + balloon_add_help $w.ok "Dismiss this window" + grid $w.text -row 0 -column 0 -sticky nsew + grid $w.sb -row 0 -column 1 -sticky ns + pack $w.ok $w.prev $w.today $w.next -in $w.buttons -side left -expand 0 -fill none + grid $w.buttons -row 1 -column 0 -sticky w + grid rowconfigure $w 0 -weight 1 + grid rowconfigure $w 1 -weight 0 + grid columnconfigure $w 0 -weight 1 + grid columnconfigure $w 1 -weight 0 + bind $w "$w.prev flash; $w.prev invoke" + bind $w "$w.next flash; $w.next invoke" + bind $w "$w.prev flash; $w.prev invoke" + bind $w "$w.next flash; $w.next invoke" + bind $w "$w.today flash; $w.today invoke" + catch { bind $w "$w.prev flash; $w.prev invoke" } + catch { bind $w "$w.next flash; $w.next invoke" } + catch { bind $w "$w.prev flash; $w.prev invoke" } + catch { bind $w "$w.next flash; $w.next invoke" } + catch { bind $w "$w.today flash; $w.today invoke" } + CenterWindow $w . +} + #*********************************************************************** # %PROCEDURE: ShowTodaysReminders # %ARGUMENTS: @@ -4691,26 +4751,9 @@ proc ShowTodaysReminders { force date } { } set w .today - catch { destroy $w } - toplevel $w -background $Option(WinBackground) - if {"$date" == ""} { - set wtitle "Today's Reminders" - } else { - set wtitle "Reminders for $date" - } - wm iconname $w "Reminders" - text $w.text -width 80 -height 20 -wrap word -yscrollcommand "$w.sb set" -foreground $Option(TextColor) -background $Option(BackgroundColor) -font CalboxFont -spacing1 3 - scrollbar $w.sb -orient vertical -command "$w.text yview" - button $w.ok -text "OK" -command "destroy $w" -foreground $Option(LabelColor) -background $Option(BackgroundColor) -highlightthickness 1 -highlightcolor $Option(LineColor) -highlightbackground $Option(WinBackground) - - grid $w.text -row 0 -column 0 -sticky nsew - grid $w.sb -row 0 -column 1 -sticky ns - grid $w.ok -row 1 -column 0 -sticky w - grid rowconfigure $w 0 -weight 1 - grid rowconfigure $w 1 -weight 0 - grid columnconfigure $w 0 -weight 1 - grid columnconfigure $w 1 -weight 0 - CenterWindow $w . + MakeTodaysRemindersWindow $w $date + $w.text configure -state normal + $w.text delete 1.0 end # Grab the reminders set stuff "" @@ -4720,11 +4763,13 @@ proc ShowTodaysReminders { force date } { } append cmdline $Option(ExtraRemindArgs) append cmdline " $ReminderFile" - if {"$date" != ""} { - append cmdline " $date" - } else { + if { "$date" == "" } { set date [clock format [clock seconds] -format "%Y-%m-%d" -locale C] } + append cmdline " $date" + + set_win_prop $w date $date + append cmdline " 2>/dev/null" set f [open $cmdline r] while {[gets $f line] >= 0} { @@ -4849,11 +4894,18 @@ proc ShowTodaysReminders { force date } { $w.text insert end [dict get $thing body] $tags $w.text insert end "\n" } - - #$w.text insert end "\n\n$stuff\n" $w.text configure -state disabled } +proc MoveTodaysReminders { w amt } { + set date [get_win_prop $w date] + set dt [clock scan $date -format "%Y-%m-%d"] + # We move to noon to avoid dayligh saving time issues! + incr dt [expr 86400 * $amt + 43200] + set date [clock format $dt -format "%Y-%m-%d"] + ShowTodaysReminders 1 $date +} + proc compare_reminders { a b } { set a_date [dict get $a date] set b_date [dict get $b date]