Правильно выровнять номера линий с linum-mode?

Я хотел бы, чтобы мои linum-mode нумерация выровнена по правому краю. Самое близкое, что я нашел, - это emacswiki, но это не работает-кажется,выравнивание по левому краю цифры вместо выровнять по правому краю его. фрагмент находится здесь. Извините за ужасный отступ, lisp довольно чужд мне:)

(setq linum-format                               
      (lambda (line)                                    
    (propertize                                  
     (format                                 
      (let                                   
      ((w (length (number-to-string (count-lines (point-min)         
                             (point-max))))))    
    (concat "%" (number-to-string w) "d ")) line) 'face 'linum)))

какие идеи?

3 ответов


настройка переменной linum-format, например для выравнивания справа на 7 символов:

(custom-set-variables '(linum-format (quote "%7d")))

вы можете просто использовать значение 'dynamic таким образом, вам не нужно выбирать произвольное количество заполнения:

(custom-set-variables '(linum-format 'dynamic))

или вы можете настроить его с: M-x customize-variable RET linum-format

кроме того, @asmeurer спросил, Как добавить пробел после числа с dynamic. Нет простого способа сделать это, но это можно сделать с помощью defadvice вокруг linum-update-window функция, которую я адаптировал из кода для dynamic это уже в этой функции:

(defadvice linum-update-window (around linum-dynamic activate)
  (let* ((w (length (number-to-string
                     (count-lines (point-min) (point-max)))))
         (linum-format (concat "%" (number-to-string w) "d ")))
    ad-do-it))

измените linum.el и byte-compile-file to .эюк.

для emacs 23.3

строка 143 linum.el

                  (concat "%" (number-to-string w) "d" " | ")))))

Я меняю форт по умолчанию на " xxx/".