Variables déclarées en couleur

11

Je cherche un moyen simple de faire en sorte qu'emacs se souvienne de la variable déclarée dans une seule fonction en C / C ++. Par "simple", je veux dire sans aucun package externe, juste avec quelques lignes claires dans les fichiers de configuration.

Ma configuration Emacs par défaut colore les noms des variables en jaune lors de la déclaration, mais laisse-les blanches lors de l'utilisation.

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

toto = 42; // 'toto' is white

Je voudrais que chaque "toto" de la même fonction / portée soit également coloré en jaune.

J'ai déjà regardé cette question mais j'aimerais quelque chose de plus simple. J'ai également essayé de faire quelque chose avec le mode de verrouillage des polices , mais je n'ai pas réussi à rendre quelque chose adaptable aux noms de variables.

J'ai déjà une idée pour les noms des membres de la classe C ++ (en utilisant un modèle de nom), donc je veux juste une correspondance de variable locale ici.

Aracthor
la source
3
C'est probablement plus difficile qu'il n'y paraît. nobugs.org/developer/parsingcpp
wasamasa
8
Pourquoi ne voulez-vous pas utiliser de packages? S'il existe un package qui fournit cette fonctionnalité, son installation nécessitera presque certainement moins de détails dans votre configuration que de recréer la fonctionnalité à partir de zéro.
Tyler
11
Cela ressemble beaucoup au color-identifiers-modepackage . (Poster ceci comme un commentaire parce que vous avez dit que vous ne vouliez pas considérer les packages externes.)
Aaron Harris
7
Chaque "package externe" peut également être décrit comme "des lignes élisoires dans les fichiers de configuration". Éviter le code préexistant au motif que quelqu'un l'a fourni sous forme de package est absurde.
phils
Quelle version d'Emacs avez-vous?
DA Vincent

Réponses:

1

Vous pouvez rassembler une expression rationnelle pour votre système variable quelque chose qui correspond (pseudo code regexp) [char|other|types] [a-z];et [a-z] =*;et l' ajouter à la liste des mots-clés de verrouillage de la police pour le mode; Dans le manuel de la page Customizing-Keywords :

Par exemple, le code suivant ajoute deux modèles de fontification pour le mode C: un pour désigner le mot «FIXME», même dans les commentaires, et un autre pour définir les mots «et», «ou» et «non» comme mots clés.

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

Cet exemple affecte uniquement le mode C proprement dit. Pour ajouter les mêmes motifs au mode C et à tous les modes qui en dérivent, procédez à la place:

 (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
la source