আমি কীভাবে ফন্ট-লক-ডিফল্ট সহ একটি কাস্টম ফেস নির্দিষ্ট করব?


11

যদি আমি বিদ্যমান মুখগুলি ব্যবহার করে ফন্ট লক কীওয়ার্ডগুলি সংজ্ঞায়িত করি তবে আমি 'foo' স্ট্রিংটি হাইলাইট করতে পারি।

(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অ্যাক্সেস করতে Var 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
এটি আসলে একটি অভিব্যক্তি প্রত্যাশা করে, যা এটি মূল্যায়ন করবে। সুতরাং আপনি সেখানে কিছু যুক্তি রাখতে পারেন।
দিমিত্রি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.