TKREMIND(1)
πΈ NAME πΈ
tkremind(1) β graphical front-end to the Remind calendar program. Version 06.02.07, in case you were wondering, bestie.
β¨ SYNOPSIS β¨
tkremind [options] [read_file [write_file [config_file]]]
π DESCRIPTION π
okay so TkRemind is a graphical front-end to the Remind program. It gives you a friendly graphical interface that lets you view your calendar and add reminders without learning the syntax of Remind first. Not all of Remind's features are available with TkRemind, but TkRemind gives you an opportunity to edit the reminder commands which it creates. That means you can learn Remind's syntax and then add extra features as you become a more sophisticated Remind programmer. iykyk π
TkRemind is written in Tcl, and requires version 8.5 (or higher) as well as the tcllib extension. It also requires a wish binary. If you are using Tcl/Tk 8.5, you may also need either the Img or the tkpng extension to handle PNG images. π
π COMMAND-LINE OPTIONS π
TkRemind itself has only one command-line option: --version, which makes it print the version of TkRemind and exit. Any other command-line argument starting with - is handed to Remind as an option. In addition, TkRemind will respect the -m and -b1 options and adjust its appearance accordingly.
read_fileβ the file from which TkRemind reads reminders. It is in standard Remind format. Ifread_fileis omitted, it defaults to$HOME/.reminders.write_fileβ the file to which TkRemind writes reminders which you add using the GUI. Ifwrite_fileis omitted, it defaults toread_file.config_fileβ the file in which TkRemind stores its options. If it is omitted, it defaults to$HOME/.config/tkremindrc.
You may wish to have a different write_file from read_file if you want to collect all of TkRemind's reminders in one place. Suppose your main file is $HOME/.reminders and you want TkRemind to put its reminders in $HOME/.tkreminders. In $HOME/.reminders, include the line:
INCLUDE [getenv("HOME")]/.tkreminders
If $HOME/.reminders is a directory, then TkRemind defaults to reading $HOME/.reminders and writing new reminders to $HOME/.reminders/100-tkremind.rem. If you want to keep your reminders in a directory $HOME/.reminders, you should create that directory before starting TkRemind. π«Ά
ποΈ THE CALENDAR WINDOW ποΈ
When you start TkRemind, 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 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. π
π§ NAVIGATING π§
To change to the previous or next month, click the <- or -> button, respectively. You can also use the left/right arrow keys or PgUp/PgDn to navigate.
To change back to the current month, click Today or press the Home key. To go to a specific month, click Go To Date... or press g. This pops up a dialog box which allows you to select a month and enter a year. Once you've done this, click Go to go to the date, or Cancel to cancel. Note also that all pop-up windows in TkRemind can be dismissed by pressing Esc or Control-w.
To exit TkRemind, click Quit or press Control-q. βοΈ
π¦ CHANGING THE VIEW π¦
By default, TkRemind shows the calendar for an entire month. The View... menu lets you pick from the following choices: Display an entire month, or display one, two or four weeks' worth of reminders. If you change the view, TkRemind remembers the change and that view becomes the default view next time you start TkRemind.
In the monthly view, the Next and Previous navigation buttons and keyboard shortcuts move by one month. In all other views, they move by one week. This is true even for views that display multiple weeks.
You can press the keys 1, 2, 4 or m over the main calendar window to change the view to one week, two weeks, four weeks or one month, respectively. β¨
β ADDING REMINDERS β
To add a reminder, click button 1 in any day number in the calendar. The Add Reminder... dialog will pop up, with values preselected for the day you clicked.
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 appear when you click the raised value buttons.
The next control specifies an expiry date for the reminder. Select the check button to enable an expiry date, and fill in the values using pull-down menus.
The third control specifies how much advance notice you want (if any), and whether or not weekends and holidays are counted when computing advance notice.
The fourth control specifies which days Remind considers as part of the weekend. This can affect the interpretation of "weekday" in the second and third types of reminders.
The fifth group of controls associates a time and possible duration with the reminder. You can also specify advance notice, possibly repeating.
The sixth control allows you to specify whether the reminder is a TODO, and if so, its completion date. Typing a slash "/" in the "Complete through:" field automatically fills in the date of the calendar entry. Otherwise, enter a completion date in the form YYYY-MM-DD. You can also enter a number in the "Max overdue days:" field to limit how many days past the due date Remind will keep reminding you of the TODO.
The seventh control specifies what Remind should do if a reminder falls on a holiday or weekend.
Enter the body of the reminder into the Summary: text entry. If you want, you can enter a location, a URL, and a longer description in the Location:, URL: and Description: boxes. If you enter anything here, they will be added as INFO items to the reminder.
To add the reminder to the reminder file, click Add to reminder file. To close the dialog without adding the reminder to the file, click Cancel. To preview the reminder, click Preview reminder. This pops up the Preview reminder dialog box. π
π PREVIEWING REMINDERS π
The Preview reminder dialog box is an excellent way to learn Remind. It displays the Remind command which realizes the reminder you entered using the Add Reminder... dialog. You can edit the reminder, thereby gaining access to advanced features of Remind. You can also use it simply to play around and discover Remind's idioms for expressing different types of reminders.
NOTE: If you hand-edit a reminder, then that reminder will not be editable in TkRemind's graphical reminder dialog any more. You will have to hand-edit it to change it.
π 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 calendar window to see today's reminders in Agenda Mode. You can also press t over the main 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. 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/PgDn. You can get back to today by clicking Today or pressing the Home key.
You can dismiss the Agenda Mode window by clicking OK or pressing the Esc key. π¦
π¨οΈ PRINTING π¨οΈ
To print the current month's calendar, click Print... on the main calendar window or press p or Control-p. This brings up the print dialog. Printing either produces a PostScript or PDF file, or sends PostScript or PDF to a UNIX command.
heads up: you must have rem2pdf installed in order to be able to print.
Select the print destination by choosing either To file: or To command: in the print dialog. Press Browse... to bring up a file browser. In the file browser, you can enter a filename in the text entry, double-click on a filename in the listbox, or double-click on a directory to navigate the file system. You can also type the first few characters of a file name in the text entry box and press space to complete the name to the first matching entry.
The Match: box contains a filename wildcard which filters files in the listbox. You can change the filter and press enter to rescan the directory.
Select the appropriate paper size and orientation. Activate Fill page if you want the calendar to fill the page. This should be the normal case unless you have many reminders in a particular day. (See the rem2pdf documentation.)
If you activate Avoid over-full boxes, then TkRemind will pass the --avoid-overfull option to rem2pdf. This will make it try to fit many reminders into a calendar box by shrinking the font. This option, if activated, also automatically activates Fill page.
Finally, click Print to print or Cancel to cancel. Note that during printing, Remind is called with the -itkremind=1 option and also an additional -itkprint=1 option. If you are producing PDF output, then the option -itkpdf=1 is also supplied to Remind.
If you click on Show Command rather than Print, then TkRemind won't actually print anything. Instead, it will pop up a text window with the command that it would have used to print the calendar. You can adjust the command as needed and then click Run to run the modified command. This lets you specify rem2pdf options that are not directly supported by TkRemind. π₯
βοΈ EDITING REMINDERS βοΈ
If you created a reminder with TkRemind, it will turn red as the mouse cursor passes over it in the calendar window. Click button-1 over the reminder and you will be presented with a dialog window whose state is identical to the one used to create the reminder. At this point, you can change the reminder by editing the dialog entries and selecting Replace reminder. You can delete the reminder entirely by selecting Delete reminder. The remaining buttons, Preview reminder and Cancel operate identically to the dialog in "ADDING REMINDERS."
Note that if you have hand-edited a reminder (using Preview reminder), or if the reminder was hand-created in the first place, then clicking on it will not pop up the TkRemind reminder-editing dialog. Instead, TkRemind will start up a text editor (if you have configured one) so you can hand-edit the reminder. π
ποΈ USING A TEXT EDITOR ποΈ
Okay so bestie, if you set the text editor option correctly, right-clicking a reminder pulls up a text editor on the file that contains the reminder. The cursor lands right on the line that generated that reminder, which is honestly iconic behavior π
.
Also: if you have a reminder that is editable with an editor but was not created using TkRemind, it gets underlined when you move the cursor over it. You can edit it in a text editor by either left- or right-clicking the reminder π«Ά.
And if a reminder has location or description INFO items, hovering over it pops up a window with the location and/or description information. Cute, useful, we love her β¨.
π HYPERLINKS π
If a reminder has a Url: INFO string set, middle-clicking opens the URL using xdg-open. That's it, that's the whole vibe π.
π ERRORS π
If there are any errors in your reminder file, the Queue... button changes to Errors.... Click on Errors... to see the Remind error output. Click OK to close the error window; this makes the button in the main TkRemind window revert to Queue.... And yes, you can click on any error message to open an editor on the file and line number that caused the error π₯.
β° BACKGROUND REMINDERS β°
If you create "timed" reminders, TkRemind will queue them in the background and pop up boxes as they are triggered. Additionally, if you created the reminder using TkRemind, you'll be given the option of "turning off" the reminder for the rest of the day. TkRemind achieves queuing of background reminders by running Remind in server mode, described later π.
β¨ OPTIONS β¨
The final button on the calendar window, Options, lets you configure certain aspects of TkRemind. You can also pop up the options window by pressing o. The configuration options are:
Start up Iconifiedβ if selected, TkRemind starts up iconified. Otherwise, it starts up in a normal window.Show Today's Reminders on Startupβ if selected, TkRemind shows a text window containing reminders which would be issued byremind -q -a -ron startup, and when the date changes at midnight.Confirm Quitβ if selected, you'll be asked to confirm when you pressQuit. If not, TkRemind quits without prompting.Automatically close pop-up reminders after a minuteβ if selected, pop-up reminder boxes will be closed after one minute has elapsed. Otherwise, they remain on your screen forever until you explicitly dismiss them π.Use system notifications when issuing a reminderβ this option is available only for Tcl/Tk version9.0or later, or if you have thenotify-sendprogram installed; it will be greyed out if neither condition is true. If selected, then when a reminder is popped up, it will also be sent to the desktop notification system, causing a notification to appear.Beep terminal when popping up a reminderβ if selected, TkRemind beeps the terminal bell when a queued reminder pops up π.Deiconify calendar window when popping up a reminderβ if selected, does what it says.Run command when popping up a reminderβ if this entry is not blank, the specified command is run whenever a background reminder pops up.Feed popped-up reminder to command's standard inputβ if selected, feeds the text of the reminder to the command described above. The text is prefixed byHH:MM(space included!), whereHH:MMis the time of the reminder.E-mail reminders here if popup not dismissedβ if you enter a non-blank e-mail address in this field, then TkRemind will e-mail you a reminder if you don't dismiss the popup box within one minute. This is useful if you need to leave your terminal but want your reminders to"follow"you via e-mail.Name or IP address of SMTP serverβ TkRemind uses a direct SMTP connection to send mail. Enter the IP address of your SMTP server here.Text Editorβ this specifies a text editor to invoke when a reminder is right-clicked. The sequence%dis replaced with the line number of the file containing the reminder, and%sis replaced with the file name. Useful strings might beemacs +%d %sorgvim +%d %s.Extra Arguments for Remindβ this specifies any extra arguments that should be passed to Remind when TkRemind invokesremind. Unless you know what you are doing, leave this blank β οΈ.Change entry font...β this button pops up a font selection dialog that lets you change the font used to draw calendar items in the calendar boxes π.Change heading font...β similar toChange entry font, but applies to calendar heading (the month and day names and the day numbers).
Once you've configured the options the way you like them, press Apply Options to put them into effect, Save Options to put them into effect and save them in $HOME/.config/tkremindrc, or Cancel to cancel any changes you made. Slay π.
β‘ IMMEDIATE UPDATES β‘
If you're running TkRemind on Linux and Remind has been compiled with inotify(7) support, then TkRemind redraws the calendar window immediately if $HOME/.reminders changes (or, if it is a directory, any files in that directory change). Lowkey magical β¨.
This lets TkRemind 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). Obsessed with the automation energy π¦.
π ODDS AND ENDS π
TkRemind performs some basic consistency checks when you add or preview a reminder. However, if you edit a reminder in the previewer, TkRemind does not check the edited reminder. You can produce illegal reminders which may cause problems. (This is one good reason to isolate TkRemind's reminders in a separate file.) Not me warning you with love π.
TkRemind does not check the body of the reminder in any way. You can use the normal Remind substitution sequences in the body. Furthermore, if you use expression-pasting in the body, TkRemind does not validate the expressions.
When TkRemind invokes Remind, it supplies the option:
-itkremind=1
on the command line. So, in your Remind file, you can include:
IF defined("tkremind")
# Then I'm probably being invoked by TkRemind
ENDIF
You can use this to activate certain reminders in different ways for TkRemind (for example) π.
TkRemind uses tags to keep track of reminders in the script file. You can certainly mix "hand-crafted" reminders with reminders created by TkRemind if you are aware of the following rules and limitations:
- TkRemind uses TAGs of the form
TKTAGnnnwherennnis a number. You should not use such TAGs in hand-crafted reminders. - Hand-crafted reminders cannot be edited with TkRemind, and for hand-crafted timed reminders, you will not be presented with the
"Don't remind me again"option when they pop up.
However, rather than mixing hand-edited files with TkRemind-generated ones, it is better to make $HOME/.reminders a directory and keep your hand-edited files in a separate *.rem file than TkRemind's 100-tkremind.rem file π«Ά.
π₯οΈ SERVER MODE β¨
Okay so this is the part where Remind stops being a solo main character and starts collaborating β it has a whole special mode for talking to programs like TkRemind, and honestly it's giving platonic ideal of a backstage pass. π
It's called server mode and you get it by handing Remind the -zj option. That's it. That's the whole invite.
In server mode, Remind vibes basically like daemon mode, except β plot twist β it reads commands from standard input (one per line, bestie, one per line) and writes status lines to standard output. And every single status line is a JSON object. Slay.
Here's the full menu of commands it accepts:
EXITβ kills the Remind process, periodt. EOF on standard input does the exact same thing. And lowkey it just dips immediately without printing a JSON status line, so don't go looking for one. πSTATUSβ returns the number of queued reminders. The JSON object looks something like this:
{"response":"queued","nqueued":n,"command":"STATUS"}
where n is the number of reminders queued.
QUEUEorJSONQUEUEβ returns the contents of the queue. The JSON object looks something like this:
{"response":"queue","queue":[ ... ],"command":"QUEUE"}
The value of the queue key is an array of JSON objects, each one representing a queued reminder.
TRANSLATE Any string goes hereβ returns the translation of"Any string goes here"according to Remind's translation table. Heads up (this is important, don't @ me): there must be exactly one space afterTRANSLATEand before the string you want translated. The JSON object you'd get from"TRANSLATE New Moon"might look like this:
{"response":"translate","translation":{"New Moon":"Nieuwe maan"},"command":"TRANSLATE"}
So as you can see, the value of the translation key is an object whose key is the original text and whose value is the translated text. A front-end can use TRANSLATE to do its own localization β for example, TkRemind uses it to localize the moon phase popup window for the SPECIAL MOON display. π cute.
Real talk though: if the argument toTRANSLATEisn't in the translation table, then Remind will not issue any response at all to theTRANSLATEcommand. No response. Silence. The void. π»
TRANSLATE_DUMPβ returns the contents of the translation table. The JSON object looks like this:
{"response":"translate_dump","table":{...},"command":"TRANSLATE_DUMP"}
The value of the table key is a dictionary of original-to-translated strings.
DEL qidβ deletes the reminder with queue-idqidfrom the queue.REREADβ re-reads the reminder file. Returns the following status line:
{"response":"reread","command":"REREAD"}
π The extra status lines it writes
These are the additional status lines that get written, and they are so important, bestie, do not skip:
{"response":"reminder","ttime":tt,"tdatetime":tdt,"now":now,"tags":tags,"qid":qid,"body":body}
In this line: tt is the trigger time of the reminder (expressed as a string), tdt is the trigger DATETIME of the reminder expressed as a string with the format "YYYY-MM-DDTHH:MM", now is the current time, tags (if present) is the tag or tags associated with the reminder, and body is the body of the reminder. This response is what makes TkRemind pop up a reminder notification β main character energy fr. π
And qid? That's a unique identifier for this reminder. You can delete it from the queue by sending a DEL qid command to the server. But listen β qids are not stable across re-reads. If Remind restarts itself to re-read the reminder file, then the qid values are likely to change, and any reminder you deleted with a DEL qid command is likely to get re-queued. So like... don't be weird about it. π
{"response":"newdate"}
This line gets emitted whenever Remind has detected a rollover of the system date. The front-end program should redraw its calendar or take whatever other action is needed. New day, new you. π
{"response":"reread","command":"inotify"}
If Remind was compiled with support for inotify(7), then if it detects a change to the top-level reminder file or directory, it issues the above response. The front-end should redraw its calendar since this response indicates that a change has been made to the reminder file or directory. It's literally telling you "something moved, look again." π¦
β οΈ Okay final warning and it's a big one: please note that Remind can write a status message at any time and not just in response to a command sent to its standard input. Therefore, a program that runs Remind in server mode must be prepared to handle asynchronous status messages. No cap β if you're not ready for messages to show up uninvited, server mode will humble you.
π AUTHOR
TkRemind was written by Dianne Skoll <dianne@skoll.ca> β icon behavior, we stan. π
TkRemind is Copyright (C) 1996-2026 by Dianne Skoll.
π FILES
$HOME/.remindersβ default reminder file or directory.$HOME/.config/tkremindrcβ TkRemind saved options.
π HOME PAGE
https://dianne.skoll.ca/projects/remind/
Go bookmark it, bestie, it's giving resource hub.
π«Ά SEE ALSO
remind, rem2pdf, rem2html
Okay that's the whole page, you made it to the end, I'm so proud of you. π This was TkRemind from the Remind crew, dated 2026-06-05, filed under TKREMIND(1) β go forth and remind responsibly. πβ¨
π¦ where this page comes from
- arch rolling: remind 6.2.7-1 Β· GPL2
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms