Browse Source

org-src: New syntax for source blocks faces

* doc/org.texi (Editing source code): Document changes.
* lisp/org-faces.el (org-block): Update docstring.
  (org-src-block-faces): New defcustom for source-block faces.
* lisp/org-src.el (org-src-font-lock-fontify-block): Use
  org-src-block-faces.
* etc/ORG-NEWS: Update NEWS entry.
Rasmus 8 years ago
parent
commit
e03e837168
4 changed files with 38 additions and 17 deletions
  1. 8 9
      doc/org.texi
  2. 2 1
      etc/ORG-NEWS
  3. 25 4
      lisp/org-faces.el
  4. 3 3
      lisp/org-src.el

+ 8 - 9
doc/org.texi

@@ -14900,21 +14900,20 @@ By default, Org will ask before returning to an open edit buffer.  Set this
 variable to @code{nil} to switch without asking.
 @end table
 
-To turn on native code fontification in the @emph{Org} buffer, configure the
-variable @code{org-src-fontify-natively}.  You can also change the appearance
-of source blocks by customizing the @code{org-block} face or for specific
-languages, by defining @code{org-block-LANGUAGE} faces.  The following
-example shades the background of ``ordinary'' blocks while allowing Emacs
-Lisp source blocks to have a special color.
+To turn on native code fontification in the @emph{Org} buffer, set the
+variable @code{org-src-fontify-natively} to non-@code{nil}.  You can also
+change the appearance of source blocks in general by customizing the
+@code{org-block} face or @code{org-src-block-faces} for specific languages.
+The following example shades the background of ``ordinary'' blocks while
+allowing Emacs Lisp and Python source blocks to have a separate colors.
 @lisp
 (require 'color)
 (set-face-attribute 'org-block nil :background
                     (color-darken-name
                      (face-attribute 'default :background) 3))
 
-(defface org-block-emacs-lisp
-  '((t (:background "#EEE2FF")))
-  "Face for Emacs Lisp src blocks")
+(setq org-src-block-faces '(("emacs-lisp" (:background "#EEE2FF"))
+                            ("python" (:background "#E5FFB8"))))
 @end lisp
 
 @node Exporting code blocks

+ 2 - 1
etc/ORG-NEWS

@@ -374,7 +374,8 @@ Repeated footnotes are now numbered by referring to a label in the
 first footnote.
 *** The ~org-block~ face is inherited by ~src-blocks~
 This works also when =org-src-fontify-natively= is non-nil.  It is also
-possible to specify per-languages faces.  See the manual for details.
+possible to specify per-languages faces.  See =org-src-block-faces= and
+the manual for details.
 *** Links are now customizable
 Links can now have custom colors, tooltips, keymaps, display behavior,
 etc... Links are now centralized in ~org-link-parameters~.

+ 25 - 4
lisp/org-faces.el

@@ -395,11 +395,32 @@ follows a #+DATE:, #+AUTHOR: or #+EMAIL: keyword."
 
 (defface org-block '((t :inherit shadow))
   "Face text in #+begin ... #+end blocks.
-In addition to this face that take precedence for particular
-languages.  For instance, to change the block face for Emacs-Lisp
-blocks define a `org-block-emacs-lisp' face."
+For source-blocks `org-src-block-faces' takes precedence.
+See also `org-fontify-quote-and-verse-blocks'."
   :group 'org-faces
-  :version "22.1")
+  :version "25.2")
+
+(defcustom org-src-block-faces nil
+  "Alist of faces to be used for source-block.
+Each element is a cell of the format
+
+     (\"language\" FACE)
+
+Where FACE is either a defined face or an anonymous face.
+
+For instance, the following value would color the background of
+emacs-lisp source blocks and python source blocks in purple and
+green, respectability.
+
+    '((\"emacs-lisp\" (:background \"#EEE2FF\"))
+      (\"python\" (:background \"#e5ffb8\")))"
+  :group 'org-faces
+  :type '(repeat (list (string :tag "language")
+                       (choice
+                        (face :tag "Face")
+                        (sexp :tag "Anonymous face"))))
+  :version "25.2"
+  :package-version '(Org . "9.0"))
 
 (defface org-block-begin-line '((t (:inherit org-meta-line)))
   "Face used for the line delimiting the begin of source blocks."

+ 3 - 3
lisp/org-src.el

@@ -513,9 +513,9 @@ as `org-src-fontify-natively' is non-nil."
 		   org-buffer)))
 	      (setq pos next))))
 	;; Add Org faces.
-	(let ((face-name (intern (format "org-block-%s" lang))))
-	  (when (facep face-name)
-	    (font-lock-append-text-property start end 'face face-name))
+	(let ((src-face (cadr (assoc-ignore-case lang org-src-block-faces))))
+          (when (or (facep src-face) (listp))
+            (font-lock-append-text-property start end 'face src-face))
 	  (font-lock-append-text-property start end 'face 'org-block))
 	(add-text-properties
 	 start end