Variables declaradas de color

11

Estoy buscando una manera simple de hacer que emacs recuerde la variable declarada en una sola función en C / C ++. Por "simple", quiero decir sin ningún paquete externo, solo con algunas líneas elisp en los archivos de configuración.

Mi configuración predeterminada de Emacs colorea los nombres de las variables en amarillo en la declaración, pero los dejo en blanco al usarlos.

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

toto = 42; // 'toto' is white

Me gustaría hacer que cada "toto" de la misma función / alcance sea también de color amarillo.

Ya he examinado esta pregunta, pero me gustaría algo más simple. También intenté hacer algo con el modo de bloqueo de fuente , pero no logré hacer algo adaptable a los nombres de las variables.

Ya tengo una idea para los nombres de miembros de la clase C ++ (usando un patrón de nombre), así que solo quiero una coincidencia de variable local aquí.

Aracthor
fuente
3
Esto es probablemente más difícil de lo que parece. nobugs.org/developer/parsingcpp
wasamasa
8
¿Por qué no quieres usar ningún paquete? Si hay un paquete que proporciona esta función, la instalación seguramente requerirá menos elisp en su configuración que volver a crear la función desde cero.
Tyler
11
Esto se parece mucho al color-identifiers-modepaquete . (Publicando esto como un comentario porque dijiste que no querías considerar paquetes externos).
Aaron Harris
77
Cada "paquete externo" también se puede describir como "algunas líneas elisp en los archivos de configuración". Evitar el código preexistente sobre la base de que alguien lo ha proporcionado en forma de paquete es absurdo.
phils
¿Qué versión de Emacs tienes?
DA Vincent

Respuestas:

1

Se podría reunir una expresión regular para su esquema de variables, algo que los partidos (código de seudo expresión regular) [char|other|types] [a-z];y [a-z] =*;y añadirlo a la lista de palabras clave font-lock para su modo; Del manual en la página Customizing-Keywords :

Por ejemplo, el siguiente código agrega dos patrones de fuente para el modo C: uno para escribir la palabra 'FIXME', incluso en los comentarios, y otro para escribir las palabras 'y', 'o' y 'no' como palabras clave.

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

Este ejemplo afecta solo al modo C propiamente dicho. Para agregar los mismos patrones al modo C y todos los modos derivados de él, haga esto en su lugar:

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