Das Problem
Das Problem hierbei ist, dass es kein Gesicht gibt, mit dem das Erscheinungsbild der Ränder gesteuert werden kann. Sie können Text am Rand mithilfe von Überlagerungen anzeigen (genau das ist der linum-mode
Fall), aber wie jeder Text in Emacs ist er auf die Grenzen des Puffers beschränkt. Sie können also keine Kontrolle über die Randanzeige über die letzte Zeile des Puffers hinaus haben.
Was Sie können tun, ist es, diese fehlerhaften Linien in-zwischen beheben.
Was dort zu setzen
Diese Variable steuert, was auf diesen visuellen Linien „zwischen“ zwei logischen Linien angezeigt werden soll. Der wichtige Teil ist der 'face 'linum
, der sicherstellt, dass diese Linien dem Erscheinungsbild von folgen linum-mode
. Der "-----"
Teil ist demonstrativ, Sie können ihn in Leerzeichen oder was auch immer Sie möchten ändern.
(defvar endless/margin-display
`((margin left-margin) ,(propertize "-----" 'face 'linum))
"String used on the margin.")
Wie es geht
Der folgende Code durchläuft den Puffer und platziert Überlagerungen (ähnlich den linum-mode
verwendeten) in jeder Zeile, die nicht "echt" ist.
(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)))
Und wir möchten, dass es immer dann ausgeführt wird, wenn linum-mode
die Zeilennummern aktualisiert werden.
(add-hook 'linum-before-numbering-hook #'endless/setup-margin-overlays)