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


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.