Выделите вызовы функций, но не первые в списке в Emacs
В режиме emacs lisp я хочу выделить все вызовы функций одним цветом, а все символы в кавычках - другим цветом. Например, в (foo 1 2 'bar)
, foo должен быть выделен цветом 1, а 'bar должен быть выделен цветом 2.
Я смог сделать это с помощью приведенного ниже кода, однако он также выделяет первый символ в списке, когда список цитируется. Например, в '(nil a b c)
, nil не должен быть выделен как вызов функции, и все элементы в этом списке должны быть выделены как символы в кавычках (цвет 2).
(defface font-lock-func-face
'((nil (:foreground "#6fc2ef"))
(t (:bold t :italic t)))
"Font Lock mode face used for function calls."
:group 'font-lock-highlighting-faces)
(defface font-lock-quoted-face
'((nil (:foreground "#e1a3ee"))
(t (:bold t :italic t)))
"Font Lock mode face used for function calls."
:group 'font-lock-highlighting-faces)
(font-lock-add-keywords
'emacs-lisp-mode
'(("(\\s-*\\(\\_<\\(?:\\sw\\|\\s_\\)+\\)\\_>"
1 'font-lock-func-face)))
(font-lock-add-keywords
'emacs-lisp-mode
'(("'[-a-zA-Z_][-a-zA-Z0-9_]*\\>" 0 'font-lock-quoted-face)))
Там также изображение того, что я смотрю здесь: http://imgur.com/Iluku05
1 ответ
Первая часть ответа: пакет lisp-extra-font-lock выделяет, среди прочего, выражения в кавычках.
Это также подчеркивает:
- переменные в списках параметров функций и переменных, связанных
let
,pcase
и т.д. Он различает нормальные локальные переменные и глобальные переменные, определяемыеdefvar
используя разные цвета. - Выражения в кавычках (и отменяет выделение всех
,
- а также,@
подвыражения)
Вторая часть ответа:
Если вы используете lisp-extra-font-lock
В пакете ваше правило для подсвечивания функций работает так, как вы его опубликовали, если вы добавите его в качестве последнего правила после включения пакета. Таким образом, он не будет перезаписывать другие выделения:
(font-lock-add-keywords
'emacs-lisp-mode
'(("(\\s-*\\(\\_<\\(?:\\sw\\|\\s_\\)+\\)\\_>"
1 'font-lock-func-face))
'append) ;; <-- Add after all other rules