fonte org-block-background não tendo efeito

9

Eu uso variable-pitch-modecom orgbuffers. Normalmente, defino org-blockcomo fixed-pitche o código entre #+BEGIN_SRCe #+END_SRCsão renderizados corretamente como fontes de largura fixa, também com realce de sintaxe adequado. No entanto, a partir da semana passada, por algum motivo, embora a fonte do bloco de código ainda possuísse realce de sintaxe adequado, a face ficou igual à dos variable-pitch-facetextos normais do modo organizacional. Eu atualizo meus pacotes periodicamente e acho que uma atualização org-modecausou o problema, mas não tenho certeza do que aconteceu.


Atualizar:

Acontece que isso está realmente relacionado à org-block-backgroundface, que foi removida na versão 8.3.1 da organização em commit f8b42e8, portanto, o bug. Não tenho certeza se ainda há uma solução. /programming/26290924/fontify-r-code-blocks-in-org-mode-8 https://lists.gnu.org/archive/html/emacs-orgmode/2015-08/msg00510 .html

No momento, estou bloqueando minha versão do modo organizacional para a versão mais antiga.


Atualização 2:

A versão mais recente do modo organizacional, versão 9.0.0, aparentemente permite src-blocksherdar o org-blockrosto, enquanto o org-block-backgroundrosto se torna obsoleto. Portanto, agora, apenas ao definir a org-blockface, você poderá ter fontes de largura fixa para todos os códigos.

xji
fonte
@rasmus Obrigado pelo patch. No entanto, isso parece funcionar em um #BEGIN_EXAMPLEbloco, mas não funciona #BEGIN_SRC language_name? Uma vez que o idioma deve ter sua própria sintaxe destacada, a fonte volta ao tom variável no meu caso.
Xj6
Você precisa usar a versão principal - o que acabará sendo o Org-9.
rasmus
@rasmus Apenas para confirmar, nesta versão, o rosto entre #BEGIN_SRC lang_namee #END_SRCdeve ser algo diferente default, certo? Atualmente, quando corro describe-facedentro do bloco, recebo default, que é a mesma fonte que o texto normal do modo org. Enquanto está entre #BEGIN_EXAMPLEe #END_EXAMPLEé org-blocke ~text~é org-code, é , =text=é org-verbatime, portanto, esses textos são exibidos como afinação correta corretamente.
xji
@rasmus Como ainda está defaultenfrentam beween #BEGIN_SRC lang_namee #END_SRC, ao que parece impossível defini-lo como de passo fixo, mantendo o teor de passo variável normal. Não tenho certeza se instalei corretamente o ramo mestre.
xji

Respostas:

7

Acontece que isso está realmente relacionado à face org-block-background, que foi removida na versão 8.3.1 da organização no commit f8b42e8, portanto, o bug. A lógica parece ser

  1. causa um erro na psexportação
  2. é ineficiente

Talvez no futuro haja uma alternativa, mas ainda não.

/programming/26290924/fontify-r-code-blocks-in-org-mode-8

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

Atualmente, parece que a única maneira de recuperar o comportamento antigo é reverter manualmente as alterações introduzidas no commit f8b42e8. Você pode ver o commit aqui:

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
xji
fonte
Obrigado por desenterrar isso - é uma pena, pois eu realmente não tinha visto nenhum dos problemas.
Stuart Hickinbottom
@stuarthickinbottom Sim, eu acho que a mudança só ocorreu depois da minha org-mode atualizado para 8.3.1
XJI
2

Não sei ao certo quando isso mudou, mas também estou vendo.

Usando C-u C-x =dentro desse bloco, posso ver que ele org-block-backgroundagora tem o rosto agora, e não org-block. Personalizar esse rosto para herdar de fixed-pitchobras para mim.

Testado da seguinte forma:

(set-face-attribute 'org-block-background nil :inherit 'fixed-pitch)

Se você deseja preservar qualquer herança existente nessa face, faça o seguinte (adaptado do original aqui: /programming/3758139/variable-pitch-for-org-mode-fixed-pitch-for -tables / 16819449 # 16819449 ):

(defun my-adjoin-to-list-or-symbol (element list-or-symbol)
    (let ((list (if (not (listp list-or-symbol))
                    (list list-or-symbol)
                  list-or-symbol)))
      (require 'cl-lib)
      (cl-adjoin element list)))

(set-face-attribute 'org-block-background nil :inherit
            (my-adjoin-to-list-or-symbol
             'fixed-pitch
             (face-attribute 'org-block-background :inherit)))
Stuart Hickinbottom
fonte
Eu tenho usado esse método antes que esse problema ocorresse. Acontece que o org-block-backgroundrosto foi removido na versão 8.3.1 da organização, provavelmente o bug. stackoverflow.com/questions/26290924/… lists.gnu.org/archive/html/emacs-orgmode/2015-08/msg00523.html
xji
+1 para Cu Cx = Eu nunca soube que isso existia e estou procurando algo assim há algum tempo.
Julien Chastang