2014-10-10 1 views
3

Я пытаюсь изменить цвет фона блоков кода R в орг-режиме 8. В Org-режиме 7, я был в состоянии использовать:раскрасить R блоков кода в орг-режиме 8

(defface org-block-background 
    '((t (:background "#dadada"))) 
    "Face used for the source block background.") 

Но переменная org-block-background, кажется, исчезла в версии 8 ...?

Я пробовал:

(defface org-block 
    '((t (:background "#dadada"))) 
    "Face used for the source block background.") 

, который работает:

#+BEGIN_SRC 
#+END_SRC 

и

#+BEGIN_latex 
#+END_latex 

Но по какой-то причине, цвет фона исчезает, в тот момент я указать язык, например,

#+BEGIN_SRC R 
#+END_SRC 

Я работаю на Mac, работает Emacs 24.3 и модернизировал орг-режим v8, используя:

cd ~/.emacs.d/lisp 
git clone git://orgmode.org/org-mode.git 
cd org-mode 
make autoloads 
make 
make doc 

Вот конфиг из моего init.el файла:

;;;----- Startup ----------------------------; 

;;; Add src directory to path 
(add-to-list 'load-path "~/.emacs.d/lisp/") 

;;;----- Org-Mode ---------------------------; 

;;; Add upgraded org-mode to load path 
(add-to-list 'load-path "~/.emacs.d/lisp/org-mode/lisp") 
(add-to-list 'load-path "~/.emacs.d/lisp/org-mode/contrib/lisp" t) 

;;; fontify code in code blocks 
(setq org-src-fontify-natively t) 

(defface org-block-begin-line 
    '((t (:foreground "#666666" :background "#dadada"))) 
    "Face used for the line delimiting the begin of source blocks.") 

(defface org-block 
    '((t (:background "#dadada"))) 
    "Face used for the source block background.") 

(defface org-block-end-line 
    '((t (:foreground "#666666" :background "#dadada"))) 
    "Face used for the line delimiting the end of source blocks.") 

(require 'org) 

;;;----- ESS/R ------------------------------; 

(add-to-list 'load-path "~/.emacs.d/lisp/ess/lisp/") 
(load "ess-site") 

;;;------ Babel ------------------------------; 

;;; Support R 
(org-babel-do-load-languages 
    'org-babel-load-languages 
    '((R . t) 
    (latex . t))) 

;;;----- Look & feel ----------------------------; 

;;; Set default theme 
(add-to-list 'custom-theme-load-path "~/.emacs.d/themes") 
(load-theme 'solarized-light t) 

Есть идеи?

Спасибо!

+0

Поместите курсор на точку, которую вы хотите изменить шрифт, и типа 'Cu Cx =', и что скажет вам (среди прочего) имя шрифта в этот момент. Затем вы можете «M-x customize-face» шрифт, который хотите изменить, или вручную изменить его в файле '.emacs'. – lawlist

+0

Спасибо! Когда я накладываю курсор на общий блок # + BEGIN_SRC/# + END_SRC, я получаю [эту распечатку] (https://www.dropbox.com/s/4poyb4ymlwe22x5/begin_src.png?dl=0). Но когда я делаю то же самое над блоком # + BEGIN_SRC R/# + END_SRC, я получаю [это] (https://www.dropbox.com/s/gfow57b60gz5uvp/begin_src_r.png?dl=0). Второй, кажется, отсутствует свойство 'face: org-block' ...? – Adam

+0

Я думаю, вы нашли его - попробуйте изменить «org-block» (например, «Текст лица в # + begin ... # + end blocks. *») И посмотрите, помогает ли это - 'Mx customize -face RET org-block RET' В моем снимке разработчика Emacs-Trunk он показывает наследование «shadow». Таким образом, вы можете удалить наследование и установить его на все, что хотите, или вместо этого изменить «тень». – lawlist

ответ

1

Я понял. Оказывается, я клонировал старую ветку org-mode, в которой отсутствовала переменная org-block-background! Удаляется мою папку орг-режиме и переустанавливать с помощью:

cd ~/.emacs.d/lisp 
git clone https://github.com/Konubinix/org-mode.git 
cd org-mode 
make autoloads 
make 
make doc 

Затем пересмотрел свой init.el следующим образом:

;;;----- Org-Mode ---------------------------; 


;;; Add upgraded org-mode to load path 
(add-to-list 'load-path "~/.emacs.d/lisp/org-mode/lisp") 
(add-to-list 'load-path "~/.emacs.d/lisp/org-mode/contrib/lisp" t) 

;;; fontify code in code blocks 
(setq org-src-fontify-natively t) 

(defface org-block-begin-line 
    '((t (:foreground "#666666" :background "#dadada"))) 
    "Face used for the line delimiting the begin of source blocks.") 

(defface org-block 
    '((t (:background "#dadada"))) 
    "Face used for the source block background.") 

(defface org-block-background 
    '((t (:background "#dadada"))) 
    "Face used for the source block background.") 

(defface org-block-end-line 
    '((t (:foreground "#666666" :background "#dadada"))) 
    "Face used for the line delimiting the end of source blocks.") 

(require 'org) 

И вуаля!

+0

Это больше не актуально. См. Мой ответ. –

5

FYI, это не сработает для текущих версий режима Org (от ведущей ветви Git), после этого совершить http://orgmode.org/cgit.cgi/org-mode.git/commit/?id=f8b42e8 - по крайней мере, пока что-то не изменится. Это объявлено here (июль 2014 г.) и продолжает действовать для пользователей режима Org. см. here (апрель 2015 г.). Любой, кто хочет восстановить старое поведение локально, может сделать это из-за diff-commit, которого я не пробовал. Будущие версии Org Mode могут восстановить эту функцию, возможно, идя по-другому. На данный момент это все, что вы можете получить:

enter image description here

(Первый блок SRC выше получает фон из моей установки для org-block.)

3

Оказывается org-block-background лицо было удалено в орг версии 8.3.1 в фиксации f8b42e8, таким образом, ошибка.Обоснование, как представляется,

  1. это вызывает ошибку с ps экспорта
  2. это неэффективно

Может быть, в будущем будет альтернатива, но еще нет.

Fontify R code blocks in Org-mode 8

https://lists.gnu.org/archive/html/emacs-orgmode/2015-08/msg00510.html

В настоящее время, кажется, единственный способ получить старое поведение обратно вручную отменить изменения, внесенные в фиксации f8b42e8. Вы можете увидеть совершить здесь:

http://orgmode.org/cgit.cgi/org-mode.git/commit/?id=f8b42e8

diff --git a/lisp/org-faces.el b/lisp/org-faces.el 
index e693dab..83453e8 100644 
--- a/lisp/org-faces.el 
+++ b/lisp/org-faces.el 
@@ -537,9 +537,6 @@ follows a #+DATE:, #+AUTHOR: or #+EMAIL: keyword." 
    :group 'org-faces 
    :version "22.1") 

-(defface org-block-background '((t())) 
- "Face used for the source block background.") 
- 
(org-copy-face 'org-meta-line 'org-block-begin-line 
    "Face used for the line delimiting the begin of source blocks.") 

diff --git a/lisp/org.el b/lisp/org.el 
index a153151..7e30061 100644 
--- a/lisp/org.el 
+++ b/lisp/org.el 
@@ -5930,15 +5930,7 @@ by a #." 
      (cond 
      ((and lang (not (string= lang "")) org-src-fontify-natively) 
     (org-src-font-lock-fontify-block lang block-start block-end) 
-  ;; remove old background overlays 
-  (mapc (lambda (ov) 
-   (if (eq (overlay-get ov 'face) 'org-block-background) 
-    (delete-overlay ov))) 
-    (overlays-at (/ (+ beg1 block-end) 2))) 
-  ;; add a background overlay 
-  (setq ovl (make-overlay beg1 block-end)) 
-    (overlay-put ovl 'face 'org-block-background) 
-    (overlay-put ovl 'evaporate t)) ; make it go away when empty 
+  (add-text-properties beg1 block-end '(src-block t))) 
      (quoting 
     (add-text-properties beg1 (min (point-max) (1+ end1)) 
        '(face org-block))) ; end of source block 
@@ -21828,9 +21820,7 @@ and end of string." 
When INSIDE is non-nil, don't consider we are within a src block 
when point is at #+BEGIN_SRC or #+END_SRC." 
    (let ((case-fold-search t) ov) 
- (or (and (setq ov (overlays-at (point))) 
-  (memq 'org-block-background 
-   (overlay-properties (car ov)))) 
+ (or (and (eq (get-char-property (point) 'src-block) t)) 
    (and (not inside) 
     (save-match-data 
      (save-excursion 
Смежные вопросы