Vấn đề
Vấn đề ở đây là không có mặt để kiểm soát sự xuất hiện của lề. Bạn có thể hiển thị văn bản trong lề bằng cách sử dụng lớp phủ (đó là những gì linum-mode
) nhưng, giống như bất kỳ văn bản nào trong Emacs, nó bị giới hạn bởi các giới hạn của bộ đệm. Vì vậy, bạn không thể có bất kỳ quyền kiểm soát nào đối với màn hình lề ngoài dòng cuối cùng của bộ đệm.
Những gì bạn có thể làm, là sửa những dòng bị lỗi ở giữa.
Đặt gì ở đó
Biến này điều khiển những gì bạn muốn hiển thị trên các dòng hình ảnh đó giữa hai dòng logic. Phần quan trọng là 'face 'linum
, đảm bảo các dòng này sẽ theo sự xuất hiện của linum-mode
. Phần "-----"
này là minh họa, bạn có thể thay đổi nó thành không gian hoặc bất cứ điều gì bạn muốn.
(defvar endless/margin-display
`((margin left-margin) ,(propertize "-----" 'face 'linum))
"String used on the margin.")
Làm thế nào để làm nó
Đoạn mã sau đi qua bộ đệm và đặt các lớp phủ (tương tự như các mã được linum-mode
sử dụng) trên mỗi dòng không phải là Real real.
(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)))
Và chúng tôi muốn nó chạy bất cứ khi nào linum-mode
cập nhật số dòng.
(add-hook 'linum-before-numbering-hook #'endless/setup-margin-overlays)