হালকা এবং অন্ধকার ব্যাকগ্রাউন্ডের জন্য আমি কীভাবে পূর্বনির্ধারিত মুখটিকে ওভাররাইড করতে পারি?


9

set-face-attributeবর্তমান থিমের পটভূমি হালকা বা গা dark় কিনা তার উপর নির্ভর করে আমি অগ্রভাগের জন্য দুটি রঙের একটি বেছে নিতে ব্যবহার করতে চাই ।

প্রত্যাশিত আচরণটি হ'ল আমি হালকা ব্যাকগ্রাউন্ড থিম থেকে অন্ধকার ব্যাকগ্রাউন্ড থিম বা তদ্বিপরীত পরিবর্তন করা হলে অগ্রভাগ স্বয়ংক্রিয়ভাবে পরিবর্তন হয়।

এখানে একটি ব্যবহারের কেস:

আমি stripe-hl-lineনিম্নলিখিতটির মুখটি কাস্টমাইজ করেছি :

 (set-face-attribute 'stripe-hl-line nil
                        :overline   "gray"
                        :underline  "gray"
                        :foreground "dodger blue")

তবে আমি থিমটি হালকা বা অন্ধকারের ভিত্তিতে অগ্রভাগটি পরিবর্তন করতে চাই। এইভাবে প্রতিটি থিমের মুখটি কাস্টমাইজ করার বিষয়ে আমাকে চিন্তা করতে হবে না।


এটি থিম সংজ্ঞাতে সাধারণত কিছু করা হয়।
ওয়াশমাস

যদিও এটি জটিল হতে পারে তবে মনে হয় আপনি colorএখানে লাইব্রেরিটি ব্যবহার করতে পারেন । আপনি সম্ভবত পটভূমির মুখের আরজিবি বা হেক্স মান পেতে পারেন, "গা dark়" এর জন্য কিছু প্রান্তিক মান নির্ধারণ করতে পারেন এবং সেই অনুসারে অগ্রভাগ স্থাপন করতে পারেন।
ড্যান

হ্যাঁ তবে কিছু মুখের জন্য, আমি থিমের সাথে তাদের রঙ নির্দিষ্ট হওয়ার বিষয়ে চিন্তা করি না। আমি আমার প্রশ্নটি উদাহরণস্বরূপ মুখের সাথে আপডেট করেছি যা আমি কাস্টমাইজ করতে চাই।
দক্ষ মোদী

@ ডান ব্যাকগ্রাউন্ড হেক্স পুনর্নির্মাণের জন্য উপযুক্ত হুক কী হবে?
দক্ষ মোদী

এটিই যুক্তি যা আপনি `(ডেফেস চেঞ্জিং ফেস '(((পটভূমি অন্ধকার)): অগ্রভূমি" হোয়াইট ") (টি: ফোরগ্রাউন্ড" ব্ল্যাক ")): গ্রুপ' এক্স-মোড-ফেসস)) ব্যবহার করতে পারেন` ... যেহেতু আপনি যদি বিদ্যমান মুখ ব্যবহার করতে চান তবে আপনি বিদ্যমান ডিফেস ফর্মটিতে মাঝের 2 টি লাইন যুক্ত করতে পারেন।
মাধবন

উত্তর:


9

@ মাধবনকুমারকে ধন্যবাদ, আমি এর ভিত্তিতে একটি সমাধান অর্জনের দিকে মনোনিবেশ করেছি defface

আমি বুঝতে পেরেছি যে আমি কোনও বিদ্যমান ওভাররাইড করতে পারি না deffaceতবে আমি সর্বদা আমার নিজের পটভূমির রঙ সংবেদনশীল তৈরি করতে পারি defface। তারপরে একমাত্র প্রশ্ন ছিল কীভাবে আসলটির পরিবর্তে আমার কাস্টম ডিফেস ব্যবহার করবেন।

stripe-hl-lineসমাধানটি দিয়ে চলার জন্য আমি মুখকে ওভাররাইড করার একই উদাহরণ ব্যবহার করব । এই মুখটি প্যাকেজে সংজ্ঞায়িত করা হয়েছে stripe-buffer

পদক্ষেপ এখানে:

পদক্ষেপ 1. আপনার নিজের সংজ্ঞা দিন defface

(defface my/stripe-hl-line
  '((((background dark))  (:overline "gray" :underline "gray" :foreground "dodger blue"))
    (t                    (:overline "gray" :underline "gray" :foreground "red")))
  "Bold face for highlighting the current line in Hl-Line mode."
  :group 'stripe-buffer)

এর ফলে my/stripe-hl-lineমুখের অগ্রভাগের রঙ অন্ধকার ব্যাকগ্রাউন্ডের জন্য ডজ নীল এবং হালকা ব্যাকগ্রাউন্ডের জন্য লাল হয়ে উঠবে ।

পদক্ষেপ 2. মুখটি পুনরায় তৈরি করতে একটি ফাংশন তৈরি করুন

face-remap-add-relativeফাংশন একটি নতুন মুখ একটি বিদ্যমান মুখ remap করতে ব্যবহৃত হয়। এই ক্ষেত্রে, আমি stripe-hl-lineমুখের পুনর্নির্মাণ করছি my/stripe-hl-line

(defun my/stripe-hl-line-face-remap ()
  (face-remap-add-relative 'stripe-hl-line 'my/stripe-hl-line))

পদক্ষেপ 3. উপযুক্ত জায়গায় রিম্যাপিং করুন

stripe-bufferউত্স থেকে , আমি দেখতে পাচ্ছি যে hl-lineমুখটি পুনরায় তৈরি করা হয়েছে stripe-hl-line। সুতরাং আমাদের সেই রিম্যাপিংয়ের পরে আমাদের রিম্যাপিং করা দরকার (যা stripe-listify-bufferফাংশন সংজ্ঞায় রয়েছে)।

সুতরাং আমরা সংযুক্তি stripe-listify-bufferব্যবহার করে পরামর্শ দিয়ে আমাদের রিম্যাপিং করি ।:after advice

(advice-add 'stripe-listify-buffer :after #'my/stripe-hl-line-face-remap)

সম্পন্ন!

এটি বলেছিল, set-face-attributeপটভূমির অন্ধকারের উপর ভিত্তি করে সরাসরি মুখ সেট করার মতো কিছু ব্যবহার করা দুর্দান্ত ছিল ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.