Как я могу установить цвет только для одного linum в Emacs? - PullRequest
0 голосов
/ 24 мая 2018

Я знаю, что мы можем сделать (set-face-foreground 'linum "your-favorite-color"), но как, если я просто хочу установить лицо для одного номера строки, но не для всего номера строки.Как я могу это сделать?

1 Ответ

0 голосов
/ 25 мая 2018

Переменная 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)))
...