Sorun
Buradaki sorun, kenar boşluklarının görünümünü kontrol edecek bir yüzün olmamasıdır. Bindirmeleri kullanarak kenar boşluğunda metin görüntüleyebilirsiniz (işte budur linum-mode
), ancak Emacs'daki herhangi bir metin gibi, arabellek sınırlarıyla sınırlıdır. Dolayısıyla, ara belleğin son satırının ötesinde kenar boşluğu ekranı üzerinde herhangi bir kontrole sahip olamazsınız.
Ne olabilir yapmak, aradaki bu hatalı satırları düzeltmektir.
Ne koymalı
Bu değişken, iki mantıksal çizgi arasında “görsel” olan bu satırlarda ne görüntülemek istediğinizi kontrol eder. Önemli olan 'face 'linum
, bu çizgilerin görünümünü takip etmesini sağlayan kısımdır linum-mode
. "-----"
Bölüm boşluk ya da her neyse istediğiniz değiştirebilirsiniz, demonstrasyon olduğunu.
(defvar endless/margin-display
`((margin left-margin) ,(propertize "-----" 'face 'linum))
"String used on the margin.")
Nasıl yapılır
Aşağıdaki kod tampondan geçer ve linum-mode
her satıra “gerçek” olmayan bindirmeler (kullanımlara benzer ) yerleştirir.
(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)))
Ve linum-mode
satır numaralarını her güncellediğinde çalışmasını istiyoruz .
(add-hook 'linum-before-numbering-hook #'endless/setup-margin-overlays)