Thanks for the tip on `calendar-make-temp-face'. It gets even weirder now.
If I use a face, that function does not even seem to get called, so it seems to work.
If I use the anonymous face though, it does get called, and I see the inconsistent behavior.
However, if I edebug `calendar-make-temp-face' and step through each line, then it works the same as using a face. And, after that it seems to work most of the time.
"Do not call this directly from Lisp code; use ‘defface’ instead." seems like a weird message. Where else would one use this?
Anyway, thanks again, I have stumbled on a solution, which is to modify `calendar-mark-visible-date' so it does not use `calendar-make-temp-face' .
It is a small change of:
(t ; attr list
(overlay-put
(make-overlay (1- (point)) (1+ (point))) 'face
(calendar-make-temp-face mark)))
to
(t ; attr list
(overlay-put
(make-overlay (1- (point)) (1+ (point))) 'face
mark))
That seems to work.
A simpler way though is to just put the overlays on manually in the hook, e.g.
(let* ((mark-calendar (lambda ()
;; Goto today
(save-excursion
(calendar-cursor-to-visible-date (read (format-time-string "(%m %d %Y)")))
(overlay-put
(make-overlay (1- (point)) (1+ (point))) 'face
(list :foreground "blue" :weight 'bold)))))
(calendar-today-visible-hook))
(add-hook 'calendar-today-visible-hook
mark-calendar)
(org-read-date))
I can live with that solution. Thanks for the assist!