এইচএল-লাইন-মোড লুকানোর পটভূমি, কীভাবে এড়ানো যায়?


10

সঙ্গে:

(when window-system
  (set-face-background 'hl-line "light yellow")
  (global-hl-line-mode 1))

বর্তমান লাইনটি হলুদ ব্যাকগ্রাউন্ড দ্বারা হাইলাইট করা হয়েছে তবে পাঠ্যের ব্যাকগ্রাউন্ডের বৈশিষ্ট্য থাকলে এটিও ওভাররাইট করা হয় (যেমন ডিফ-মোড, রংধনু-মোড)।

কেবলমাত্র এমন অংশগুলির জন্য ব্যাকগ্রাউন্ড সেট করা সম্ভব যা যথাযথ সম্পত্তি নেই?

আপডেট আমি পরীক্ষা শুরু করি, মনে হয় যে স্টিপল ব্যাকগ্রাউন্ডের সাথে সাংঘর্ষিক নয়:

(set-face-stipple 'hl-line '(4 4 "\x01\x00\x00\x00"))
(set-face-attribute 'hl-line nil :inherit nil)

দুর্ভাগ্যক্রমে পাঠ্যের উপস্থিতি ক্ষতিগ্রস্থ করেছে ...


1
আপনি যে অন্য সম্ভাবনাটি বিবেচনা করতে চাইতে পারেন তা হ'ল প্রতিটি এইচএল-লাইন কমান্ড লুপের লেজ প্রান্তে রাখা অপসারণ ফাংশন, যেমন বর্তমান লাইনের শুরু থেকে বর্তমান লাইনের শেষে (বা এর শেষে) অনুসন্ধান করা হয় বর্তমান ভিজ্যুয়াল লাইন, যদি প্রযোজ্য হয়) এবং এইচএল-লাইন ওভারলে মুখটি তখনই যেখানেই আলাদা পটভূমির রঙের সাথে অন্য পাঠ্য উপস্থিত রয়েছে সেখান থেকে সরানো যেতে পারে। আপনি সম্ভবত ফন্ট-লক দ্বারা চিহ্নিত হাইলাইটের সন্ধান করবেন, যদিও আপনার অন্যান্য ওভারলেগুলি (যেমন, ফ্লাইস্পেলের ত্রুটি / নকল) এর সাথে হাইলাইট করা থাকতে পারে।
আইনজীবি

@ লিওলিস্ট আমি এর বাস্তবায়নে আগ্রহী; আপনি দয়া করে নীচের সম্পূর্ণ সমাধান যোগ করতে পারেন?
দক্ষ মোদী

@ কৌশালমোডি - আমি জানি নির্দিষ্ট বিন্যাসে কীভাবে নির্দিষ্ট ওভারলে বা কাঁচা পাঠ্যের জন্য এটি করা যায় তবে নির্দিষ্ট পাঠ্য-বৈশিষ্ট্য / ফন্ট-লকটি বিন্দুতে হাইলাইট করার জন্য নয়। এই প্রশ্নের যথাযথ উত্তর দেওয়ার জন্য আমার কীভাবে সেই দুটি পরবর্তী ঘটনাগুলির পরীক্ষা করতে হবে তা নিয়ে গবেষণা করার দরকার ছিল, আমি পরিবর্তে একটি মন্তব্য করা বেছে নিয়েছি। নির্দিষ্ট জায়গায় ওভারলে পরীক্ষা করার জন্য এখানে একটি স্নিপেট [ড্রু গ্রন্থাগারগুলির একটির কাছ থেকে নেওয়া] রয়েছে: (when (memq NAME-OF-FACE (mapcar (function (lambda (ovr) (overlay-get ovr 'face))) (overlays-at (point)))) (remove-overlays BEGINNING-POINT ENDING-POINT 'face hl-line))
আইনজীবি

উত্তর:


5

সমস্যাটি হ'ল কখনও কখনও পাঠ্য সম্পত্তি faceহাইলাইট করার জন্য ব্যবহৃত হয় এবং hl-line-modeএকটি ওভারলে ব্যবহার করে। এবং ওভারলেগুলি সর্বদা "শীর্ষে" পাঠ্যের সম্পত্তি faceহাইলাইট করা হয়

diff-modeউদাহরণস্বরূপ, পাঠ্য সম্পত্তি ব্যবহার করে, কোনও ওভারলে নয়। সুতরাং এই জাতীয় ক্ষেত্রে আপনার ভাগ্যের বাইরে।

তবে ওভারলে দ্বারা উত্পাদিত হাইলাইট করার জন্য আপনি কেবল এইচএল-লাইন ওভারলের ওভারলে অগ্রাধিকার হ্রাস করতে পারবেন: হয় hl-line-overlayবা global-hl-line-overlay, যাতে ওভারলে অন্য ওভারলে হাইলাইটিংয়ের "নীচে" বলে মনে হয়।

আপনি যদি গ্রন্থাগার ব্যবহার করেন hl-line+.elতবে আপনি hl-line-overlay-priorityওভারলে অগ্রাধিকার সেট করতে বিকল্পটি ব্যবহার করতে পারেন । ইমাকস উইকি পৃষ্ঠাটি বর্তমান লাইনটি হাইলাইট করুন । (তবে আবারও, ওভারলে অগ্রাধিকার পরিবর্তন করার কোনও প্রভাব নেই যদি অন্য হাইলাইটিং ওভারলে থেকে না আসে has)


উত্তরের জন্য ধন্যবাদ. আমি মুখ এবং ওভারলেগুলির মধ্যে পার্থক্য নিয়ে মাথা
ঘামাই না

আমি কীভাবে এই hl-line-overlayসম্পত্তিটি অ্যাক্সেস করব ? এটি উদাহরণস্বরূপ প্রদর্শিত হয় না customize-variable
9000

@ 9000: যেমন উত্তরটি বলেছে, আপনি যদি গ্রন্থাগার ব্যবহার করেন hl-line+.elতবে আপনি কেবল বিকল্পটি পছন্দমতো করুন hl-line-overlay-priority। অন্যথায়, আপনি (পূর্বনির্ধারিত ফাংশনগুলির নতুন সংজ্ঞা বা পরামর্শ ব্যতীত) পারবেন না। এটি এই ব্যবহারকারীর বিকল্পটি সরবরাহ করার বিষয়।
ড্র করুন

3

আমি আংশিক সমাধান দিয়ে শেষ করি - কেবল লাইনের শেষ থেকে হাইলাইট করুন:

(defun my-hl-line-range-function ()
  (cons (line-end-position) (line-beginning-position 2)))
(setq hl-line-range-function #'my-hl-line-range-function)

(when window-system
  (require 'hl-line)
  (set-face-attribute 'hl-line nil :inherit nil :background "light yellow")
  (setq global-hl-line-sticky-flag t)
  (global-hl-line-mode 1))

2

hl-lineওভাররাইডটিকে ব্যাকগ্রাউন্ড না করার চেষ্টা করার সময় এই প্রশ্নে হোঁচট খেয়েছে (যদিও এটি এই ক্ষেত্রে ইনডেন্টেশন গাইড ছিল):

আমি এটিতে স্থির হয়েছি, যা প্রবর্তনের পরে হাইলাইট লাইন আঁকতে শুরু করে:

(defun my-hl-line-range-function ()
  (cons
   (+ (line-beginning-position 1) (current-indentation))
   (line-beginning-position 2)))
(setq hl-line-range-function #'my-hl-line-range-function)

কাজের (+ (line-beginning-position 1) (current-indentation))সাথে প্রতিস্থাপন করাও (point)(কার্সার থেকে শুরু করে)।

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