Aşağıdaki daha çok bir yorum gibidir
- sorunun sadece küçük bir kısmına çözülür (
rainbow-delimiters-mode
)
- ayrıntılı olarak test edilmemiştir (sadece bir lateks dosyasıyla)
- Neden çalıştığını tam olarak anlamıyorum (
font-lock-mode
gerçekten oldukça karmaşık bir makinedir)
İlk başta aşağıdakiler için çözüm rainbow-delimiters-mode
:
Biz metin özelliğini değiştirmek font-lock-face
yoluyla face
içinde rainbow-delimiters-propertize-delimiter
ve rainbow-delimiters-unpropertize-delimiter
. Yana defsubst
yerine paketinde kullanılan defun
biz istihdam edemez defalias
(- lütfen yorumunu ben bu konuda yanıldığımı eğer anladığım kadarıyla) ama işlevleri kendileri değiştirmeniz gerekir.
Değiştirilen işlevler şunlardır:
(defsubst rainbow-delimiters-propertize-delimiter (loc depth)
"Highlight a single delimiter at LOC according to DEPTH.
LOC is the location of the character to add text properties to.
DEPTH is the nested depth at LOC, which determines the face to use.
Sets text properties:
`font-lock-face' to the appropriate delimiter face.
`rear-nonsticky' to prevent color from bleeding into subsequent characters typed by the user."
(with-silent-modifications
(let ((delim-face (if (<= depth 0)
'rainbow-delimiters-unmatched-face
(rainbow-delimiters-depth-face depth))))
;; (when (eq depth -1) (message "Unmatched delimiter at char %s." loc))
(add-text-properties loc (1+ loc)
;; 2015-05-24: Changed font-lock-face to face to enable rainbow after syntax fontification in latex-mode
;; (see http://emacs.stackexchange.com/questions/4260/how-to-get-rainbow-delimiters-rainbow-blocks-to-highlight-in-line-math-in-latex)
`(face ,delim-face
rear-nonsticky t)))))
(defsubst rainbow-delimiters-unpropertize-delimiter (loc)
"Remove text properties set by rainbow-delimiters mode from char at LOC."
(with-silent-modifications
(remove-text-properties loc (1+ loc)
;; 2015-05-24: See corresponding line in `rainbow-delimiters-propertize-delimiter'.
'(face nil
rear-nonsticky nil))))
Şimdi akıl yürütme:
$ -Delimiters arasındaki gömülü formüller, font-lock-mode (zaten Kirill'in işaret ettiği gibi) tarafından yazılan sözdizimidir. Bu yazı tipinin kaydı normal görünüyor (bkz. Değişken font-lock-syntactic-face-function
ve işlev font-latex-syntactic-face-function
). Ancak describe-char
gömülü formülün karakterlerinde sözdizimsel fontlaştırmanın face
-property yerine -property kullandığını gösterir font-lock-face
.
Aşağıdakiler varsayımsaldır, çünkü oldukça karmaşık olan yazı tipi kilit makinelerini tamamen anlamıyorum.
Görünüşe göre face
daha güçlü font-lock-face
. Sözdizimsel fontların font-lock-face
hakim olduğu gökkuşağı sınırlayıcıları kullanır face
. Bununla birlikte, sözdizimsel fontlaştırmanın arama (anahtar kelime) tabanlı fontlaştırmadan önce önce gelmesi avantajına sahibiz, bu da jit-lock kullanır (bilgi sayfalarına bakın font-lock-mode
).
Bu beni face
, rainbow-delimiters
yerine kullanırsak sorunun çözüldüğü sonucuna götürür font-lock-face
. Ve burada tam sonuçlarını bilmiyorum. Ancak, doğrudan rainbow-delimiters
da kullandığı jit-lock
(ve üzerinden değil font-lock-mode
) olduğu için, yine de titrek bir yerde duruyoruz.
Zaten ile temas kurduğumu unutmayın rainbow-delimiters
(bkz. Https://stackoverflow.com/questions/19800243/highlight-first-mismatching-paren/20022030#20022030 ) ama ile değil rainbow-blocks
. Çünkü konsantre olmayı seçtiğim sınırlı bir zaman dilimim var rainbow-delimiters
. Belki, rainbow-blocks
-problemi benzer şekilde çözebilirsiniz .