Я пытаюсь определить некоторые грани шрифтов emacs, чтобы сделать некоторые пользовательские выделения. Это похоже на работу, когда я определяю их по отдельности:Как определить несколько граней emacs?
(defface my-r-face `((t (:foreground "red"))) "Red highlight")
(defvar m-r-face 'my-r-face "Red.")
(defface my-g-face `((t (:foreground "green"))) "Green highlight")
(defvar m-g-face 'my-g-face "Green.")
(defface my-b-face `((t (:foreground "#0088ff"))) "Blue highlight")
(defvar m-b-face 'my-b-face "Blue.")
....etc
Однако у меня есть несколько десятков из них, и я хочу, чтобы определить их все на одном дыхании от какого-то цвета в таблице:
(setq ctable '(("red" "r")
("orange" "o")
("yellow" "y")
("#88ff00" "gy")
("green" "g")
("#00ff88" "gc")
("cyan" "c")
("#0088ff" "bc")
("blue" "b")
("purple" "bm")
("magenta" "m")
("#ff0088" "rm")
("grey" "lg")
("white" "w")))
Мои сложность заключается в сборке имен символов для каждой грани, то есть объединения «my-» и «-face» по обе стороны от записи из таблицы. Я обнаружил (стажер), который может создать новый символ из строки, однако этот символ тогда неприемлем (defface), так как кажется, что я делаю, эквивалентно (defface 'my-r-face ..., и defface не нравится цитируемый символ, и ожидает (defface мой-R-лицо .. вместо Моя попытка выглядит следующим образом:.
(dolist (tpl ctable)
(defvar (intern (concat "my-" (nth 1 tpl) "-face"))
(quote (intern (concat "my-" (nth 1 tpl) "-face"))) "colour")
(defface (intern (concat "my-" (nth 1 tpl) "-face"))
`((t (:foreground ,(car tpl)))) "Highlight" :group 'fortran)
)
Запуск этот результат в
Lisp error: (wrong-type-argument symbolp (intern (concat "fegs-" (nth 1 tpl) "-face")))
(defvar (intern (concat "fegs-" ... "-face")) (quote (intern ...)) "colour")
Может кто-нибудь пролить какой-то свет на то, что я делаю неправильно, или если я полностью лаю по неправильному дереву, и есть лучший способ сделать это?
Спасибо.
Не делать "DefVar" вещь, пожалуйста: вам нужно только "defface". По разным причинам это было сделано для оригинальных лиц, используемых шрифтовым замком, и с тех пор все скопировали эту ошибку. – Stefan
Если я удаляю defvar (или его изменение в моем коде ниже), то ни одна из подсветки не работает должным образом. Это связано с механизмом, используемым в остальной части режима? Это происходит путем добавления лиц и некоторых ключевых слов ключевого слова в список, который затем используется в кишках блокировки шрифтов, и без defvar это перестает работать. – RFairey
Это потому, что ваши правила блокировки шрифтов неверны: им, вероятно, нужно сказать '' my-r-face' вместо 'my-r-face'. – Stefan