特定于Emacs的Linum定制
我正在尝试对Emacs的特定于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中提供
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列。等等。如果你想至少有一个固定的麻木