Masalah
Masalahnya di sini adalah bahwa tidak ada wajah untuk mengontrol penampilan margin. Anda dapat menampilkan teks dalam margin menggunakan overlay (seperti itulah linum-mode
caranya) tetapi, seperti teks apa pun di Emacs, itu dibatasi hingga batas buffer. Jadi Anda tidak dapat memiliki kontrol atas tampilan margin di luar baris terakhir buffer.
Apa yang dapat Anda lakukan, adalah memperbaiki garis-garis yang salah di antara keduanya.
Apa yang harus diletakkan di sana
Variabel ini mengontrol apa yang ingin Anda tampilkan pada garis-garis visual "antara" dua garis logis. Bagian yang penting adalah 'face 'linum
, yang memastikan garis-garis ini akan mengikuti penampilan linum-mode
. Bagian "-----"
ini demonstratif, Anda dapat mengubahnya menjadi spasi atau apa pun yang Anda inginkan.
(defvar endless/margin-display
`((margin left-margin) ,(propertize "-----" 'face 'linum))
"String used on the margin.")
Bagaimana cara melakukannya
Kode berikut melewati buffer dan menempatkan overlay (mirip dengan yang linum-mode
digunakan) pada setiap baris yang tidak "nyata".
(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)))
Dan kami ingin menjalankannya setiap kali linum-mode
memperbarui nomor baris.
(add-hook 'linum-before-numbering-hook #'endless/setup-margin-overlays)