il font org-block-background non ha effetto


9

Uso variable-pitch-modecon i orgbuffer. Normalmente ho impostato org-blocksu fixed-pitche il codice tra #+BEGIN_SRCe #+END_SRCsono correttamente visualizzati come caratteri a larghezza fissa, anche con l'evidenziazione della sintassi corretta. Tuttavia, a partire dalla scorsa settimana, per qualche motivo, sebbene il carattere del blocco di codice avesse ancora l'evidenziazione della sintassi corretta, la faccia è diventata la stessa dei variable-pitch-facenormali testi in modalità org. Aggiorna periodicamente i miei pacchetti e penso che un org-modeproblema abbia causato il problema, ma non sono sicuro di cosa sia successo.


Aggiornare:

Si scopre che questo è in realtà correlato a org-block-backgroundface, che è stato rimosso nella versione 8.3.1 di commit in commit f8b42e8, quindi il bug. Non sono sicuro che ci sia ancora una soluzione. /programming/26290924/fontify-r-code-blocks-in-org-mode-8 https://lists.gnu.org/archive/html/emacs-orgmode/2015-08/msg00510 .html

Attualmente sto solo bloccando la mia versione in modalità org a quella precedente.


Aggiornamento 2:

La versione più recente della modalità org, la versione 9.0.0, apparentemente lascia src-blocksereditare il org-blockvolto, mentre il org-block-backgroundvolto diventa obsoleto. Quindi ora solo impostando org-blockface dovresti essere in grado di avere caratteri a larghezza fissa per tutti i codici.



@rasmus Grazie per la patch. Tuttavia, questo sembra funzionare in un #BEGIN_EXAMPLEblocco, ma non funziona #BEGIN_SRC language_name? Una volta che la lingua dovrebbe avere la sua evidenziazione della sintassi, nel mio caso il carattere ritorna al tono variabile.
xji,

Devi usare la versione principale, che alla fine sarà Org-9.
rasmus l'

@rasmus Solo per confermare, in questa versione il volto tra #BEGIN_SRC lang_namee #END_SRCdovrebbe essere qualcosa di diverso default, giusto? Attualmente quando corro describe-faceall'interno del blocco, ottengo default, che è lo stesso carattere del normale testo di orgmode. Mentre tra #BEGIN_EXAMPLEe #END_EXAMPLEè org-blocke per ~text~è org-code, per =text=è org-verbatim, e quindi quei testi vengono visualizzati correttamente con il tono fisso.
xji,

@rasmus Dal momento che è ancora defaultvolto #BEGIN_SRC lang_namee #END_SRCsembra impossibile impostarlo a tono fisso mantenendo il normale contenuto a passo variabile. Tuttavia, non sono sicuro di aver installato correttamente il ramo principale.
xji,

Risposte:


7

Si scopre che questo è in realtà correlato alla faccia org-block-background, che è stata rimossa nella versione org 8.3.1 in commit f8b42e8, quindi il bug. La logica sembra essere

  1. provoca un bug con l' psesportazione
  2. è inefficiente

Forse in futuro ci sarà un'alternativa, ma non ancora.

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

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

Attualmente sembra che l'unico modo per ripristinare il vecchio comportamento sia invertire manualmente le modifiche introdotte in commit f8b42e8. Puoi vedere il commit qui:

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

Grazie per averlo scoperto - è un peccato perché non ho visto nessuno dei problemi da solo.
Stuart Hickinbottom,

@stuarthickinbottom Sì, immagino che il cambiamento sia avvenuto solo dopo che la mia modalità organizzazione è stata aggiornata alla 8.3.1
xji

2

Non sono sicuro di quando sia cambiato, ma lo vedo anche io.

Usando C-u C-x =all'interno di un tale blocco posso vedere che in realtà ha la faccia org-block-backgroundora, piuttosto che org-block. Personalizzare quella faccia per ereditare dalle fixed-pitchopere per me.

Testato come segue:

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

Se vuoi conservare qualsiasi eredità esistente su quella faccia, potresti fare quanto segue (adattato dall'originale qui: /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)))

Ho usato questo metodo prima che si verificasse questo problema. Si scopre che la org-block-backgroundfaccia è stata rimossa nella versione 8.3.1 dell'organizzazione, quindi probabilmente il bug. stackoverflow.com/questions/26290924/... lists.gnu.org/archive/html/emacs-orgmode/2015-08/msg00523.html
xji

+1 per Cu Cx = Non ho mai saputo che esistesse, e ho cercato qualcosa di simile per un po 'di tempo.
Julien Chastang,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.