From mboxrd@z Thu Jan 1 00:00:00 1970 From: John Lee Subject: Re: Mark vacation days Date: Sun, 03 Feb 2019 14:49:24 +0000 Message-ID: <1549205364.1198509.1649812088.706E7D4F@webmail.messagingengine.com> References: <871s4xhpe0.fsf@geus3064linuxwsm.geus.dk> <87y375g7o1.fsf@geus3064linuxwsm.geus.dk> <25cGT-vHP6TRHpUf59QT6DPhIS6TBUAg6PcYJq4Fy6xvPgUCL-SPVnFBGyLY6F31fO2wn6j7PKPouypYiR1qB0mXpOXied-NVG7q7vLfvTY=@protonmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Return-path: Received: from eggs.gnu.org ([209.51.188.92]:40415) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gqJFQ-0003Ia-2h for emacs-orgmode@gnu.org; Sun, 03 Feb 2019 09:59:53 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gqJ5N-0000Oa-Vp for emacs-orgmode@gnu.org; Sun, 03 Feb 2019 09:49:31 -0500 Received: from wout2-smtp.messagingengine.com ([64.147.123.25]:43541) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1gqJ5N-0000N6-1b for emacs-orgmode@gnu.org; Sun, 03 Feb 2019 09:49:29 -0500 Received: from compute7.internal (compute7.nyi.internal [10.202.2.47]) by mailout.west.internal (Postfix) with ESMTP id F3C891BD6 for ; Sun, 3 Feb 2019 09:49:24 -0500 (EST) In-Reply-To: <25cGT-vHP6TRHpUf59QT6DPhIS6TBUAg6PcYJq4Fy6xvPgUCL-SPVnFBGyLY6F31fO2wn6j7PKPouypYiR1qB0mXpOXied-NVG7q7vLfvTY=@protonmail.com> List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Sender: "Emacs-orgmode" To: emacs-orgmode@gnu.org 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 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.