org-block-background font pas d'effet

9

J'utilise variable-pitch-modeavec des orgtampons. Normalement, je mets org-blockà fixed-pitchet le code entre #+BEGIN_SRCet #+END_SRCsont correctement rendus sous forme de polices à largeur fixe, également avec une mise en évidence de la syntaxe appropriée. Cependant, à partir de la semaine dernière, pour une raison quelconque, bien que la police du bloc de code ait toujours une mise en évidence de la syntaxe appropriée, le visage est devenu le même que les variable-pitch-facetextes normaux en mode org. Je mets à jour mes packages périodiquement et je pense qu'une mise à jour a org-modecausé le problème, mais je ne suis pas sûr de ce qui s'est passé.


Mise à jour:

Il s'avère que cela est en fait lié à org-block-backgroundface, qui a été supprimé dans la version org 8.3.1 dans commit f8b42e8, d'où le bogue. Je ne sais pas encore s'il y a une solution. /programming/26290924/fontify-r-code-blocks-in-org-mode-8 https://lists.gnu.org/archive/html/emacs-orgmode/2015-08/msg00510 .html

Je suis en train de verrouiller ma version en mode org sur l'ancienne.


Mise à jour 2:

La dernière version en mode org, la version 9.0.0, laisse apparemment src-blockshériter le org-blockvisage, tandis que le org-block-backgroundvisage devient obsolète. Alors maintenant, juste en définissant le org-blockvisage, vous devriez pouvoir avoir des polices à largeur fixe pour tous les codes.

xji
la source
@rasmus Merci pour le patch. Cependant, cela semble fonctionner dans un #BEGIN_EXAMPLEbloc, mais ne fonctionne pas dans #BEGIN_SRC language_name? Une fois que la langue doit avoir sa propre coloration syntaxique, la police revient à hauteur variable dans mon cas.
xji
Vous devez utiliser la version principale - ce qui sera finalement Org-9.
rasmus
@rasmus Juste pour confirmer, dans cette version, le visage entre #BEGIN_SRC lang_nameet #END_SRCdevrait être autre chose que default, non? Actuellement, lorsque je cours à l' describe-faceintérieur du bloc, j'obtiens default, qui est la même police que le texte normal de orgmode. Pendant qu'entre #BEGIN_EXAMPLEet #END_EXAMPLEc'est org-blocket pour ~text~c'est org-code, pour =text=c'est org-verbatim, et donc ces textes sont affichés correctement à hauteur fixe.
xji
@rasmus Puisqu'il est toujours defaultface à #BEGIN_SRC lang_nameet #END_SRC, il semble impossible de le mettre à hauteur fixe tout en conservant la hauteur variable de contenu normal. Je ne suis pas sûr d'avoir correctement installé la branche principale.
xji

Réponses:

7

Il s'avère que cela est en fait lié à la face org-block-background, qui a été supprimée dans la version org 8.3.1 dans commit f8b42e8, d'où le bogue. La justification semble être

  1. cela provoque un bug avec l' psexportation
  2. c'est inefficace

Peut-être qu'à l'avenir il y aura une alternative, mais pas encore.

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

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

Actuellement, il semble que le seul moyen de récupérer l'ancien comportement soit d'inverser manuellement les modifications introduites dans commit f8b42e8. Vous pouvez voir le commit ici:

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
la source
Merci d'avoir creusé cela - c'est dommage car je n'avais pas vraiment vu les problèmes moi-même.
Stuart Hickinbottom
@stuarthickinbottom Ouais, je suppose que ce changement ne s'est produit qu'après la mise à jour de mon org-mode en 8.3.1
xji
2

Je ne sais pas quand cela a changé, mais je le vois aussi.

En utilisant C-u C-x =un tel bloc, je peux voir qu'il a réellement le visage org-block-backgroundmaintenant, plutôt que org-block. Personnaliser ce visage pour hériter des fixed-pitchœuvres pour moi.

Testé comme suit:

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

Si vous voulez conserver tout héritage existant sur ce visage, vous pouvez faire ce qui suit (adapté de l'original ici: /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
la source
J'utilisais cette méthode avant que ce problème ne se produise. Il s'avère que le org-block-backgroundvisage a été supprimé dans la version 8.3.1 de l'organisation, d'où probablement le bogue. stackoverflow.com/questions/26290924/… lists.gnu.org/archive/html/emacs-orgmode/2015-08/msg00523.html
xji
+1 pour Cu Cx = Je ne savais pas que cela existait, et je cherche quelque chose comme ça depuis un moment maintenant.
Julien Chastang