Eu tenho outra sintaxe destacando palavras-chave SQL dentro de strings (aspas internas) no VIM. Se parece com isso:
Em seguida, no Emacs com modo PHP, tudo entre aspas ( '
) será considerado uma string pelo bloqueio da fonte:
Como você pode ver, o primeiro exemplo com outras propriedades de fonte (sem palavras-chave cursivas) é mais claro. As palavras-chave são muito mais fáceis de distinguir.
Quando estou pesquisando minhas font face
propriedades:
(font-lock-string-face ((t (:foreground "#536991" :slant italic))))
Então, eu estou me perguntando como eu poderia dizer que outra face dentro de um font-lock-string-face
deve ser aplicada, se corresponder às palavras-chave específicas.
Qualquer sugestão será apreciada.
font-lock
syntax-highlighting
highlighting
ReneFroger
fonte
fonte
Respostas:
O seguinte snippet elisp deve funcionar. Os detalhes importantes são:
t
do sinalizador MATCHER OVERRIDE (consulte o documento defont-lock-keywords
).php-sql-keyword-matcher
para esse fim. O teste para seqüências de caracteres é feito viasyntax-ppss
(consulte o documento para esta função).Observe que eu só tenho uma exibição de classe
color
. Então eu não pude testar as outras classes. Suponho que você tenha uma outra classe de exibição, pois as strings são exibidas em itálico no seu exemplo. Se você não obtiver o resultado esperado, personalize o rostophp-sql-keyword-face
.Nota: Não insira apenas imagens de textos necessários para a reconstrução do problema. O texto ascii pode facilitar possíveis auxiliares na reconstrução do problema. No caso de alguém ter uma solução melhor, insiro a versão ASCII do texto aqui:
E aqui uma imagem do texto como parece quando eu o carrego no emacs com o modo PHP:
Na classe de exibição, as
color
strings não estão em itálico, mas têm uma cor diferente. Portanto, escolhi a fonte em itálico para as palavras-chave SQL nas cadeias.Os comentários indicam algumas dificuldades com esta resposta. Foi indicado que a solução não funcionaria com a fonte padrão definida como
Consolas
. Acabei de o testar e no meu sistema também funciona com a fonte Consola como padrão:Na ajuda para
font-lock-add-keywords
encontrei o seguinte texto:O primeiro caso "
FIXME
" é o interessante. Aqui eles usamprepend
como sinalizador de substituição.fonte
subexp-highlighter
sinalizador de substituição como true. Mas vejo que você já fez isso(php-sql-keyword-matcher 0 php-sql-keyword-face t)
. Então, eu copiei o código em uma configuração vazia do Emacs apenas com o modo PHP integrado, avaliei o buffer e criei um novo buffer com o texto ASCII que você mesmo reconstruiu! Apesar de sua excelente explicação detalhada, infelizmente não vejo texto cursivo ou texto diferente.php-sql-keyword-matcher
(adicionei(interactive)
a ela)., Recebo um erro, portanto, suponho que não se destina a chamadas interativas. Depois de avaliar seu código e colar o texto ASCII no buffer de rascunho com o modo PHP ativado, não vejo diferença entre as palavras-chave SQL e o restante das strings. Se você precisar de uma captura de tela, das informações de depuração, gostaria de adicionar mais informações, pois meu conhecimento sobre o Elisp ainda não é suficiente. Eu gostei muito de sua ajuda em meus casos, e pela maneira, os melhores votos para 2016.jit-ock
desiste de algum erro.jit-lock
não resgata erros, mas desativa o manipulador que causa o erro e continua seu trabalho. No entanto, ele deixa uma mensagem de erro no buffer de mensagem. Portanto, inicie um novo emacs, tente suas coisas e observe com muito cuidado o buffer de mensagens. AFAIK, você não pode capturar esse tipo de erro via depurador. A interrupçãojit-lock
do erro pode ter consequências com fio, como bloqueio morto. Presumo que seja novamente alguma função ausente. Vou tentar novamente com-Q
. A propósito, felicidades para você também.emacs -Q
aqui na minha casa com a interface X11. Vou tentar novamente no modo de consola ...M-x php-mode
na configuração vazia do Emacs. Foi por isso que embarquei no modo PHP com uma configuração vazia ainda.