In 2016-08-07 15:16, Clément Pit--Claudel wrote: > The two attached patches add this feature.
There was a small mistake in the first patch; I have reattached both of them.
From 41263e53a58fe43a123e00b5ee2ce459f1b1274e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Pit--Claudel?= <clement.pitclau...@live.com> Date: Sun, 7 Aug 2016 14:59:05 -0400 Subject: [PATCH 1/2] Use font-lock-append-text-property to apply org-src faces * lisp/org-src.el (org-src-font-lock-fontify-block): Replace anonymous faces with inheritance by lists of faces constructed by `font-lock-add-text-property`. This properly deals with cases when the source buffer's `face' property is already a list. --- lisp/org-src.el | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/lisp/org-src.el b/lisp/org-src.el index 892c52e..5906721 100644 --- a/lisp/org-src.el +++ b/lisp/org-src.el @@ -492,10 +492,7 @@ as `org-src-fontify-natively' is non-nil." (when (fboundp lang-mode) (let ((string (buffer-substring-no-properties start end)) (modified (buffer-modified-p)) - (org-buffer (current-buffer)) - (block-faces (let ((face-name (intern (format "org-block-%s" lang)))) - (append (and (facep face-name) (list face-name)) - '(org-block))))) + (org-buffer (current-buffer))) (remove-text-properties start end '(face nil)) (with-current-buffer (get-buffer-create @@ -509,14 +506,14 @@ as `org-src-fontify-natively' is non-nil." (while (setq next (next-single-property-change pos 'face)) (let ((new-face (get-text-property pos 'face))) (put-text-property - (+ start (1- pos)) (1- (+ start next)) 'face - (list :inherit (append (and new-face (list new-face)) - block-faces)) + (+ start (1- pos)) (1- (+ start next)) 'face new-face org-buffer)) - (setq pos next)) - ;; Add the face to the remaining part of the text. - (put-text-property (1- (+ start pos)) end 'face - (list :inherit block-faces) 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)) + (font-lock-append-text-property start end 'face 'org-block)) (add-text-properties start end '(font-lock-fontified t fontified t font-lock-multiline t)) -- 2.7.4
From f764ad7379a98ea31b9e492dfa5bd447a2135314 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Pit--Claudel?= <clement.pitclau...@live.com> Date: Sun, 7 Aug 2016 15:03:55 -0400 Subject: [PATCH 2/2] Copy all font-lock properties in org-src, not just face * lisp/org-src (org-src-font-lock-fontify-block): Loop over `font-lock-extra-managed-props', thus copying other properties that might be applied using font-lock. An example is composition, applied by `prettify-symbols-mode'. --- lisp/org-src.el | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/lisp/org-src.el b/lisp/org-src.el index 5906721..04f5f62 100644 --- a/lisp/org-src.el +++ b/lisp/org-src.el @@ -503,11 +503,12 @@ as `org-src-fontify-natively' is non-nil." (unless (eq major-mode lang-mode) (funcall lang-mode)) (org-font-lock-ensure) (let ((pos (point-min)) next) - (while (setq next (next-single-property-change pos 'face)) - (let ((new-face (get-text-property pos 'face))) - (put-text-property - (+ start (1- pos)) (1- (+ start next)) 'face new-face - org-buffer)) + (while (setq next (next-property-change pos)) + (dolist (prop (cons 'face font-lock-extra-managed-props)) + (let ((new-prop (get-text-property pos prop))) + (put-text-property + (+ start (1- pos)) (1- (+ start next)) prop new-prop + org-buffer))) (setq pos next)))) ;; Add org faces (let ((face-name (intern (format "org-block-%s" lang)))) -- 2.7.4
signature.asc
Description: OpenPGP digital signature