Variáveis ​​declaradas em cores

11

Eu estou procurando uma maneira simples de fazer o emacs lembrar da variável declarada em uma única função no C / C ++. Por "simples", quero dizer, sem nenhum pacote externo, apenas com algumas linhas elisp nos arquivos de configuração.

Minha configuração padrão do Emacs colore os nomes das variáveis ​​em amarelo na declaração, mas deixe em branco no uso.

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

toto = 42; // 'toto' is white

Eu gostaria de fazer todo "toto" da mesma função / escopo colorido em amarelo também.

Eu já examinei essa questão, mas gostaria de algo mais simples. Também tentei fazer algo com o modo de bloqueio de fonte , mas não consegui fazer algo adaptável aos nomes de variáveis.

Eu já tenho uma idéia para nomes de membros da classe C ++ (usando um padrão de nome), então eu só quero uma correspondência de variável local aqui.

Aracthor
fonte
3
Provavelmente é mais difícil do que parece. nobugs.org/developer/parsingcpp
wasamasa
8
Por que você não deseja usar nenhum pacote? Se houver um pacote que forneça esse recurso, sua instalação quase certamente exigirá menos elisp em sua configuração do que recriar o recurso do zero.
Tyler
11
Isso parece muito com o color-identifiers-modepacote . (Publicação isso como um comentário porque você disse que não queria considerar pacotes externos.)
Aaron Harris
7
Todo "pacote externo" também pode ser descrito como "algumas linhas elisp nos arquivos de configuração". Evitar código preexistente com base no fato de alguém o ter fornecido em forma de pacote é um absurdo.
phils 29/05
Qual versão do Emacs você possui?
22417 Vincent

Respostas:

1

Você poderia reunir uma expressão regular para o seu esquema variável, algo que partidas (código regexp pseudo) [char|other|types] [a-z];e [a-z] =*;e adicioná-lo à lista de palavras-chave font-bloqueio para o seu modo; No manual da página Palavras-chave de personalização :

Por exemplo, o código a seguir adiciona dois padrões de fonte para o modo C: um para tipificar a palavra 'FIXME', mesmo nos comentários, e outro para tipificar as palavras 'e', ​​'ou' e 'não' como palavras-chave.

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

Este exemplo afeta apenas o modo C. Para adicionar os mesmos padrões ao modo C e a todos os modos derivados, faça o seguinte:

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