;;; org-faces.el --- Face definitions for Org-mode.
-;; Copyright (C) 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+;; Copyright (C) 2004-2011 Free Software Foundation, Inc.
;; Author: Carsten Dominik <carsten at orgmode dot org>
;; Keywords: outlines, hypermedia, calendar, wp
;; Homepage: http://orgmode.org
-;; Version: 6.13
+;; Version: 7.4
;;
;; This file is part of GNU Emacs.
;;
;;
;;; Commentary:
-;; This file contains the face definitons for Org.
+;; This file contains the face definitions for Org.
;;; Code:
(require 'org-macs)
(require 'org-compat)
+(defun org-copy-face (old-face new-face docstring &rest attributes)
+ (unless (facep new-face)
+ (if (fboundp 'set-face-attribute)
+ (progn
+ (make-face new-face)
+ (set-face-attribute new-face nil :inherit old-face)
+ (apply 'set-face-attribute new-face nil attributes)
+ (set-face-doc-string new-face docstring))
+ (copy-face old-face new-face)
+ (if (fboundp 'set-face-doc-string)
+ (set-face-doc-string new-face docstring)))))
+(put 'org-copy-face 'lisp-indent-function 2)
+
(defgroup org-faces nil
"Faces in Org-mode."
:tag "Org Faces"
- :group 'org-font-lock)
+ :group 'org-appearance)
(defface org-hide
'((((background light)) (:foreground "white"))
The following faces apply, with this priority.
1. The color of the reference face. This is normally the level fact that
- is used in the outline. In agenda-mode, it will be the face of the
+ is used in the outline. In agenda-mode, it will be the face of the
first character in the line. The color is explicitly retained to
make sure that the column line still looks a bit like the structure
line it is masking.
:group 'org-faces)
(defface org-link
+ '((t :inherit link))
+ "Face for links."
+ :group 'org-faces)
+
+(defface org-footnote
'((((class color) (background light)) (:foreground "Purple" :underline t))
(((class color) (background dark)) (:foreground "Cyan" :underline t))
(t (:underline t)))
'((((class color) (background light)) (:underline t))
(((class color) (background dark)) (:underline t))
(t (:underline t)))
- "Face for links."
+ "Face for link targets."
:group 'org-faces)
(defface org-date
'((((class color) (background light)) (:foreground "Purple" :underline t))
(((class color) (background dark)) (:foreground "Cyan" :underline t))
(t (:underline t)))
- "Face for links."
+ "Face for date/time stamps."
:group 'org-faces)
(defface org-sexp-date
'((((class color) (background light)) (:foreground "Purple"))
(((class color) (background dark)) (:foreground "Cyan"))
(t (:underline t)))
- "Face for links."
+ "Face for diary-like sexp date specifications."
:group 'org-faces)
(defface org-tag
'((t (:bold t)))
- "Face for tags."
+ "Default face for tags.
+Note that the variable `org-tag-faces' can be used to overrule this face for
+specific tags."
:group 'org-faces)
(defface org-todo ; font-lock-warning-face
"Face used for todo keywords that indicate DONE items."
:group 'org-faces)
+(defface org-agenda-done ;; originally copied from font-lock-type-face
+ (org-compatible-face nil
+ '((((class color) (min-colors 16) (background light)) (:foreground "ForestGreen"))
+ (((class color) (min-colors 16) (background dark)) (:foreground "PaleGreen"))
+ (((class color) (min-colors 8)) (:foreground "green"))
+ (t (:bold nil))))
+ "Face used in agenda, to indicate lines switched to DONE.
+This face is used to de-emphasize items that where brightly colord in the
+agenda because they were things to do, or overdue. The DONE state itself
+is of course immediately visible, but for example a passed deadline is
+\(by default) very bright read. This face could be simply the default face
+of the frame, for example."
+ :group 'org-faces)
+
(defface org-headline-done ;; originally copied from font-lock-string-face
(org-compatible-face nil
'((((class color) (min-colors 16) (background light)) (:foreground "RosyBrown"))
to the part of the headline after the DONE keyword."
:group 'org-faces)
+(defcustom org-faces-easy-properties
+ '((todo . :foreground) (tag . :foreground) (priority . :foreground))
+ "The property changes by easy faces.
+This is an alist, the keys show the area of application, the values
+can be `:foreground' or `:background'. A color string for special
+keywords will then be interpreted as either foreground or background
+color."
+ :group 'org-faces
+ :group 'org-todo
+ :type '(repeat
+ (cons (choice (const todo) (const tag) (const priority))
+ (choice (const :foreground) (const :background)))))
+
(defcustom org-todo-keyword-faces nil
"Faces for specific TODO keywords.
This is a list of cons cells, with TODO keywords in the car
-and faces in the cdr. The face can be a symbol, or a property
-list of attributes, like (:foreground \"blue\" :weight bold :underline t)."
+and faces in the cdr. The face can be a symbol, a color
+as a string (in which case the rest is inherited from the `org-todo' face),
+or a property list of attributes, like
+ (:foreground \"blue\" :weight bold :underline t).
+If it is a color string, the variable `org-faces-easy-properties'
+determines if it is a foreground or a background color."
:group 'org-faces
:group 'org-todo
:type '(repeat
(cons
- (string :tag "keyword")
- (sexp :tag "face"))))
+ (string :tag "Keyword")
+ (choice :tag "Face "
+ (string :tag "Color")
+ (sexp :tag "Face")))))
+
+(defcustom org-priority-faces nil
+ "Faces for specific Priorities.
+This is a list of cons cells, with priority character in the car
+and faces in the cdr. The face can be a symbol, a color as
+as a string, or a property list of attributes, like
+ (:foreground \"blue\" :weight bold :underline t).
+If it is a color string, the variable `org-faces-easy-properties'
+determines if it is a foreground or a background color."
+ :group 'org-faces
+ :group 'org-todo
+ :type '(repeat
+ (cons
+ (character :tag "Priority")
+ (choice :tag "Face "
+ (string :tag "Color")
+ (sexp :tag "Face")))))
+
+(defvar org-tags-special-faces-re nil)
+(defun org-set-tag-faces (var value)
+ (set var value)
+ (if (not value)
+ (setq org-tags-special-faces-re nil)
+ (setq org-tags-special-faces-re
+ (concat ":\\(" (mapconcat 'car value "\\|") "\\):"))))
+
+(defface org-checkbox
+ (org-compatible-face 'bold
+ '((t (:bold t))))
+ "Face for checkboxes"
+ :group 'org-faces)
+
+
+(org-copy-face 'org-todo 'org-checkbox-statistics-todo
+ "Face used for unfinished checkbox statistics.")
+
+(org-copy-face 'org-done 'org-checkbox-statistics-done
+ "Face used for finished checkbox statistics.")
+
+(defcustom org-tag-faces nil
+ "Faces for specific tags.
+This is a list of cons cells, with tags in the car and faces in the cdr.
+The face can be a symbol, a foreground color (in which case the rest is
+inherited from the `org-tag' face) or a property list of attributes,
+like (:foreground \"blue\" :weight bold :underline t).
+If you set this variable through customize, it will immediately be effective
+in new buffers and in modified lines.
+If you set it with Lisp, a restart of Emacs is required to activate the
+changes."
+ :group 'org-faces
+ :group 'org-tags
+ :set 'org-set-tag-faces
+ :type '(repeat
+ (cons
+ (string :tag "Tag ")
+ (choice :tag "Face"
+ (string :tag "Foreground color")
+ (sexp :tag "Face")))))
(defface org-table ;; originally copied from font-lock-function-name-face
(org-compatible-face nil
:group 'org-faces)
(defface org-code
- (org-compatible-face nil
+ (org-compatible-face 'shadow
'((((class color grayscale) (min-colors 88) (background light))
(:foreground "grey50"))
(((class color grayscale) (min-colors 88) (background dark))
(:foreground "green"))
(((class color) (min-colors 8) (background dark))
(:foreground "yellow"))))
- "Face for fixed-with text like code snippets."
+ "Face for fixed-width text like code snippets."
+ :group 'org-faces
+ :version "22.1")
+
+(defface org-meta-line
+ (org-compatible-face 'font-lock-comment-face nil)
+ "Face for meta lines startin with \"#+\"."
+ :group 'org-faces
+ :version "22.1")
+
+(defface org-document-title
+ '((((class color) (background light)) (:foreground "midnight blue" :weight bold :height 1.44))
+ (((class color) (background dark)) (:foreground "pale turquoise" :weight bold :height 1.44))
+ (t (:weight bold :height 1.44)))
+ "Face for document title, i.e. that which follows the #+TITLE: keyword."
+ :group 'org-faces)
+
+(defface org-document-info
+ '((((class color) (background light)) (:foreground "midnight blue"))
+ (((class color) (background dark)) (:foreground "pale turquoise"))
+ (t nil))
+ "Face for document date, author and email; i.e. that which
+follows a #+DATE:, #+AUTHOR: or #+EMAIL: keyword."
+ :group 'org-faces)
+
+(defface org-document-info-keyword
+ (org-compatible-face 'shadow
+ '((((class color grayscale) (min-colors 88) (background light))
+ (:foreground "grey50"))
+ (((class color grayscale) (min-colors 88) (background dark))
+ (:foreground "grey70"))
+ (((class color) (min-colors 8) (background light))
+ (:foreground "green"))
+ (((class color) (min-colors 8) (background dark))
+ (:foreground "yellow"))))
+ "Face for #+TITLE:, #+AUTHOR:, #+EMAIL: and #+DATE: keywords."
+ :group 'org-faces)
+
+(defface org-block
+ (org-compatible-face 'shadow
+ '((((class color grayscale) (min-colors 88) (background light))
+ (:foreground "grey50"))
+ (((class color grayscale) (min-colors 88) (background dark))
+ (:foreground "grey70"))
+ (((class color) (min-colors 8) (background light))
+ (:foreground "green"))
+ (((class color) (min-colors 8) (background dark))
+ (:foreground "yellow"))))
+ "Face text in #+begin ... #+end blocks."
:group 'org-faces
:version "22.1")
(defface org-verbatim
- (org-compatible-face nil
+ (org-compatible-face 'shadow
'((((class color grayscale) (min-colors 88) (background light))
(:foreground "grey50" :underline t))
(((class color grayscale) (min-colors 88) (background dark))
:group 'org-faces
:version "22.1")
+(org-copy-face 'org-block 'org-quote
+ "Face for #+BEGIN_QUOTE ... #+END_QUOTE blocks.")
+(org-copy-face 'org-block 'org-verse
+ "Face for #+BEGIN_VERSE ... #+END_VERSE blocks.")
+
+(defcustom org-fontify-quote-and-verse-blocks nil
+ "Non-nil means, add a special face to #+begin_quote and #+begin_verse block.
+When nil, format these as normal Org. This is the default, because the
+content of these blocks will still be treated as Org syntax."
+ :group 'org-faces
+ :type 'boolean)
+
+(defface org-clock-overlay ;; copied from secondary-selection
+ (org-compatible-face nil
+ '((((class color) (min-colors 88) (background light))
+ (:background "yellow1"))
+ (((class color) (min-colors 88) (background dark))
+ (:background "SkyBlue4"))
+ (((class color) (min-colors 16) (background light))
+ (:background "yellow"))
+ (((class color) (min-colors 16) (background dark))
+ (:background "SkyBlue4"))
+ (((class color) (min-colors 8))
+ (:background "cyan" :foreground "black"))
+ (t (:inverse-video t))))
+ "Basic face for displaying the secondary selection."
+ :group 'org-faces)
+
(defface org-agenda-structure ;; originally copied from font-lock-function-name-face
(org-compatible-face nil
'((((class color) (min-colors 88) (background light)) (:foreground "Blue1"))
"Face used in agenda for captions and dates."
:group 'org-faces)
-(unless (facep 'org-agenda-date)
- (copy-face 'org-agenda-structure 'org-agenda-date)
- (set-face-doc-string 'org-agenda-date
- "Face used in agenda for normal days."))
+(org-copy-face 'org-agenda-structure 'org-agenda-date
+ "Face used in agenda for normal days.")
+
+(org-copy-face 'org-agenda-date 'org-agenda-date-today
+ "Face used in agenda for today."
+ :weight 'bold :italic 't)
-(unless (facep 'org-agenda-date-weekend)
- (copy-face 'org-agenda-date 'org-agenda-date-weekend)
- (set-face-doc-string 'org-agenda-date-weekend
- "Face used in agenda for weekend days.
+(org-copy-face 'secondary-selection 'org-agenda-clocking
+ "Face marking the current clock item in the agenda.")
+
+(org-copy-face 'org-agenda-date 'org-agenda-date-weekend
+ "Face used in agenda for weekend days.
See the variable `org-agenda-weekend-days' for a definition of which days
-belong to the weekend.")
- (when (fboundp 'set-face-attribute)
- (set-face-attribute 'org-agenda-date-weekend nil :weight 'bold)))
+belong to the weekend."
+ :weight 'bold)
(defface org-scheduled
(org-compatible-face nil
"Face for items scheduled for a certain day."
:group 'org-faces)
+(defface org-agenda-dimmed-todo-face
+ '((((background light)) (:foreground "grey50"))
+ (((background dark)) (:foreground "grey50")))
+ "Face used to dim blocked tasks in the agenda."
+ :group 'org-faces)
(defface org-scheduled-previously
(org-compatible-face nil
"Face used for time grids."
:group 'org-faces)
+(defface org-agenda-diary
+ (org-compatible-face 'default
+ nil)
+ "Face used for agenda entries that come from the Emacs diary."
+ :group 'org-faces)
+
(defconst org-level-faces
'(org-level-1 org-level-2 org-level-3 org-level-4
org-level-5 org-level-6 org-level-7 org-level-8
"The number of different faces to be used for headlines.
Org-mode defines 8 different headline faces, so this can be at most 8.
If it is less than 8, the level-1 face gets re-used for level N+1 etc."
- :type 'number
+ :type 'integer
:group 'org-faces)
+(defcustom org-cycle-level-faces t
+ "Non-nil means level styles cycle after level `org-n-level-faces'.
+Then so level org-n-level-faces+1 is styled like level 1.
+If nil, then all levels >=org-n-level-faces are styled like
+level org-n-level-faces"
+ :group 'org-appearance
+ :group 'org-faces
+ :type 'boolean)
+
(defface org-latex-and-export-specials
(let ((font (cond ((assq :inherit custom-face-attributes)
'(:inherit underline))
"Face used to highlight math latex and other special exporter stuff."
:group 'org-faces)
+(org-copy-face 'modeline 'org-mode-line-clock
+ "Face used for clock display in mode line.")
+(org-copy-face 'modeline 'org-mode-line-clock-overrun
+ "Face used for clock display for overrun tasks in mode line."
+ :background "red")
+
(provide 'org-faces)
-;; arch-tag: 9dab5f91-c4b9-4d6f-bac3-1f6211ad0a04
;;; org-faces.el ends here