hl-line-mode hide background, इससे कैसे बचें?


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
एक और संभावना जिस पर आप विचार कर सकते हैं, वह है एचएल-लाइन कमांड लूप के टेल एंड पर रखा गया रिमूवल फंक्शन, जैसे कि एक खोज को वर्तमान लाइन की शुरुआत से वर्तमान लाइन के अंत तक (या अंत तक) किया जाता है। वर्तमान दृश्य रेखा, यदि लागू हो) और hl- लाइन उपरिशायी चेहरा तब अलग पृष्ठभूमि रंग के साथ अन्य पाठ जहाँ भी मौजूद है से हटाया जा सकता है। आप संभवतः फॉन्ट-लॉक द्वारा रखे गए हाइलाइटिंग की खोज कर रहे होंगे, हालाँकि आपके पास अन्य ओवरले के साथ रखा गया हाइलाइटिंग भी हो सकता है (जैसे, फ्लाईस्पेल एरर / डुप्लिकेट)।
कानूनसूची

@lawlist मैं इसके कार्यान्वयन में रुचि रखता हूं; क्या आप नीचे पूर्ण समाधान जोड़ सकते हैं?
कौशल मोदी

@kaushalmodi - मुझे पता है कि इस बिंदु पर विशिष्ट ओवरले या कच्चे पाठ के लिए यह कैसे करना है, लेकिन बिंदु पर विशिष्ट पाठ-गुण / फ़ॉन्ट-लॉक हाइलाइटिंग के लिए नहीं। क्योंकि मुझे इस प्रश्न का उत्तर देने के लिए उन बाद की दो घटनाओं का परीक्षण करने के लिए शोध करने की आवश्यकता होगी, मैंने इसके बजाय एक टिप्पणी करने का विकल्प चुना। यहाँ एक स्निपेट है [ड्रू के पुस्तकालयों में से एक से उधार लिया गया] बिंदु पर विशिष्ट ओवरले के लिए परीक्षण करने के लिए:(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))
१15

जवाबों:


5

समस्या यह है कि कभी-कभी faceहाइलाइटिंग के लिए पाठ गुण का उपयोग किया जाता है, और hl-line-modeएक ओवरले का उपयोग करता है। और ओवरले हमेशा "टेक्स्ट प्रॉपर्टी faceहाइलाइटिंग " के शीर्ष पर दिखाई देते हैं

diff-mode, उदाहरण के लिए, टेक्स्ट प्रॉपर्टी का उपयोग करता है, ओवरले का नहीं। तो इस तरह के मामलों के लिए आप भाग्य से बाहर हैं।

लेकिन के लिए है कि प्रकाश डाला एक उपरिशायी द्वारा निर्मित है तुम सिर्फ hl-लाइन ओवरले का ओवरले प्राथमिकता कम कर सकते हैं: या तो hl-line-overlayया global-hl-line-overlayतो यह है कि कि ओवरले "नीचे" अन्य ओवरले हाइलाइटिंग प्रतीत होता है।

यदि आप लाइब्रेरी का उपयोग करते हैं hl-line+.elतो आप hl-line-overlay-priorityओवरले प्राथमिकता निर्धारित करने के लिए विकल्प का उपयोग कर सकते हैं । Emacs Wiki पृष्ठ हाइलाइट करेंट लाइन भी देखें । (लेकिन फिर से, ओवरले प्राथमिकता को बदलने का कोई प्रभाव नहीं पड़ता है यदि अन्य हाइलाइटिंग एक ओवरले से नहीं है।)


उत्तर के लिए धन्यवाद। मैं चेहरे और ओवरले के बीच अंतर के बारे में परेशान नहीं करता हूं ... +1
गवेंको

मैं उस 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)भी प्रतिस्थापित करना , (कर्सर पर शुरू करना)।

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