Farbe deklarierte Variablen

11

Ich suche nach einer einfachen Möglichkeit, Emacs an deklarierte Variablen in einer einzelnen Funktion in C / C ++ zu erinnern. Mit "einfach" meine ich ohne externes Paket, nur mit einigen Elisp-Zeilen in Konfigurationsdateien.

Meine Standard-Emacs-Konfiguration färbt Variablennamen bei der Deklaration in Gelb, lässt sie jedoch bei Verwendung weiß.

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

toto = 42; // 'toto' is white

Ich möchte jedes "Toto" der gleichen Funktion / des gleichen Bereichs auch gelb färben.

Ich habe diese Frage bereits angeschaut , möchte aber etwas Einfacheres. Ich habe auch versucht, etwas mit dem Schriftsperrmodus zu tun , aber es ist mir nicht gelungen, etwas an Variablennamen anpassbar zu machen.

Ich habe bereits eine Idee für C ++ - Klassenmitgliedsnamen (unter Verwendung eines Namensmusters), daher möchte ich hier nur eine Übereinstimmung der lokalen Variablen.

Aracthor
quelle
3
Das ist wahrscheinlich schwieriger als es aussieht. nobugs.org/developer/parsingcpp
wasamasa
8
Warum möchten Sie keine Pakete verwenden? Wenn es ein Paket gibt, das diese Funktion bietet, erfordert die Installation mit ziemlicher Sicherheit weniger Elisp in Ihrer Konfiguration als die Neuerstellung der Funktion von Grund auf neu.
Tyler
11
Das klingt sehr nach dem color-identifiers-modePaket . (Dies als Kommentar posten, weil Sie sagten, Sie wollten keine externen Pakete in Betracht ziehen.)
Aaron Harris
7
Jedes "externe Paket" kann auch als "einige Elisp-Zeilen in Konfigurationsdateien" beschrieben werden. Es ist absurd, bereits vorhandenen Code zu vermeiden, der von jemandem in Paketform bereitgestellt wurde.
Phils
Welche Version von Emacs hast du?
DA Vincent

Antworten:

1

Sie können einen regulären Ausdruck für Ihr Variablenschema erstellen, der übereinstimmt (Pseudo-regulärer Ausdruckscode), [char|other|types] [a-z];und [a-z] =*;ihn der Schlüsselwortliste für die Schriftsperre für Ihren Modus hinzufügen. Aus dem Handbuch auf der Seite Customizing-Keywords :

Mit dem folgenden Code werden beispielsweise zwei Schriftartenmuster für den C-Modus hinzugefügt: eines, um das Wort 'FIXME' auch in Kommentaren zu fontieren, und eines, um die Wörter 'und', 'oder' und 'nicht' als Schlüsselwörter zu fontieren.

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

Dieses Beispiel betrifft nur den eigentlichen C-Modus. Gehen Sie folgendermaßen vor, um dem C-Modus und allen daraus abgeleiteten Modi dieselben Muster hinzuzufügen:

 (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
quelle