Допустим, нужно подсветить слова foo и FOO как ключевые.
В соответствии с документацией на переменную font-lock-keywords
пишем в хуке для соответствующей моды:
(set (make-local-variable 'font-lock-keywords)
(append c++-font-lock-keywords
'(("\\<\\(foo\\|FOO\\)\\>" 0 font-lock-keyword-face t))))
Получаем требуемую подсветку, но внутри комментариев тоже!
То есть выбранный face перебивает font-lock-comment-face?
Может, надо сунуть в переменную более сложное выражение?
В общем, прошу помощи у знатных емаксеров, например у lg :-)
убери override, в этом случае подкрашеваться будет в случае если еще не
подкрашено, типа:
(set (make-local-variable 'font-lock-keywords)
(append c++-font-lock-keywords
'(("\\<\\(foo\\|FOO\\)\\>" 0 font-lock-keyword-face))))
в коментах не будет подсвечиваться если ты не укажешь override как я писал
у тебя регексп задан слижком обще ("\\<signal\\>"), поэтому подсветить кейворды которые он матчит без оверрайдинга практически невозможо (будут подсвечиваться только отдельно стоящиее кейворды) мы же сузили регексп таким образом, что он еще матчит полезные нам кейворды, но в тоже время может работать без оверрайда .. тем самым в коментах подсветки не будет
> в таком случае пользуй регексп типа: "signals[ \t\n]*:"
Так:
(set (make-local-variable 'font-lock-keywords)
(append c++-font-lock-keywords
'(("signals[ \t\n]*:" (0 font-lock-keyword-face)))))
Странно, это работает только если перед signals поставить
точку или слэш или что-нибудь такое. А в нормальном случае
не подсвечивается...
"[ \t\n]*signals[" \t\n]*:" не помогло.
На самом деле я этой фигней страдаю уже третью неделю, перерыл гугль, wiki, просмотрел кучу .el файлов... В переменной font-lock-keywords содержится очень сложное выражение, в котором мелькает c-skip-comments-and-strings. Может, эта функция имеет отношение к моей проблеме?
Вообще, font-locking в XEmacs - загадочная вешь. Стандартные-то ключевые слова подсвечиваются в любом контексте, даже в неправильном для них, и комментарии их успешно скрывают... Кстати, в FSF Emacs с этим дело выглядит лучше. Там более высокоуровневый интерфейс для добавления слов - функция font-lock-add-keywords, и работает сразу как надо.
да :) вынудил таки сесть и разобраться .. вобщем твой signal: нельзя
вообще подкрасить без оверайда, так как он уже матчиться по дефольту
кем-то, но глобальный оверайд тоже не каканает юзать, так как в
комментах и строках тоже будет подкрашиваться. Как ты правильно нашел
тут есть грамотная функция c-skip-comments-and-strings которую можно
пользовать ..
в итоге имеем:
(setq font-lock-keywords
(append font-lock-keywords
'(("signals[ \t\n]*:" (0 font-lock-keyword-face
t c-skip-comments-and-strings)))))
или типа того ..
да я согласен в GNU Emacs font lock keywording API более удобный ..
блян, разобрался называется ... ужас, этот font-lock-keywords для меня
филькина грамота теперь .. как это работает я не знаю (а раньше думал
что знал) .. убожество полное ..
попробуй вот это:
(setq font-lock-keywords
(append font-lock-keywords
(list (list (c-make-font-lock-search-function
"signals[ \t\n]*:" '(0 font-lock-keyword-face t))))))
у меня заработало ..