org-block-backgroundフォントが機能しない


9

バッファで使用variable-pitch-modeしていorgます。通常、Iセットorg-blockfixed-pitchとの間のコード#+BEGIN_SRC#+END_SRC適切にも、適切な構文の強調表示して、固定幅フォントとしてレンダリングされます。しかし、先週から、何らかの理由で、コードブロックフォントはまだ適切な構文強調表示を備えていましたが、顔はvariable-pitch-face通常の組織モードテキストと同じになりました。パッケージを定期的に更新していますが、更新がorg-mode原因で問題が発生したと思いますが、何が起こったのかわかりません。


更新:

これは実際にはorg-block-backgroundface に関連していることがわかりましたf8b42e8。これはcommitで組織バージョン8.3.1で削除されたため、バグです。まだ解決策があるかどうかわかりません。/programming/26290924/fontify-r-code-blocks-in-org-mode-8 https://lists.gnu.org/archive/html/emacs-orgmode/2015-08/msg00510 .html

現在、私の組織モードのバージョンを古いバージョンにロックしています。


アップデート2:

最新のorg-modeリリースであるバージョン9.0.0では、顔が時代遅れになりつつ、顔をsrc-blocks継承できるようです。したがって、フェイスを設定するだけで、すべてのコードに固定幅フォントを使用できるようになります。org-blockorg-block-backgroundorg-block



@rasmusパッチをありがとう。しかし、これは#BEGIN_EXAMPLEブロックで機能するよう#BEGIN_SRC language_nameですが、では機能しませんか?言語に独自の構文強調表示を設定すると、私の場合、フォントは可変ピッチに戻ります。
xji

マスターバージョンを使用する必要があります-最終的にはOrg-9になります。
rasmus

@rasmus念のために言っておきますが、このバージョンでは、との間の顔は以外の何か#BEGIN_SRC lang_nameである#END_SRC必要がありdefaultますよね?現在describe-face、ブロック内で実行すると、defaultが返されます。これは、orgmodeの通常のテキストと同じフォントです。間しばらく#BEGIN_EXAMPLEして#END_EXAMPLE、それだorg-blockとのために~text~、それはだorg-codeために、=text=それはだorg-verbatim、したがって、それらのテキストが正しく固定ピッチとして表示されます。
xji

@rasmusそれはまだなのでdefault顔beween #BEGIN_SRC lang_name#END_SRC、通常のコンテンツ可変ピッチを維持したまま固定ピッチに設定することは不可能と思われます。しかし、masterブランチを正しくインストールしたかどうかはわかりません。
xji

回答:


7

これは実際にはorg-block-background faceに関連していることがわかりましたf8b42e8。これは、組織バージョン8.3.1のcommit で削除されたため、バグです。理論的根拠は

  1. psエクスポートでバグが発生する
  2. それは非効率的です

多分将来的には代替手段があるでしょうが、まだありません。

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

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

現在、古い動作に戻す唯一の方法は、commitで導入された変更を手動で元に戻すことf8b42e8です。あなたはここでコミットを見ることができます:

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

それを掘り下げてくれてありがとう-私自身は問題を実際に見たことがなかったので、それは残念です。
Stuart Hickinbottom

@stuarthickinbottomええ、私の組織モードが8.3.1に更新されて初めて変更が行われたと思います
xji

2

いつ変更されたのかはわかりませんが、私も見ています。

このC-u C-x =ようなブロック内で使用すると、実際には顔org-block-backgroundではなく、実際に顔があることがわかりorg-blockます。fixed-pitch作品から受け継ぐためにその顔をカスタマイズしてくれます。

次のようにテストされます。

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

その面の既存の継承を保持したい場合は、以下を実行できます(ここの元から適応:https : //stackoverflow.com/questions/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)))

この問題が発生する前に、私はこの方法を使用してきました。org-block-background顔が組織バージョン8.3.1で削除されたことが判明したため、おそらくバグです。stackoverflow.com/questions/26290924/... lists.gnu.org/archive/html/emacs-orgmode/2015-08/msg00523.html
xji

Cu Cxの+1 =これが存在することを知らなかったため、しばらくの間、このようなものを探していました。
Julien Chastang 2015年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.