I'm experimenting with org-habit and currently have org-habit-show-all-today set to t so I can see a habit even when I've done it for that day. I'm doing that because I want to get the little reward of seeing the line of stars right away :-)

However, I also want to not have habits I've already done distracting me from habits that aren't done.

How can I display those in a different face, so I can make the text of the habit "greyed out"?

Investigating further, what-cursor-position with a prefix argument reveals (I've removed the properties other than the faces):

There are text properties here:
  done-face            org-agenda-done
  face                 org-scheduled-today
  mouse-face           highlight
  undone-face          org-scheduled-today

The face associated with done-face, org-agenda-done, is already "greyed out" (grey italic text), which is the face I want. However, I think what determines the face is just the text property face, which is associated with face org-scheduled-today (medium weight blue text) -- that makes the text appear in blue, not grey or italic.

Something I don't understand the intent of -- though resolving this may not be needed to answer the question -- Why would these habit TODO items have face org-scheduled-today when they are not scheduled for today? I think the following code (from org-agenda.el's org-agenda-get-scheduled) is responsible for that, but I don't understand why that behaviour is wanted:

    (let* (
  ...
       (face (cond ((and (not habitp) pastschedp)
            'org-scheduled-previously)
               (todayp 'org-scheduled-today)
               (t 'org-scheduled)))
         )
      (org-add-props item props
    'undone-face face
    'face (if donep 'org-agenda-done face)
...

So I think face is set to org-scheduled-today ("Face for items scheduled for a certain day") because it's a habit that appears on today's date, even though it's not scheduled for today's date.

Here's the item in question (which appears as I've described above at the time of writing, i.e. when today's date is 2018-11-26):

** shave yaks
SCHEDULED: <2018-11-27 Tue 08:00 .+1d>
:PROPERTIES:
:STYLE: habit
:LAST_REPEAT: [2018-11-26 Mon 11:23]
:END:
- State "DONE"       from ""           [2018-11-26 Mon 11:23]
  • I've hacked this by patching the org-mode source. I'm keen to learn a better way though... – Croad Langshan Nov 26 at 13:13

Your Answer

By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

Browse other questions tagged or ask your own question.