font-lock-add-keywords çalışmıyor
Bu yüzden font-lock-add-keywords
ve regex kullanarak rakamlar için özel sözdizimi vurgulama eklemeye çalışıyorum .
Bunu yapmak için tüm Emacs kaynaklarına bakıyordum ve bir yüzü başarılı bir şekilde tanımlayabilsem de, font-lock-add-keywords
görünürde herhangi bir nedenden ötürü çalışmıyor.
Hatta farklı kaynaklardan örnekleri kopyaladım ve görünürde hiçbir başarı olmadan onları doğrudan çalıştırmaya çalıştım. Kodumda neyin yanlış olduğunu anlayamıyorum. Herhangi bir hata almıyorum, ancak font-lock-add-keywords
(ile C-x C-e
) 'yi değerlendirmeye çalıştığımda nil
, *Messages*
arabelleğe yazdırıyor .
Güncelleme
Gilles'in tavsiyesini aldım ve küçük bir mod yarattım, font-lock-add-keywords
bu özel küçük moda ayarladım ve yüz için bir alıntı kullandım. Mod satırında küçük modu görebiliyor ve çalıştığını bilsem de, font-lock-add-keywords
hala çalışmıyor gibi görünüyor. İşte güncellenmiş kodum:
(defgroup gio-group nil
"Group for customization"
:prefix "gio-")
(defface gio-highlight-numbers-face
'((t :inherit (default)
:foreground "#ffff00"))
"Face for numbers"
:group 'gio-group )
(define-minor-mode gio-minor-mode
"Minor mode for customizaion"
:init-value t
:lighter " GioMode"
:global t
:group 'gio-group)
(font-lock-add-keywords 'gio-minor-mode '(("[0-9]+" . 'gio-highlight-numbers-face)))
Windows 10'da GNU Emacs 26.3 (yapı 1, x86_64-w64-mingw32) çalıştırıyorum. Herhangi bir yardım çok takdir ediliyor! Teşekkür ederim!
Yanıtlar
Daha fazla araştırma ve Gilles ve Lindydancer'den gelen yorumların yardımıyla, küçük modlara Font Lock anahtar sözcükleri ekleyemeyeceğinizi keşfettim. Bunun yerine, küçük mod yüklendiğinde ve kaldırıldığında anahtar kelimeleri ana moda eklemeniz ve kaldırmanız gerekir.
Küçük bir mod kullanarak anahtar kelimeleri vurgulayan çalışma kodu:
(defgroup gio-group nil
"Group for customization"
:prefix "gio-")
(defface gio-highlight-numbers-face
'((t :inherit (default)
:foreground "#ffff00"))
"Face for numbers"
:group 'gio-group )
(defvar gio-keywords '(("\\(\\b\\|[-]\\)\\([-]?\\([0-9]+\\)\\(\\.?[0-9]\\)*\\)\\b" . 'gio-highlight-numbers-face)) ;; Integers & Decimals
"Keywords for gio-minor-mode highlighting")
(define-minor-mode gio-minor-mode
"Minor mode for customization"
:init-value 1
:lighter " GioMode"
:group 'gio-group
(when (bound-and-true-p gio-minor-mode)
(font-lock-add-keywords nil gio-keywords)
(font-lock-fontify-buffer))
(when (not (bound-and-true-p gio-minor-mode))
(font-lock-remove-keywords nil gio-keywords)
(font-lock-fontify-buffer)))
(define-globalized-minor-mode gio-global-minor-mode gio-minor-mode gio-minor-mode :group 'gio-group)
(gio-global-minor-mode 1)
font-lock-add-keywordsLisp modu veya C modu veya HTML modu gibi belirli bir ana mod için anahtar sözcükler ekler . Yana font-lock-mode
önemli bir mod değil (font-lock-add-keywords 'font-lock-mode …)
asla herhangi bir etkisi yoktur.
Her ana modda geçerli olan yazı tipi kilidi anahtar kelimelerini gerçekten istiyorsanız, küçük bir mod tanımlamanız gerekir. İşte böyle Boşluk modu çalışır. Çoğu Beyaz Boşluk modu ihtiyacınız olandan daha karmaşıktır. Beyaz boşluk moduna bir "rakam vurgulama" ayarı ekleyebilirsiniz, ancak kendi modunuzu tanımlamak daha kolay olabilir. Kolaylık işlevi define-minor-modeyardımcı olur, ancak mod açıldığında veya kapatıldığında (font-lock-add-keywords nil …)
ve öğesini arayarak anahtar kelimeleri manuel olarak eklemeniz ve kaldırmanız gerekir (font-lock-remove-keywords nil …)
. Bkz Can Ben küçük bir modda vurgulayarak eklemek? talimatlar için.
Ek olarak, yüzlerin nasıl çalıştığına dair bir bilgi var: yüz adı, değişken olmayan bir semboldür. (MATCHER . FACESPEC)
Formu font-lock-keywordsgerektirir FACESPEC
değeri bir yüz belirten bir ifade olarak. custom-faces-highlight-numbers-face
çalışmaz çünkü sembol custom-faces-highlight-numbers-face
bağlı olmadığı için geçerli bir ifade değildir. Bunun iki çözümü var. Geleneksel çözüm, yüz ile aynı adı taşıyan bir değişkeni tanımlamaktır; Font Kilidi modunun tanımladığı yüzler için böyle çalışır, ancak
Yeni kodda, çoğu durumda yüz adlarını belirten değişkenler oluşturmaya gerek olmadığını unutmayın. Doğrudan yüzleri kullanmak yeterlidir. Yazı tipi kilidi bu alanda izlenecek bir şablon değildir.
Önerilen ancak zahmetli çözüm, sembolü alıntı yapmaktır.
(font-lock-add-keywords 'gyo-highlight-numbers-mode '(("[0-9]+" . 'custom-faces-highlight-numbers-face)))