समस्या
यहाँ समस्या यह है कि हाशिये की उपस्थिति को नियंत्रित करने के लिए कोई चेहरा नहीं है। आप ओवरलैस का उपयोग करके मार्जिन में पाठ प्रदर्शित कर सकते हैं (यह वही 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)