Переменная linum-format
может быть «функцией, которая вызывается с номером строки в качестве аргумента и должна преобразовываться в строку, отображаемую в этой строке».так что вы можете сделать это таким образом.
Вы захотите изучить код функции linum-update-window
, чтобы увидеть, как это используется.
Следующее не реализует ваше требование;это всего лишь пример того, как можно использовать эти механизмы.
Обратите также внимание на то, что Emacs 26.1 скоро будет выпущен, и он предоставляет совершенно новую (и значительно более эффективную) альтернативу linum
;поэтому, если вы планируете перейти на Emacs 26, вам, вероятно, не стоит тратить слишком много времени на linum
.
(defvar my-linum-format-string "%4d")
(add-hook 'linum-before-numbering-hook 'my-linum-get-format-string)
(defun my-linum-get-format-string ()
(let* ((width (length (number-to-string
(count-lines (point-min) (point-max)))))
(format (concat "%" (number-to-string width) "d")))
(setq my-linum-format-string format)))
(setq linum-format 'my-linum-format)
(defun my-linum-format (line-number)
(propertize (format my-linum-format-string line-number) 'face 'linum))
Я до сих пор не уверен, чего именно вы хотите достичь, но вы можетепроверьте номер строки в функции формата linum и измените форматирование, какое пожелаете ...
(defun my-linum-format (line-number)
(propertize (format my-linum-format-string line-number)
'face (if (eq line-number 42)
'linum-froody
'linum)))