I don't know a good way to do this out of the box. Here are two ways you could go about it, but they both involve a bit of programming. They would all use org-agenda-day-face-function similar to the code you already posted.
1. Least programming: Add emacs diary entries (rather than recording the days using org datestamps -- see https://www.gnu.org/software/emacs/manual/html_node/emacs/Special-Diary-Entries.html) and adapt https://emacs.stackexchange.com/a/45778/5495 to check diary-lib.el instead of holidays.el . Note this won't work by using the support for adding diary sexps directly to org files (https://orgmode.org/manual/Weekly_002fdaily-agenda.html#Calendar_002fDiary-integration) without something extra, because then the diary sexp information is only in org, not in the emacs diary itself, so you can't just look in diary-entries-list. All pretty confusing I know. Untested (!) based on adapting the stack exchange answer above to extend that (which pulls in holiday.el holidays + tests whether the day is a weekend -- the following is intended to hint how to extend that to pull in diary-lib.el dates too): Note I'm guessing you'd have to set org-agenda-include-diary for this to work, but I have not tested this *at all*, so this really is all just a hint. Also, watch out for the weird dependence of diary-lib.el on calendar-date-style. (defface my/org-agenda-holiday '((t (:inherit default))) "Base face used in agenda for holidays, whether today's date or not." :group 'org-faces) (defface my/org-agenda-holiday-not-today '((t (:inherit (my/org-agenda-holiday org-agenda-date)))) "Face used in agenda for holidays other than for today's date." :group 'org-faces) (defface my/org-agenda-holiday-today '((t (:inherit (my/org-agenda-holiday org-agenda-date-today)))) "Face used in agenda for holidays for today's date." :group 'org-faces) (defun my/in-diary-p (date) (car (alist-get date diary-entries-list nil nil #'equal))) (defun my/day-face (day) (let* ((abs (calendar-absolute-from-gregorian day)) (todayp (org-agenda-today-p abs)) (day-of-week (calendar-day-of-week day)) (holidayp (or (= day-of-week 0) (= day-of-week 6) (holiday-in-range abs abs) (my/in-diary-p day)))) (cond ((and todayp holidayp) 'my/org-agenda-holiday-today) (holidayp 'my/org-agenda-holiday-not-today) (todayp 'org-agenda-date-today) (t 'org-agenda-date)))) (setq org-agenda-day-face-function #'my/day-face) 2. Maybe nicer: write something similar to org-agenda-to-appt that generates a list of holiday days rather than appointments, then run that code from places like 'after-save-hook. Then consult that list in your org-agenda-day-face-function. On Sun, 27 Jan 2019, at 20:41, JRSS wrote: > What if you set the category in the function? So the function has > something like cond (( or (org-category vacation) (org-category f_event) > (background: red)) > > I obviously don't know how to write it, but the idea is that the > categories are already set in the function. I won't have many, three > tops, and I won't change them often -- no need to be fully dynamic. > > Sent from ProtonMail mobile > > -------- Original Message -------- > On Jan 27, 2019, 15:35, Ken Mankoff wrote: > > > Hi, > > > > On 2019-01-27 at 12:20 -0800, JRSS <ja...@protonmail.com> wrote... > >> This is a bit over my head still. I'm trying to wrap my head around it. > >> > >> I see what it does (colors day-of-the-week 1 and day-of-the-week-3, > >> which are Monday and Wednesday, red) but not sure how to tie it to a > >> category (so say, category "vacation" would be red). > >> > >> Once I have the function do that, I can go in and change it so that > >> different categories will be different colors. > > > > It's a bit over my head for this use case too. Sorry. When I saw it I > > thought the use case was a list of holidays, which is easier to implement. > > You could maintain this list in an easy-to-access format as a variable near > > where you implement this function. A dynamic list based on tagged Org items > > is certainly more complicated. > > > > -k.