ปัญหา
ปัญหาตรงนี้คือไม่มีหน้าตาที่จะควบคุมลักษณะที่ปรากฏของระยะขอบ คุณสามารถแสดงข้อความในระยะขอบโดยใช้การวางซ้อน (นั่นคือสิ่งที่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)