From: John Lee <jjl@pobox.com>
To: emacs-orgmode@gnu.org
Subject: Re: Mark vacation days
Date: Sun, 03 Feb 2019 14:49:24 +0000 [thread overview]
Message-ID: <1549205364.1198509.1649812088.706E7D4F@webmail.messagingengine.com> (raw)
In-Reply-To: <25cGT-vHP6TRHpUf59QT6DPhIS6TBUAg6PcYJq4Fy6xvPgUCL-SPVnFBGyLY6F31fO2wn6j7PKPouypYiR1qB0mXpOXied-NVG7q7vLfvTY=@protonmail.com>
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 <jarss@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.
prev parent reply other threads:[~2019-02-03 14:59 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-01-27 15:20 Mark vacation days JRSS
2019-01-27 19:27 ` Ken Mankoff
2019-01-27 20:20 ` JRSS
2019-01-27 20:35 ` Ken Mankoff
2019-01-27 20:41 ` JRSS
2019-02-03 14:49 ` John Lee [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.orgmode.org/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1549205364.1198509.1649812088.706E7D4F@webmail.messagingengine.com \
--to=jjl@pobox.com \
--cc=emacs-orgmode@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).