phông chữ org-block-nền không có hiệu lực


9

Tôi sử dụng variable-pitch-modevới orgbộ đệm. Thông thường tôi đặt org-blockthành fixed-pitchvà mã giữa #+BEGIN_SRC#+END_SRCđược hiển thị chính xác dưới dạng phông chữ có chiều rộng cố định, cũng với việc tô sáng cú pháp thích hợp. Tuy nhiên, bắt đầu từ tuần trước, vì một số lý do, mặc dù phông chữ khối mã vẫn có tô sáng cú pháp phù hợp, khuôn mặt trở nên giống như các variable-pitch-facevăn bản chế độ org thông thường. Tôi cập nhật các gói của mình theo định kỳ và tôi nghĩ rằng một bản cập nhật org-modeđã gây ra sự cố nhưng tôi không chắc điều gì đã xảy ra.


Cập nhật:

Hóa ra điều này thực sự liên quan đến org-block-backgroundkhuôn mặt, đã bị xóa trong phiên bản org 8.3.1 trong cam kết f8b42e8, do đó là lỗi. Không chắc chắn nếu có một giải pháp nào. /programming/26290924/fontify-r-code-blocks-in-org-mode-8 https://lists.gnu.org/archive/html/emacs-orgmode/2015-08/msg00510 .html

Hiện tại tôi chỉ khóa phiên bản chế độ org của mình sang phiên bản cũ hơn.


Cập nhật 2:

Bản phát hành chế độ org mới nhất, phiên bản 9.0.0, rõ ràng cho phép src-blockskế thừa org-blockkhuôn mặt, trong khi org-block-backgroundkhuôn mặt trở nên lỗi thời. Vì vậy, bây giờ chỉ bằng cách đặt org-blockkhuôn mặt, bạn sẽ có thể có phông chữ có chiều rộng cố định cho tất cả các mã.



@rasmus Cảm ơn các bản vá. Tuy nhiên, điều này dường như hoạt động trong một #BEGIN_EXAMPLEkhối, nhưng không hoạt động trong #BEGIN_SRC language_name? Một khi ngôn ngữ nên có cú pháp tô sáng riêng, phông chữ sẽ trở lại biến đổi trong trường hợp của tôi.
xji

Bạn cần sử dụng phiên bản chính - cuối cùng sẽ là Org-9.
rasmus

@rasmus Chỉ cần xác nhận, trong phiên bản này, khuôn mặt giữa #BEGIN_SRC lang_name#END_SRCnên là một cái gì đó khác hơn default, phải không? Hiện tại khi tôi chạy describe-facebên trong khối, tôi nhận được default, đó là phông chữ giống như văn bản bình thường của orgmode. Trong khi giữa #BEGIN_EXAMPLE#END_EXAMPLEorg-blockvà đối với ~text~org-code, đối với =text=org-verbatim, và do đó, các văn bản đó được hiển thị dưới dạng cao độ cố định một cách chính xác.
xji

@rasmus Vì nó vẫn defaultphải đối mặt #BEGIN_SRC lang_name#END_SRC, dường như không thể đặt nó thành cao độ cố định trong khi vẫn giữ mức độ biến đổi nội dung bình thường. Tôi không chắc chắn tôi đã cài đặt chính xác nhánh chính.
xji

Câu trả lời:


7

Hóa ra điều này thực sự liên quan đến khuôn mặt nền tảng org, đã bị xóa trong phiên bản org 8.3.1 trong cam kết f8b42e8, do đó là lỗi. Lý do có vẻ là

  1. nó gây ra lỗi khi psxuất
  2. nó không hiệu quả

Có thể trong tương lai sẽ có một sự thay thế, nhưng chưa.

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

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

Hiện tại, có vẻ như cách duy nhất để lấy lại hành vi cũ là đảo ngược thủ công các thay đổi được giới thiệu trong cam kết f8b42e8. Bạn có thể xem cam kết ở đây:

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

Cảm ơn vì đã đào nó ra - đó là một sự xấu hổ vì bản thân tôi không thực sự thấy bất kỳ vấn đề nào.
Stuart Hickinbottom

@stuarthickinbottom Vâng tôi đoán rằng sự thay đổi chỉ xảy ra sau khi chế độ tổ chức của tôi được cập nhật lên 8.3.1
xji

2

Tôi không chắc chắn khi nó thay đổi, nhưng tôi cũng thấy nó.

Sử dụng C-u C-x =trong một khối như vậy tôi có thể thấy nó thực sự có khuôn mặt org-block-backgroundbây giờ, hơn là org-block. Tùy chỉnh khuôn mặt đó để kế thừa từ fixed-pitchcác tác phẩm cho tôi.

Đã thử nghiệm như sau:

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

Nếu bạn muốn giữ bất kỳ quyền thừa kế hiện có nào trên khuôn mặt đó, bạn có thể thực hiện các thao tác sau (được điều chỉnh từ bản gốc tại đây: /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)))

Tôi đã sử dụng phương pháp này trước khi vấn đề này xảy ra. Hóa ra org-block-backgroundkhuôn mặt đã bị xóa trong phiên bản org 8.3.1, do đó có thể là lỗi. stackoverflow.com/questions/26290924/... lists.gnu.org/archive/html/emacs-orgmode/2015-08/msg00523.html
xji

+1 cho Cu Cx = Tôi chưa bao giờ biết rằng nó tồn tại và đã tìm kiếm một cái gì đó như thế này trong một thời gian.
Julien Chastang
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.