मैं फॉन्ट-लॉक-डिफॉल्ट्स के साथ एक कस्टम चेहरा कैसे निर्दिष्ट करूं?


11

यदि मैं मौजूदा चेहरों का उपयोग करके फ़ॉन्ट लॉक कीवर्ड परिभाषित करता हूं, तो मैं स्ट्रिंग 'फू' को उजागर कर सकता हूं।

(defconst my-mode-font-lock-keywords
  (list
   (cons "foo" 'font-lock-type-face)))

(define-derived-mode my-mode fundamental-mode "My mode"
  "A demo mode."
  (set (make-local-variable 'font-lock-defaults) '(my-mode-font-lock-keywords)))

यह सही ढंग से हाइलाइट करता है:

फू सही ढंग से प्रकाश डाला

हालांकि, अगर मैं अपने चेहरे को परिभाषित करता हूं:

(defface my-mode-foo-face
  '((t :inherit font-lock-preprocessor-face))
  "Face for highlighting 'foo'.")

(defconst my-mode-font-lock-keywords
  (list
   (cons "foo" 'my-mode-foo-face)))

(define-derived-mode my-mode fundamental-mode "My mode"
  "A demo mode."
  (set (make-local-variable 'font-lock-defaults) '(my-mode-font-lock-keywords)))

कोई हाइलाइटिंग लागू नहीं है:

कोई हाइलाइटिंग नहीं

font-lock-defaultsमैं अपने आप को परिभाषित किए गए चेहरे के साथ कैसे उपयोग कर सकता हूं?

जवाबों:


8

C-hvमूल्य पर एक नज़र डालें font-lock-type-faceमूल्य केवल प्रतीक है font-lock-type-face। अब के C-hvमूल्य को देखो my-mode-foo-face। अरे नहीं! आप नहीं कर सकते! यह एक चर नहीं है!

आपको अपने चेहरे तक पहुंचने के लिए एक चर की आवश्यकता है। घोषणा foo-faceचेहरे की घोषणा नहीं करता foo-faceचर।

(defvar my-mode-foo-face 'my-mode-foo-face)चेहरे की परिभाषा के बाद जोड़ें और फिर फ़ॉन्ट-लॉक चेहरे my-mode-foo-faceका उपयोग करने के लिए अपने संस्करण का उपयोग कर सकते हैं my-mode-foo-face। भ्रामक मुझे पता है।


संपादित करें: फ़ॉन्ट-लॉक के आधार पर एक बेहतर समाधान प्रतीत होता है।

;; Originally these variable values were face names such as `bold' etc.
;; Now we create our own faces, but we keep these variables for compatibility
;; and they give users another mechanism for changing face appearance.
;; We now allow a FACENAME in `font-lock-keywords' to be any expression that
;; returns a face.  So the easiest thing is to continue using these variables,
;; rather than sometimes evalling FACENAME and sometimes not.  sm.

;; Note that in new code, in the vast majority of cases there is no
;; need to create variables that specify face names.  Simply using
;; faces directly is enough.  Font-lock is not a template to be
;; followed in this area.

हो सकता है कि कीवर्ड में चेहरे के दोहरे उद्धरण का विलफ्रेड समाधान हो।


3
अहा, तो यह एक चर की उम्मीद है। (cons "foo" ''my-mode-foo-face))यह भी काम करता है, लेकिन मुझे यकीन नहीं है कि मुहावरेदार है।
विल्फ्रेड ह्यूजेस

1
हम्म, मेरा जवाब इस समस्या पर आधारित समाधान के लिए प्रतीत होता है जो मैं पढ़ रहा हूं, उसके आधार परfont-lock.el
जॉर्डन बियोनडो

3
यह वास्तव में एक अभिव्यक्ति की उम्मीद कर रहा है, जिसका वह मूल्यांकन करेगा। इसलिए आप वहां कुछ तर्क भी रख सकते हैं।
दिमित्री
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.