Tengo un búfer que muestra documentación para los módulos Ansible. Este búfer tiene su propio modo principal que proporciona todas las cosas estándar. En particular, se tipifica el búfer para resaltar marcado en línea, opciones, secciones, etc. En general, es bastante similar a M-x man
.
En la parte inferior de la documentación, generalmente hay algunos ejemplos de código en YAML. Me gustaría tipificar estos también. Podría agregar mis propias palabras clave de bloqueo de fuente para YAML, por supuesto, pero prefiero volver a usar la fuente del modo YAML.
¿Cómo puedo hacer eso? Específicamente, ¿cómo puedo usar un modo principal diferente para fontificar una región particular de un búfer?
Tenga en cuenta que el modo YAML no necesita estar activo en esta región. Todo el búfer es solo un búfer de visualización pasivo, y no está destinado a ser editado. Realmente solo necesito la fuente producida como si el Modo YAML estuviera activo en esa región.
Supongo que podría copiar la región del búfer en un búfer temporal, habilitar el modo YAML, fontificar el búfer y copiar todas las propiedades del texto. Funcionaría eso? Si es así, ¿cómo copio las propiedades de texto y cuáles son las propiedades relevantes para copiar? ¿O hay un mejor enfoque?
Respuestas:
Recientemente me encontré con un problema similar, básicamente quería fontificar fragmentos de código en la documentación que obtuve de otra fuente. Seguí el enfoque mencionado hacia el final de su respuesta y funcionó bien para mí. La función que terminé con algo como lo siguiente
Como señaló @Malabarba en los comentarios, el enfoque simple anterior no funciona si el búfer de destino usa el modo de bloqueo de fuente. Sin embargo, podemos engañar al modo de bloqueo de fuente para que crea que la cadena ya está bloqueada al establecer la propiedad de texto
font-lock-face
enface
, (obtenemos laface
propiedad establecida, cuando usamos la función anterior) y establecemos la propiedad de textofontified
ent
. La siguiente función toma una cadena devuelta por la función anterior y realiza el procesamiento requerido para que la cadena se inserte fontified (esto se toma de laorg-src-font-lock-fontify-block
función org-modeAhora puedes usarlo de la siguiente manera
fuente
sx.el
, pero es importante tener en cuenta que solo funcionará si el búfer de destino no usa el modo de bloqueo de fuente.Library Narrow Indirect (
narrow-indirect
) puede ayudar aquí: eche un vistazo al comentario del encabezado. Se basa en:Tenga en cuenta que el estrechamiento está desactivado de forma predeterminada porque se considera no apto para principiantes (el enlace predeterminado es
C-x n n
). Puede habilitarlo poniendo lo siguiente en su archivo init:También puedes mirar mi hecho
myfn-narrow-indirect
a mano en mi conf .fuente
disabled
propiedad de un comando para llamarla desde Emacs Lisp. Solo afecta el uso interactivo.Sugeriría mirar org-src-font-lock-fontify-block que proporciona esta funcionalidad para los bloques fuente del modo org. Parece que solo copia las partes relevantes a otro búfer, habilita el modo principal allí y luego copia el texto con fuente. Hackish, pero parece funcionar.
fuente