Zmienne zadeklarowane kolorem

11

Szukam prostego sposobu na zapamiętanie przez emacsa deklarowanej zmiennej w jednej funkcji w C / C ++. Przez „prosty” mam na myśli brak zewnętrznego pakietu, po prostu z kilkoma liniami elisp w plikach konfiguracyjnych.

Moja domyślna konfiguracja Emacsa koloruje nazwy zmiennych na żółto podczas deklaracji, ale niech będą białe po użyciu.

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

toto = 42; // 'toto' is white

Chciałbym również, aby każde „toto” tej samej funkcji / zakresu również miało kolor żółty.

Już zastanawiałem się nad tym pytaniem, ale chciałbym coś prostszego. Próbowałem też zrobić coś z trybem blokowania czcionek , ale nie udało mi się przystosować czegoś do nazw zmiennych.

Mam już pomysł na nazwy członków klasy C ++ (używając wzorca nazwy), więc chcę tylko dopasować zmienną lokalną tutaj.

Araktor
źródło
3
Jest to prawdopodobnie trudniejsze niż się wydaje. nobugs.org/developer/parsingcpp
wasamasa
8
Dlaczego nie chcesz używać żadnych pakietów? Jeśli istnieje pakiet, który zapewnia tę funkcję, jej instalacja prawie na pewno będzie wymagać mniejszej elisp w konfiguracji niż ponowne utworzenie funkcji od zera.
Tyler,
11
Brzmi bardzo podobnie do color-identifiers-modepakietu . (Publikując to jako komentarz, ponieważ powiedziałeś, że nie chcesz
Aaron Harris,
7
Każdy „pakiet zewnętrzny” można również opisać jako „niektóre wiersze elisp w plikach konfiguracyjnych”. Unikanie wcześniej istniejącego kodu na podstawie tego, że ktoś przekazał go w formie paczki, jest absurdalne.
phils
Jaką wersję Emacsa posiadasz?
DA Vincent

Odpowiedzi:

1

Można zebrać regexp do zmiennej programu, coś, co mecze (pseudo kod regexp) [char|other|types] [a-z];i [a-z] =*;dodać go do listy słów kluczowych font-lock dla trybu; Z instrukcji na stronie Dostosowywanie słów kluczowych :

Na przykład poniższy kod dodaje dwa wzory czcionek dla trybu C: jeden do fontowania słowa „FIXME”, nawet w komentarzach, a drugi do fontowania słów „i”, „lub” i „not” jako słów kluczowych.

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

Ten przykład dotyczy tylko właściwego trybu C. Aby dodać te same wzorce do trybu C i wszystkich trybów z niego pochodnych, wykonaj następujące czynności:

 (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
źródło