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.