1

我正在尝试对 Emacs' 应用一些相当具体的自定义linum.el,使用此 EmacsWiki 页面中关于行号的部分(标题为Linum: Separating line numbers from text)作为指南。

我实现了对linum.el的编辑,在行号的右侧添加了一个空格。我现在想弄清楚的是如何在行号左侧添加一个额外的空格,以便行号看起来像这样:

| 1 |#include <stdio.h>  (Vertical bars for visualization)
| 2 |int main()

我试图完成的另一个自定义涉及在为行号着色背景时包含正确的空间。当我为linum面设置背景时,它不会为行号右侧的新空间着色。

为了说明,以下是当前linum背景的覆盖方式:

(current) |1| #!/bin/bash   -- vs. -->   |1 |#!/bin/bash (ideal)
          |2| echo "123"    --------->   |2 |echo "123"

我确实尝试通过盲目地修改 EmacsWiki 中给出正确空间的行来实现前者(左侧空格),但没有成功。不幸的是,由于我对 Emacs 和 Elisp 有点陌生,我的技能还没有达到我可以自己轻松发现需要更改的水平。


链接:

EmacsWiki:行号 [Section - Linum: Separating line numbers from text ]

http://www.emacswiki.org/emacs/LineNumbers

4

4 回答 4

15

我相信设置(setq linum-format "%d ")会做你想要的。如果您还想要左侧的空间,请使用" %d "格式。

于 2013-09-01T02:12:08.457 回答
3

这样的事情是否会给您关于您自己的定制类型的任何想法?您可能对设置边缘宽度更感兴趣,而不是更改行号右侧的空格。

(setq-default left-fringe-width  10)
(setq-default right-fringe-width  0)
(set-face-attribute 'fringe nil :background "white" :foreground "white")


;;    (setq linum-format "%d") ;; alternative solution to intermittent line numbers
(custom-set-faces '(linum ((t (:foreground "pink" :background "white" :box nil)))) ) 
(eval-after-load 'linum
  '(progn
     (defface linum-leading-zero
       `((t :inherit 'linum
            :foreground ,(face-attribute 'linum :background nil t)))
       "Face for displaying leading zeroes for line numbers in display margin."
       :group 'linum)
     (defun linum-format-func (line)
       (let ((w (length
                 (number-to-string (count-lines (point-min) (point-max))))))
         (concat
;;        (propertize (make-string (- w (length (number-to-string line))) ?0)
          (propertize (make-string (- w (length (number-to-string line))) ? ) ;; change leading zero to a soft space
                      'face 'linum-leading-zero)
          (propertize (number-to-string line) 'face 'linum))))
     (setq linum-format 'linum-format-func)))
于 2013-08-31T22:58:34.627 回答
0

如果你真的想像你说的那样使用空格,而不是像@lawlist 建议的那样,找到包含(number-to-string w)in function的行linum-update-window并将其更改为:

(number-to-string (+ w 1))

此数字是打印行号的框的宽度,右对齐。原来w是最后一行的位数。

于 2013-08-31T23:14:30.437 回答
0

也许一个更简单的解决方案就是修复linumface 属性的大小,例如:

(set-face-attribute 'linum nil :height 140)

实际使用后,您可能需要将其连接起来linum-mode

(defun fix-linum-size ()
  (interactive)  
  (set-face-attribute 'linum nil :height 140))

(add-hook 'linum-mode-hook 'fix-linum-size)
于 2014-05-25T17:26:18.313 回答