特定于Emacs的Linum定制

特定于Emacs的Linum定制,emacs,customization,whitespace,line-numbers,Emacs,Customization,Whitespace,Line Numbers,我正在尝试对Emacs的linum.el应用一些非常具体的定制,使用中的部分(标题为linum:从文本中分离行号)作为指导 我实现了对linum.el的编辑,它在行号的右侧添加了一个空格。我现在想弄清楚的是如何在行号的左边添加一个额外的空格,这样行号看起来就像这样: | 1 |#include <stdio.h> (Vertical bars for visualization) | 2 |int main() 我试图实现前者(左边的空格),只是盲目地修改EmacsWiki中提供

我正在尝试对Emacs的
linum.el
应用一些非常具体的定制,使用中的部分(标题为linum:从文本中分离行号)作为指导

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

| 1 |#include <stdio.h>  (Vertical bars for visualization)
| 2 |int main()
我试图实现前者(左边的空格),只是盲目地修改EmacsWiki中提供正确空格的行,但没有成功。不幸的是,由于我对Emacs和Elisp有些陌生,我的技能还不足以让我自己轻松发现需要改变的地方


链接:

EmacsWiki:行号[第节-Linum:从文本中分离行号]


这样的东西能让您对自己的定制类型有什么想法吗?您可能对设置条纹宽度更感兴趣,而不是更改行号右侧的空格

(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)))

像这样的东西能让你对自己的定制方式有什么想法吗?您可能对设置条纹宽度更感兴趣,而不是更改行号右侧的空格

(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)))

如果你真的想像你说的那样,使用空格,而不是@lawlist建议的那样,在function
linum update window
中找到包含
(数字到字符串w)
的行,并将其更改为:

(number-to-string (+ w 1))
此编号是打印行号的框的宽度,右对齐。
原始的
w
是最后一个行号中的位数。

如果您确实想按照您所说的那样使用空格,而不是按照@lawlist的建议,请在函数
linum更新窗口中找到包含
(数字到字符串w)
的行,并将其更改为:

(number-to-string (+ w 1))
此编号是打印行号的框的宽度,右对齐。
原始的
w
是最后一行号中的位数。

我相信设置
(setq linum格式“%d”)
可以满足您的需要。如果您还需要左边的空格,请使用
%d”
作为格式。

我相信设置
(setq linum格式“%d”)
可以满足您的需要。如果您还希望在左侧留有空格,请使用
%d”
作为格式。

也许一个更简单的解决方案就是通过如下方式固定
linum
face属性的大小:

(set-face-attribute 'linum nil :height 140)
您可能需要在实际使用
linum模式后将其连接起来:

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

(add-hook 'linum-mode-hook 'fix-linum-size)

也许一个更简单的解决方案就是通过如下方式固定
linum
face属性的大小:

(set-face-attribute 'linum nil :height 140)
您可能需要在实际使用
linum模式后将其连接起来:

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

(add-hook 'linum-mode-hook 'fix-linum-size)

我现在有一个空间在左边!我可能会想办法把整件事作为背景,但你回答了我的主要问题。谢谢我在
(concat“%”(数字到字符串(+w1))“d”)
中的“d”之后添加了一个空格,与您提到的行相同,它在右边添加了一个空格,该空格包含在bg颜色中!现在都解决了!再次感谢好吧,是的,我没有说什么,因为它已经在EmacsWiki上得到了回答(尽管与您找到的方式不同)。使用此格式字符串,您可以使用行号执行各种操作。将
d
更改为
x
,您将得到十六进制的值!我现在有一个空间在左边!我可能会想办法把整件事作为背景,但你回答了我的主要问题。谢谢我在
(concat“%”(数字到字符串(+w1))“d”)
中的“d”之后添加了一个空格,与您提到的行相同,它在右边添加了一个空格,该空格包含在bg颜色中!现在都解决了!再次感谢好吧,是的,我没有说什么,因为它已经在EmacsWiki上得到了回答(尽管与您找到的方式不同)。使用此格式字符串,您可以使用行号执行各种操作。将
d
更改为
x
,您将得到十六进制的值!“条纹宽度”到底是什么意思?行号的空间?行号右侧有一条垂直线,可以改变颜色和厚度,称为条纹。前三行代码控制着这种行为——除了右边的条纹,当然是屏幕的右边。你说的“条纹宽度”到底是什么意思?行号的空间?行号右侧有一条垂直线,可以改变颜色和厚度,称为条纹。前3行代码控制着这种行为——除了右边的条纹,当然是屏幕的右边。是的,完全没有必要编辑linum库。当我不使用linum面的背景时,这看起来很有效,比编辑linum.el文件容易得多。当我使用背景时,它在一位数和两位数之间是不均匀的。@mellowmaroon:我真的不知道。Emacs将使用显示最高行号所需的任何列。有1-9行的文件:1列,10-99行:2列。等等。如果希望至少有固定数量的列,可以使用
“%4d”
。我通常使用
“%3d”
,因为我认为大于等于1k行的文件应该进行重构。是的,完全没有必要编辑linum库。当我不使用linum面的背景时,这看起来很有效,并且比编辑linum.el文件容易得多。当我使用背景时,它在一位数和两位数之间是不均匀的。@mellowmaroon:我真的不知道。Emacs将使用显示最高行号所需的任何列。有1-9行的文件:1列,10-99行:2列。等等。如果你想至少有一个固定的麻木