Diary was my pick for this month's Emacs Carnival. But in fact it's
part of a larger set of functions under the calendar group. Another
set of functions allows you to create pocket date books, desk planners and wall
calendars if you have access to a printer. The function names begin
with cal-tex-cursor and cal-html-cursor, and they can be found in
cal-tex.el and cal-html.el, respectively.
The "tex" and "html" in the function names describe the output
formats, LaTeX and, well, HTML; "cursor" describes one way of
defining their inputs (from the position of the cursor in the
calendar buffer). They're further subdivided into layouts such as
day, week, month and year. My favorite is
cal-tex-cursor-week-iso.
Open the calendar (M-x calendar). Observe that the cursor is at
today. Now invoke cal-html-cursor-month and accept the default at
the prompt. The function will create a file named YYYY-MM.html.
The variable cal-html-directory provides the cal-html functions with
the path name. The HTML file is placed in a subdirectory named
YYYY. In my case, cal-html-directory is set to "~/public_html."
As I invoke it today, the subdirectory / filename is 2026/2026-06.html.
The calendar can pull information from your diary file(s), the holidays defined
in holidays.el and in the holiday-other-holidays variable. If you
have %%(diary-sunrise-sunset) and %%(diary-lunar-phases) you'll get
the times of sunrise and sunset at your coordinates, and the dates
and times of the four lunar phases, assuming that
cal-tex-diary is non-nil. (I also have cal-tex-24 non-nil.)
I suggested cal-html-cursor-month because its output is easily
viewed (rendered) with a web browser. But I prefer the weekly
calendar produced by cal-tex-cursor-week-iso, which outputs in LaTeX.
I've invoked cal-tex-cursor-week-iso with the cursor on June 16.
The output is shown in Figure 1 after rendering to PDF with pdflatex. (Note that the screenshot is closely cropped.) There's a
lot included here.
First, note that our Third Tuesday of the Month Club meeting (used as an example in a previous post) is shown. This comes from a diary entry; unfortunately org file events are ignored. (The agenda for this week is shown in Figure 2; note the event in red does not appear in the weekly calendar. This is another reason I favor recording appointments in the diary.)
Two other diary entries also are included: a record of when the kitchen cabinets were painted, plus a breakfast meeting with Howard.
Then you'll find two holidays, Islamic New Year and Father's Day.
And because I have diary-lunar-phases in my diary, a moon phase also
shows up. (I commented out the diary-sunrise-sunset statement
because it adds the information to every day of the week, which
makes the weekly planner look too cluttered.) Last but not least
the Summer Solstice is included as a Sunday holiday along with the time it occurs.
The first line of each day block also shows (right justified) the day number (of the year) and the number of days remaining in the year. The Sunday block is quite crowded; the first line is wrapped, so the day number / days remaining field appears on the next line.
Sadly, any links in the diary that worked in Org Agenda do not work in the LaTeX output. You'll see instead the full syntax of the link, [URL][description] ].
I created an improved version of cal-tex-cursor-week-iso. Here are some of the changes:
- inhibit sunrise/sunset data for all but the first day
- switch to sans-serif font
- color birthdays and anniversaries in blue
- replace the non-ASCII characters (used for Bahai holidays)
- offset left or right to allow for the binding of a year's worth of pages
- more?
I uploaded it to Codeberg, but I need to clean it up a bit before I feel comfortable promoting it.
If you position the cursor on the last day of the year and
invoke cal-tex-cursor-week-iso with a prefix argument
of 53, you can create the pages for a personalized weekly planner
for next year! Try it out!


No comments:
Post a Comment
Thank you for taking time to comment. Please note that comments may be deleted if they:
* Contain link(s) to a domain outside USA or Canada or to a commercial enterprise.
* Include non-English words or characters.
* Are irrelevant to the subject matter of the post.
For posts older than 14 days, comments are moderated and require approval.