मैं कस्टम पृष्ठभूमि रंग के साथ पूरी लाइन नंबर बार कैसे भर सकता हूं?


9

नीचे दिए गए स्क्रीनशॉट में मैंने बस linumचेहरे की पृष्ठभूमि को कुछ रंग में सेट किया है , हालांकि बफर के अंत में एक खाली क्षेत्र है और लाइन लपेटने ( global-visual-line-mode) सक्षम होने पर लाइनों के बीच अंतराल हैं :

लाइन रैप के साथ टूटी हुई लाइनम बैकग्राउंड।

आदर्श रूप से पूरे बाईं ओर एक समान रंग में होना चाहिए। क्या यह संभव है? मैं कुछ एलिस्प को जानता हूं, इसलिए यदि यह संभव है, तो मैं शायद कुछ निर्देशों के साथ खुद को ठीक कर सकता हूं।


विषयों पर स्विच करते समय मैंने इस पर ध्यान दिया है। मेरे लिए चारों ओर का काम डिफ़ॉल्ट विषय पर वापस जाना है और फिर विशिष्ट विषय को फिर से सक्षम करना है। यह आमतौर पर पृष्ठभूमि के रंगों को रीसेट करता है। यह देखने के लिए डिफ़ॉल्ट थीम सेटिंग्स पर एक नज़र रखना सार्थक हो सकता है कि क्या यह विशिष्ट चेहरों के साथ अधिक मेहनती है जो इसे ठीक करने के लिए फ़ंक्शन लिखने के लिए एक सुराग दे सकते हैं।
एलारसन

रंग को ठीक करना "बीच-बीच में" व्यवहार्य हो सकता है (मैं इसे आज़माऊँगा)। बफर अंत के बाद रंग को ठीक करना, अफसोस की बात है, न कि --- वहाँ कुछ भी नहीं है रंगीन होने के लिए।
मालाबार

वास्तव में, मैंने देखा है कि यह इतनी बार पूछा गया है कि यह संभवतः एक सार्थक सुविधा अनुरोध है।
मालाबार

@ मलबारबा बफर के नीचे के क्षेत्र में इसका विस्तार क्यों संभव नहीं है? फ्रिंज यह सब के बाद भी करता है।
लेनार होयट

1
@ mcb मैं थोड़ा बेहतर समझती हूं कि अब आपका क्या मतलब है। फ्रिंज का अपना चेहरा है (जिसकी पृष्ठभूमि स्क्रीन के नीचे तक विस्तारित है), मार्जिन नहीं करता है (यह सिर्फ डिफ़ॉल्ट चेहरे को उधार लेता है)।
मालाबार

जवाबों:


6

समस्या

यहाँ समस्या यह है कि हाशिये की उपस्थिति को नियंत्रित करने के लिए कोई चेहरा नहीं है। आप ओवरलैस का उपयोग करके मार्जिन में पाठ प्रदर्शित कर सकते हैं (यह वही linum-modeकरता है) लेकिन, Emacs में किसी भी पाठ की तरह, यह बफर की सीमाओं के लिए विवश है। इसलिए आप बफर की अंतिम पंक्ति से परे मार्जिन डिस्प्ले पर कोई नियंत्रण नहीं रख सकते।

आप क्या कर सकते हैं, उन दोषपूर्ण लाइनों को बीच में ठीक कर रहे हैं।

वहां क्या रखा जाए

यह चर उन नियंत्रण रेखाओं को नियंत्रित करता है जिन्हें आप "तार्किक" दो तार्किक रेखाओं के बीच प्रदर्शित करना चाहते हैं। महत्वपूर्ण हिस्सा है 'face 'linum, जो यह सुनिश्चित करता है कि ये रेखाएँ किसके स्वरूप का अनुसरण करेंगी linum-mode"-----"भाग प्रदर्शन-परक है, तो आप रिक्त स्थान या जो भी आप चाहते हैं, उसे बदल सकते हैं।

(defvar endless/margin-display
  `((margin left-margin) ,(propertize "-----" 'face 'linum))
  "String used on the margin.")

यह कैसे करना है

निम्न कोड बफ़र के माध्यम से जाता है और linum-modeप्रत्येक लाइन पर ओवरले (जैसे उपयोग करता है) "वास्तविक" नहीं है।

(defvar-local endless/margin-overlays nil
  "List of overlays in current buffer.")

(defun endless/setup-margin-overlays ()
  "Put overlays on each line which is visually wrapped."
  (interactive)
  (let ((ww (- (window-width)
               (if (= 0 (or (cdr fringe-mode) 1)) 1 0)))
        ov)
    (mapc #'delete-overlay endless/margin-overlays)
    (save-excursion
      (goto-char (point-min))
      (while (null (eobp))
        ;; On each logical line
        (forward-line 1)
        (save-excursion
          (forward-char -1)
          ;; Check if it has multiple visual lines.
          (while (>= (current-column) ww)
            (endles/make-overlay-at (point))
            (forward-char (- ww))))))))

(defun endles/make-overlay-at (p)
  "Create a margin overlay at position P."
  (push (make-overlay p (1+ p)) endless/margin-overlays)
  (overlay-put
   (car endless/margin-overlays) 'before-string
   (propertize " "  'display endless/margin-display)))

और हम चाहते हैं कि जब भी linum-modeलाइन नंबरों को अपडेट किया जाए तो यह चले ।

(add-hook 'linum-before-numbering-hook #'endless/setup-margin-overlays)

मैंने अभी इसका परीक्षण किया है org-modeऔर यह स्क्रॉलिंग के दौरान कुछ अंतराल का परिचय देता है और यह बिना किसी स्पष्ट कारण के गैप को याद करता है। स्क्रीनशॉट।
लेनार होयट

@ एमसीबी हां, प्रदर्शन यहां एक मुद्दा है, लेकिन इसमें सुधार एक लंबा और जटिल मामला होगा। ऑर्ग-मोड समस्या के लिए, ऑर्ग ओवरले का भारी उपयोग करता है, इसलिए यह समझ में आता है कि संघर्ष होगा। मुझे इसे ठीक करने के किसी भी तरीके के बारे में पता नहीं है, लेकिन मैं इसे कुछ विचार दूंगा।
मालाबार 20

-1

आप इसे अपने विन्यास में रख सकते हैं:

(set-face-background 'fringe "#f4a460")

... स्पष्ट रूप से रंग कोड को आप जो चाहते हैं उसे बदलें।


2
इससे फ्रिंज रंग बदल जाएगा, फ्रिंज पर लाइन नंबर प्रदर्शित नहीं होते हैं। (इसे आज़माएँ और आपको अंतर
दिखेगा

1
यह प्रश्न में स्क्रीनशॉट पर भी दिखाई देता है: "लाइन नंबर कॉलम" बफर की तरह ही पृष्ठभूमि का रंग है, जबकि फ्रिंज लाइन नंबर कॉलम और बफर के बीच के ग्रे में थोड़ा क्षेत्र है।
टी। वेरॉन

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