font org-block-background tidak berpengaruh

9

Saya gunakan variable-pitch-modedengan orgbuffer. Biasanya saya mengatur org-blockke fixed-pitchdan kode antara #+BEGIN_SRCdan #+END_SRCbenar diterjemahkan sebagai font lebar tetap, juga dengan penyorotan sintaksis yang tepat. Namun mulai dari minggu lalu, untuk beberapa alasan, meskipun font blok kode masih memiliki penyorotan sintaks yang tepat, wajah menjadi sama seperti variable-pitch-faceteks mode org normal. Saya memperbarui paket saya secara berkala dan saya pikir pembaruan dalam org-modemenyebabkan masalah tetapi saya tidak yakin apa yang terjadi.


Memperbarui:

Ternyata ini sebenarnya terkait dengan org-block-backgroundwajah, yang telah dihapus di org versi 8.3.1 di komit f8b42e8, sehingga bug. Belum yakin apakah ada solusi. /programming/26290924/fontify-r-code-blocks-in-org-mode-8 https://lists.gnu.org/archive/html/emacs-orgmode/2015-08/msg00510 .html

Saat ini saya hanya mengunci versi mode-org saya ke yang lebih lama.


Pembaruan 2:

Rilis mode-org terbaru, versi 9.0.0, tampaknya memungkinkan src-blocksmewarisi org-blockwajah, sementara org-block-backgroundwajah menjadi usang. Jadi sekarang hanya dengan mengatur org-blockwajah Anda harus dapat memiliki font dengan lebar tetap untuk semua kode.

xji
sumber
@rasmus Terima kasih untuk tambalannya. Namun, ini tampaknya bekerja di #BEGIN_EXAMPLEblok, tetapi tidak berhasil #BEGIN_SRC language_name? Setelah bahasa seharusnya memiliki penyorotan sintaksnya sendiri, font akan kembali ke variabel-pitch dalam kasus saya.
xji
Anda harus menggunakan versi master - yang nantinya akan menjadi Org-9.
rasmus
@rasmus Hanya untuk mengkonfirmasi, dalam versi ini wajah antara #BEGIN_SRC lang_namedan #END_SRCharus menjadi sesuatu yang lain default, bukan? Saat ini ketika saya menjalankan describe-facebagian dalam blok, saya dapatkan default, yang merupakan font yang sama dengan teks normal dari orgmode. Sementara antara #BEGIN_EXAMPLEdan #END_EXAMPLEitu org-blockdan untuk ~text~itu org-code, untuk =text=itu org-verbatim, dan dengan demikian teks-teks tersebut ditampilkan sebagai pitch yang diperbaiki dengan benar.
xji
@rasmus Karena masih defaultmenghadap ke bawah #BEGIN_SRC lang_namedan #END_SRC, sepertinya tidak mungkin untuk mengaturnya ke pitch tetap sambil menjaga konten variabel-pitch normal. Saya tidak yakin saya sudah menginstal cabang master dengan benar.
xji

Jawaban:

7

Ternyata ini sebenarnya terkait dengan wajah org-block-background, yang telah dihapus dalam org versi 8.3.1 di komit f8b42e8, dengan demikian bug. Alasannya tampaknya

  1. itu menyebabkan bug dengan psekspor
  2. itu tidak efisien

Mungkin di masa depan akan ada alternatif, tetapi belum.

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

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

Saat ini tampaknya satu-satunya cara untuk mendapatkan kembali perilaku lama adalah dengan membalik secara manual perubahan yang diperkenalkan dalam komit f8b42e8. Anda dapat melihat komit di sini:

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
sumber
Terima kasih telah menggali itu - itu memalukan karena saya tidak benar-benar melihat ada masalah sendiri.
Stuart Hickinbottom
@stuarthickinbottom Ya saya kira perubahan itu hanya terjadi setelah mode-org saya diperbarui ke 8.3.1
xji
2

Saya tidak yakin kapan itu berubah, tetapi saya juga melihatnya.

Dengan menggunakan C-u C-x =blok seperti itu saya bisa melihatnya benar-benar memiliki wajah org-block-backgroundsekarang, bukan org-block. Menyesuaikan wajah itu untuk diwarisi dari fixed-pitchkarya untuk saya.

Diuji sebagai berikut:

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

Jika Anda ingin mempertahankan warisan apa pun yang ada pada wajah itu, Anda dapat melakukan hal berikut (diadaptasi dari aslinya di sini: /programming/3758139/variable-pitch-for-org-mode-fixed-pitch-for -tabel / 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
sumber
Saya telah menggunakan metode ini sebelum masalah ini terjadi. Ternyata org-block-backgroundwajah telah dihapus dalam versi org 8.3.1, dengan demikian bug mungkin. stackoverflow.com/questions/26290924/… lists.gnu.org/archive/html/emacs-orgmode/2015-08/msg00523.html
xji
+1 untuk Cu Cx = Saya tidak pernah tahu itu ada, dan telah mencari sesuatu seperti ini untuk sementara waktu sekarang.
Julien Chastang