Emacs - 特定的Linum定制

时间:2013-08-31 22:46:10

标签: emacs customization whitespace line-numbers

我正在尝试使用this EmacsWiki page on Line Numbers(标题为 Linum:从文字中分隔行号)中的部分向Emacs linum.el应用一些相当具体的自定义项引导。

我将编辑实施为 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:行号[部分 - Linum:从文本中分隔行号]

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

4 个答案:

答案 0 :(得分:15)

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

答案 1 :(得分:4)

这样的事情可以为您提供有关您自己的自定义类型的任何想法吗?您可能更感兴趣的是设置条纹宽度,而不是改变行号右侧的空格。

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

答案 2 :(得分:1)

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

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

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

答案 3 :(得分:0)

也许更简单的解决方案就是修复linum脸部属性的大小,例如:

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