是否可以在Emacs缓冲区右边显示相关行号,并在左边界保留正常行号?
发布于 2018-05-07 16:17:06
加载定义并执行M-x linum-mode
。
(defun linum-relative-right-set-margin ()
"Make width of right margin the same as left margin"
(let* ((win (get-buffer-window))
(width (car (window-margins win))))
(set-window-margins win width width)))
(defadvice linum-update-current (after linum-left-right-update activate)
"Advice to run right margin update"
(linum-relative-right-set-margin)
(linum-relative-right-update (line-number-at-pos)))
(defadvice linum-delete-overlays (after linum-relative-right-delete activate)
"Set margins width to 0"
(set-window-margins (get-buffer-window) 0 0))
(defun linum-relative-right-update (line)
"Put relative numbers to the right margin"
(dolist (ov (overlays-in (window-start) (window-end)))
(let ((str (overlay-get ov 'linum-str)))
(if str
(let ((nstr (number-to-string
(abs (- (string-to-number str) line)))))
;; copy string properties
(set-text-properties 0 (length nstr) (text-properties-at 0 str) nstr)
(overlay-put ov 'after-string
(propertize " " 'display `((margin right-margin) ,nstr))))))))
看截图
https://stackoverflow.com/questions/-100003333
复制相似问题