I have defined the following TODO states in a org-mode file:


And I have customized the colors for the TODO states:

Hide Org Todo Keyword Faces:
INS DEL Cons-cell:
            Keyword: TODO
            Face   : Value Menu Color: red
INS DEL Cons-cell:
            Keyword: WAIT
            Face   : Value Menu Color: orange
INS DEL Cons-cell:
            Keyword: DONE
            Face   : Value Menu Color: green

But I would like to customize the colors of the TODO states at the same place, where I have defined them: in the file.

How can this be done?

  • 2
    file local variables?
    – mbork
    Commented Dec 4, 2014 at 8:54

2 Answers 2


You can add the following to the top of your .org file:

# -*- org-todo-keyword-faces: (("TODO" . "red") ("WAIT" . "orange") ("DONE" . "green")); -*-

The -*- ... -*- syntax is used to specify File-Local Variables.

  • Yes of course. I did not thought about buffer variables. I was looking for something like this: #+SEQ_TODO: TODO(t red) WAIT(w orange) | DONE(d green)
    – ceving
    Commented Dec 4, 2014 at 9:10
  • 1
    @ceving Based on the documentation for org-todo-keywords, this doesn't seem to be possible. (To see for yourself, type C-h v org-todo-keywords RET).
    – itsjeyd
    Commented Dec 4, 2014 at 9:16
  • Rather than using a cons-cell, it may be helpful to use the face properties; e.g., instead of the dot/period, use :foreground". And, perhaps consider adding a more complex example that sets both the background and foreground for a particular keyword. This same concept of using a traditional list instead of a cons-cell also applies to org-todo-priority-faces.
    – lawlist
    Commented Apr 29, 2018 at 0:31

I can't make the "# -*-..." syntax work in my .org file (I can accept that I probably did something wrong. :-).

I got the following to work. Place this at the bottom of your .org file:

# Local Variables:
# mode: org
# org-todo-keyword-faces: (("ANSWER" . "orange") ("ARCHIVED" . "blue") ("DATE" . "red") ("DOING" . "yellow") ("DONE" . "green") ("HPSM" . "red") ("JIRA" . "red") ("TODO" . org-warning) ("WAITING" . "orange"))
# End:
  • 1
    I successfully tested the -*- syntax using the interactive command add-file-local-variable-prop-line. I specified org-todo-keyword-faces for the variable and (("TODO" . "purple")) for the value. After calling revert-buffer things work as expected. The resulting line is # -*- org-todo-keyword-faces: (("TODO" . "purple")); -*-
    – glucas
    Commented Dec 5, 2014 at 20:02
  • Okay. This works now. I SWEAR I did this before and couldn't make it work. Regardless, the -*- syntax works fine. Commented Dec 5, 2014 at 20:38
  • This is driving me nuts... The line by @glucas containing purple works, but this one with red # -*- org-todo-keyword-faces: (("TODO" . "purple") ("IN-PROGRESS" . "red")); -*- does NOT... Any hints?
    – nephewtom
    Commented Oct 9, 2015 at 16:12
  • @nephewtom Seems OK here. I copied your line to an org file, then re-opened the file and checked the value of org-todo-keyword-faces. Note that you would need to add IN-PROGRESS to org-todo-keywords as well.
    – glucas
    Commented Oct 9, 2015 at 18:35
  • 2
    I forgot that tyou have the -*- as the first line in the file, that's why it didn't work for me at first.
    – thoni56
    Commented Feb 25, 2020 at 7:25

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.