diff --git a/ORGWEBPAGE/Changes.org b/ORGWEBPAGE/Changes.org
index d4cd7d601..96bd56629 100644
--- a/ORGWEBPAGE/Changes.org
+++ b/ORGWEBPAGE/Changes.org
@@ -193,6 +193,19 @@ of tag/property matches is described.
A new =
= is wrapped around the entire page,
everything that is inside ==.
+*** Faces for priority cookies can now be set freely
+
+The new variable =org-priority-faces= can be used to set faces
+for each priority.
+
+*** In agenda, only priority cookies get the special face
+
+So far, an entire task would get a special face when
+=org-agenda-fontify-priorities= was set. Now, the default value
+for this variable is the symbol =cookies=, which means that on
+the cookie is fontified. Set it to =t= if you want the entire
+task headline to be fontified.
+
* Version 6.23
** Overview
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 8698b4521..35e5d3473 100755
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,5 +1,17 @@
2009-03-03 Carsten Dominik
+ * org-agenda.el (org-agenda-fontify-priorities): New default value
+ `cookies'.
+ (org-agenda-fontify-priorities): Renamed from
+ org-fontify-priorities.
+
+ * org.el (org-set-font-lock-defaults): Call
+ `org-font-lock-add-priority-faces'.
+ (org-font-lock-add-priority-faces): New function.
+
+ * org-faces.el: (org-set-tag-faces): New option.
+ (org-priority-faces): New variable.
+
* org-exp.el (org-export-as-html): Add a "content" div around the
entire content of the body tag.
(org-export-html-get-bibliography): New function.
diff --git a/lisp/org-agenda.el b/lisp/org-agenda.el
index 8b07e049b..bf7881bc8 100644
--- a/lisp/org-agenda.el
+++ b/lisp/org-agenda.el
@@ -1069,18 +1069,22 @@ it means that the tags should be flushright to that column. For example,
(if (fboundp 'defvaralias)
(defvaralias 'org-agenda-align-tags-to-column 'org-agenda-tags-column))
-(defcustom org-agenda-fontify-priorities t
+(defcustom org-agenda-fontify-priorities 'cookies
"Non-nil means, highlight low and high priorities in agenda.
When t, the highest priority entries are bold, lowest priority italic.
+However, settings in org-priority-faces will overrule these faces.
+When this variable is the symbol `cookies', only fontify the
+cookies, not the entire task.
This may also be an association list of priority faces, whose
keys are the character values of `org-highest-priority',
`org-default-priority', and `org-lowest-priority' (the default values
-are ?A, ?B, and ?C, respectively). The face may be a names face,
+are ?A, ?B, and ?C, respectively). The face may be a named face,
or a list like `(:background \"Red\")'."
:group 'org-agenda-line-format
:type '(choice
(const :tag "Never" nil)
(const :tag "Defaults" t)
+ (const :tag "Cookies only" cookies)
(repeat :tag "Specify"
(list (character :tag "Priority" :value ?A)
(sexp :tag "face")))))
@@ -2282,14 +2286,14 @@ Drawers will be excluded, also the line with scheduling/deadline info."
org-agenda-view-columns-initially)
(org-agenda-columns))
(when org-agenda-fontify-priorities
- (org-fontify-priorities))
+ (org-agenda-fontify-priorities))
(when (and org-agenda-dim-blocked-tasks org-blocker-hook)
(org-agenda-dim-blocked-tasks))
(run-hooks 'org-finalize-agenda-hook)
(setq org-agenda-type (get-text-property (point) 'org-agenda-type))
)))
-(defun org-fontify-priorities ()
+(defun org-agenda-fontify-priorities ()
"Make highest priority lines bold, and lowest italic."
(interactive)
(mapc (lambda (o) (if (eq (org-overlay-get o 'org-type) 'org-priority)
@@ -2305,12 +2309,16 @@ Drawers will be excluded, also the line with scheduling/deadline info."
l (or (get-char-property (point) 'org-lowest-priority)
org-lowest-priority)
p (string-to-char (match-string 1))
- b (match-beginning 0) e (point-at-eol)
+ b (match-beginning 0)
+ e (if (eq org-agenda-fontify-priorities 'cookies)
+ (match-end 0)
+ (point-at-eol))
ov (org-make-overlay b e))
(org-overlay-put
ov 'face
- (cond ((listp org-agenda-fontify-priorities)
- (cdr (assoc p org-agenda-fontify-priorities)))
+ (cond ((cdr (assoc p org-priority-faces)))
+ ((and (listp org-agenda-fontify-priorities)
+ (cdr (assoc p org-agenda-fontify-priorities)))
((equal p l) 'italic)
((equal p h) 'bold)))
(org-overlay-put ov 'org-type 'org-priority)))))
diff --git a/lisp/org-faces.el b/lisp/org-faces.el
index 5924807e8..24f23a241 100644
--- a/lisp/org-faces.el
+++ b/lisp/org-faces.el
@@ -323,6 +323,18 @@ list of attributes, like (:foreground \"blue\" :weight bold :underline t)."
(string :tag "keyword")
(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, or a property
+list of attributes, like (:foreground \"blue\" :weight bold :underline t)."
+ :group 'org-faces
+ :group 'org-todo
+ :type '(repeat
+ (cons
+ (character :tag "Priority")
+ (sexp :tag "face"))))
+
(defvar org-tags-special-faces-re nil)
(defun org-set-tag-faces (var value)
(set var value)
diff --git a/lisp/org.el b/lisp/org.el
index f1d3d981a..47b9fd114 100644
--- a/lisp/org.el
+++ b/lisp/org.el
@@ -4333,7 +4333,7 @@ between words."
'(2 'org-headline-done t))
nil)
;; Priorities
- (list (concat "\\[#[A-Z0-9]\\]") '(0 'org-special-keyword t))
+ '(org-font-lock-add-priority-faces)
;; Tags
'(org-font-lock-add-tag-faces)
;; Special keywords
@@ -4404,6 +4404,16 @@ If KWD is a number, get the corresponding match group."
'font-lock-fontified t))
(backward-char 1))))
+(defun org-font-lock-add-priority-faces (limit)
+ "Add the special priority faces."
+ (while (re-search-forward "\\[#\\([A-Z0-9]\\)\\]" limit t)
+ (add-text-properties
+ (match-beginning 0) (match-end 0)
+ (list 'face (or (cdr (assoc (char-after (match-beginning 1))
+ org-priority-faces))
+ 'org-special-keyword)
+ 'font-lock-fontified t))))
+
(defun org-get-tag-face (kwd)
"Get the right face for a TODO keyword KWD.
If KWD is a number, get the corresponding match group."