Цвет объявленных переменных

11

Я ищу простой способ заставить emacs запомнить объявленную переменную в одной функции на C / C ++. Под «простым» я подразумеваю без какого-либо внешнего пакета, просто с некоторыми строками elisp в файлах конфигурации.

Моя конфигурация Emacs по умолчанию окрашивает имена переменных в объявление желтым цветом, но позволяет использовать их белым цветом.

char toto; // 'char' is green, 'toto' is yellow

toto = 42; // 'toto' is white

Я хотел бы, чтобы все "toto" одной и той же функции / области были также окрашены в желтый цвет.

Я уже посмотрел на этот вопрос, но я бы хотел что-то попроще. Я также пытался что-то сделать в режиме font-lock , но мне не удалось сделать что-то адаптируемое к именам переменных.

У меня уже есть идея для имен членов класса C ++ (с использованием шаблона имени), поэтому я просто хочу здесь соответствие локальной переменной.

Aracthor
источник
3
Это, вероятно, сложнее, чем кажется. nobugs.org/developer/parsingcpp
wasamasa
8
Почему вы не хотите использовать какие-либо пакеты? Если есть пакет, который предоставляет эту функцию, его установка почти наверняка потребует меньше усилий в вашей конфигурации, чем повторное создание этой функции с нуля.
Тайлер
11
Это звучит очень похоже на color-identifiers-modeпакет . (Публикуя это как комментарий, потому что вы сказали, что не хотите рассматривать внешние пакеты.)
Аарон Харрис
7
Каждый «внешний пакет» также может быть описан как «некоторые строки elisp в файлах конфигурации». Избегать ранее существующего кода на том основании, что кто-то предоставил его в виде пакета, абсурдно.
Фил
Какая версия Emacs у вас есть?
DA Винсент

Ответы:

1

Вы можете собрать регулярное выражение для переменной схемы, то , что соответствует (псевдо - код регулярное выражение) [char|other|types] [a-z];и [a-z] =*;добавить его в список ключевых слов шрифта блокировки для вашего режима; Из руководства на странице "Пользовательские ключевые слова" :

Например, следующий код добавляет два шаблона фонификации для режима C: один для обозначения слова «FIXME» даже в комментариях, а другой для обозначения слов «и», «или» и «не» в качестве ключевых слов.

 (font-lock-add-keywords 'c-mode
  '(("\\<\\(FIXME\\):" 1 font-lock-warning-face prepend)
    ("\\<\\(and\\|or\\|not\\)\\>" . font-lock-keyword-face)))

Этот пример влияет только на сам режим C. Чтобы добавить те же шаблоны в режим C и все производные от него режимы, сделайте следующее:

 (add-hook 'c-mode-hook
  (lambda ()
   (font-lock-add-keywords nil
    '(("\\<\\(FIXME\\):" 1 font-lock-warning-face prepend)
      ("\\<\\(and\\|or\\|not\\)\\>" .
       font-lock-keyword-face)))))
yPhil
источник