Tengo otro resaltado de sintaxis para palabras clave SQL dentro de cadenas (entre comillas) en VIM. Se parece a esto:
Luego, en Emacs con modo PHP, '
el bloqueo de fuente considerará todo entre comillas ( ):
Como puede ver, el primer ejemplo con otras propiedades de fuente (sin palabras clave cursivas) es más claro. Las palabras clave son mucho más fáciles de distinguir.
Cuando estoy mirando mis font face
propiedades:
(font-lock-string-face ((t (:foreground "#536991" :slant italic))))
Entonces me pregunto cómo podría decir que debería aplicarse otra cara dentro de una font-lock-string-face
, si coincide con las palabras clave específicas.
Cualquier sugerencia sería apreciada.
font-lock
syntax-highlighting
highlighting
ReneFroger
fuente
fuente
Respuestas:
El siguiente fragmento de código elisp debería hacer. Los detalles importantes son:
t
de la anulación del indicador MATCHER (ver documento defont-lock-keywords
).php-sql-keyword-matcher
para ese propósito. La prueba de cadenas se realiza a través desyntax-ppss
(consulte el documento para esta función).Tenga en cuenta que solo tengo una pantalla de clase
color
. Entonces no pude probar las otras clases. Supongo que tiene otra clase de visualización ya que las cadenas se muestran en cursiva en su ejemplo. Si no obtiene el resultado esperado, personalice la caraphp-sql-keyword-face
.Nota: No inserte solo imágenes de textos necesarios para la reconstrucción del problema. El texto ASCII puede facilitar a los posibles ayudantes la reconstrucción del problema. Para el caso de que otra persona tenga una mejor solución, inserto la versión ASCII del texto aquí:
Y aquí una imagen del texto como se ve cuando lo cargo en emacs con modo PHP:
Con la clase de visualización, las
color
cadenas no están en cursiva pero tienen un color diferente. Por lo tanto, he elegido la fuente en cursiva para las palabras clave SQL dentro de las cadenas.Los comentarios indican algunas dificultades con esta respuesta. Se ha indicado que la solución no funcionaría con la fuente predeterminada establecida en
Consolas
. Lo acabo de probar y en mi sistema también funciona con la fuente Consola por defecto:En la ayuda para
font-lock-add-keywords
encontré el siguiente texto:El primer caso "
FIXME
" es el interesante. Aquí se usanprepend
como bandera de anulación.fuente
subexp-highlighter
indicador de anulación en verdadero. Pero veo que ya lo hiciste(php-sql-keyword-matcher 0 php-sql-keyword-face t)
. ¡Copié su código en una configuración vacía de Emacs con solo modo PHP integrado, evalué el búfer y luego creé un nuevo búfer con el texto ASCII que incluso reconstruyó! A pesar de su excelente explicación detallada, desafortunadamente no veo texto cursivo o texto diferente.php-sql-keyword-matcher
(lo he agregado(interactive)
), recibo un error, por lo que asumo que no está destinado a llamadas interactivas. Después de evaluar su código y pegar el texto ASCII en el búfer de memoria virtual con el modo PHP habilitado, no veo diferencia entre las palabras clave SQL y el resto de las cadenas. Si necesita una captura de pantalla, de información de depuración, me encantaría agregar más información ya que mi conocimiento de Elisp aún no es suficiente. Realmente aprecio su ayuda en mis casos, y por cierto, mis mejores deseos para 2016.jit-ock
renuncia a algún error.jit-lock
no rescata los errores, pero desactiva el controlador que causa el error y continúa con su trabajo. Sin embargo, deja un mensaje de error en el búfer de mensajes. Entonces, comience un nuevo emacs, pruebe sus cosas y observe con mucho cuidado el buffer de mensajes. AFAIK no puede atrapar este tipo de errores a través del depurador. Detenerjit-lock
el error podría tener consecuencias cableadas, como un bloqueo muerto. Supongo que nuevamente es una función faltante. Lo intentaré de nuevo con-Q
. Por cierto, mis mejores deseos para ti también.emacs -Q
aquí en mi lugar con la interfaz X11. Intentaré nuevamente en modo consola ...M-x php-mode
la configuración vacía de Emacs. Es por eso que abordé el modo PHP con una configuración vacía más.