配置Linum模式不在空白模式下显示空白符号?

时间:2013-10-23 11:19:36

标签: emacs elisp

目前我的启用了linum模式和空白模式的缓冲区如下所示:

enter image description here

如何配置linum区域不呈现空白符号?

2 个答案:

答案 0 :(得分:3)

观察:行号右侧不需要空格(如问题所示),因为条纹宽度可用于控制行号和正文之间的分隔。

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

选项#1:但是, flush-right。

(setq linum-format "%d")

选项#2:使用前导零 - flush-right。

(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)
                      'face 'linum-leading-zero)
          (propertize (number-to-string line) 'face 'linum))))
     (setq linum-format 'linum-format-func)))

答案 1 :(得分:3)

你可以改进@lawlists第二个解决方案,但是你可以使用一些奇异的空格,而不是使用0作为空间替换,这可以是"\u2002"。由于我们没有使用看起来像空格的比例字体,但whitespace不会弄乱它。

我实际上正在使用linum-relative-mode,您可以方便地提出建议linum-relative

(advice-add 'linum-relative :filter-return
          (lambda (num)
            (if (not (get-text-property 0 'invisible num))
                (propertize (replace-regexp-in-string " " "\u2002" num)
                            'face (get-text-property 0 'face num)))))