emacs elisp markdown

Renderizar en el búfer de Emacs



elisp markdown (8)

¿Es posible presentar Markdown renderizado en un búfer de Emacs usando las capacidades de formateo de texto del buffer de Emacs? Emacs en entornos gráficos tiene capacidades de presentación de texto enriquecido (estilos de fuente, colores, enlaces e incluso imágenes) por lo que debería ser bastante posible. ¿Hay alguna implementación existente?

Tenga en cuenta que la idea es hacer que el Markdown renderizado sea un texto nativo de Emacs formateado que se puede navegar y utilizar como cualquier otro texto en Emacs. Por lo tanto, las soluciones que se procesan en una imagen que está integrada en un búfer de Emacs no son deseables aquí.

También tenga en cuenta que esto no se trata de un modo para editar Markdown, sino para presentar Markdown renderizado en un búfer de Emacs. Preferiblemente debe ser una solución pura de Emacs Lisp para la portabilidad.


Además de pretty-lambda (que ya se ha sugerido varias veces), podría examinar org-mode y sus reglas de sintaxis de resaltado. En particular, la variable org-hide-emphasis-markers hace más o menos lo que desea (ver, por ejemplo, cómo org-do-emphasis-faces hide ocultan los caracteres de marcado).


Como no conozco ningún analizador de Markdown basado en emacs, tendría que decir que tiene que codificar uno desde cero. Tal vez this pregunta SO te arroje algunos consejos.

Si opta por ir por el camino solo de Emacs, entonces Semantic es una API excelente para ese trabajo (le ofrece un generador de analizadores, analizador y analizador léxicos, ¡ha existido por más de una década y tiene documentación!) . Después de tener el analizador de lenguaje, deberá realizar algunas funciones de representación para cada tipo de token. Y de esta manera puedes personalizar todo.

Aunque este sería un viaje esclarecedor, de todos modos, aún optaría por usar un convertidor Markdown-> html existente en un proceso de fondo separado y luego usar w3 (m) para la vista previa de emacs (como sugirió Bozhidar). Hace el trabajo y es mucho más simple de hacer. No hay problemas importantes de rendimiento, tampoco: debe ejecutar esta herramienta de forma bastante escasa, de modo que pueda ahorrar algunos milisegundos adicionales.

Una solución mixta sería hacer que el analizador Markdown genere HTML directamente, y obtener una vista previa en un búfer w3 (m) (le quita el peso de renderizado de sus hombros, solo necesita transliterar el marcador en html, y eso parece bastante directo reenviar con Semántica).


Dependiendo del contexto en el que le gustaría ver el texto renderizado, tal vez pueda acercarse mucho a lo que necesita simplemente modificando las reglas de bloqueo de fuentes del modo de marcado.


Personalmente, utilizo el siguiente flujo de trabajo:

  • ejecutar en Cc Cc m para ejecutar Markdown en el búfer actual y obtener una vista previa de la salida en otro búfer.
  • mover al html-mode en este otro buffer ( Mx html-mode )
  • ocultar las etiquetas html para mostrar algo cerca de la salida ( Mx sgml-tags-invisible )

Luego, cada vez que desee actualizar la representación, simplemente vuelva a ejecutar Cc Cc m en el búfer de reducción.

Sin embargo, confieso que hasta ahora, para la edición / previsualización de Markdown, no hay nada mejor para mí que el panel de vista previa de Textmate y su reducción. En realidad, desde una perspectiva personal, el único caso en el que prefiero ejecutar Textmate en lugar de Emacs es cuando quiero editar los archivos de marcación. Sin embargo, el camino para tener la misma calidad de vista previa en emacs no es tan difícil y, probablemente, debería investigarlo. Como yo lo veo, es simplemente:

  • obtener el css interno utilizado por Textmate para renderizar la vista previa
  • use w3 o w3m para previsualizar la salida de reducción utilizando este CSS

Si se trata solo del renderizado, vaya con la sugerencia de Bozhidar y haga una conversión Markdown to HTML, luego muestre el HTML en un buffer W3. markdown-mode tiene un código para llamar al comando Markdown externo con algunas cosas buenas.

Pero si realmente quiere hacer todo dentro de Emacs Lisp, primero tendrá que escribir un analizador de Markdown.


Supongo que puedes usar el código fuente de latex-preview para inspiración o pretty-lambda (un software mucho más simple).

Alternativamente, puede convertir la marca en html en un proceso en segundo plano y obtener una vista previa del html.

Todo es posible en Emacs, pero no todo se logra fácilmente :-)


Tengo esto en mi archivo .emacs:

(custom-set-faces ;; custom-set-faces was added by Custom. ;; If you edit it by hand, you could mess it up, so be careful. ;; Your init file should contain only one such instance. ;; If there is more than one, they won''t work right. ''(markdown-header-delimiter-face ((t (:inherit font-lock-function-name-face :underline t :weight bold))) t) ''(markdown-header-face-1 ((t (:inherit markdown-header-face :height 1.5))) t) ''(markdown-header-face-2 ((t (:inherit markdown-header-face :height 1.3))) t) ''(markdown-header-face-3 ((t (:inherit markdown-header-face :underline t :height 1.2))) t) ''(markdown-header-face-4 ((t (:inherit markdown-header-face :underline t :height 1.1))) t) ''(markdown-header-face-5 ((t (:inherit markdown-header-face :underline t))) t) ''(markdown-header-face-6 ((t (:inherit markdown-header-face :underline t))) t)) (put ''set-goal-column ''disabled nil)

que agranda todos los titulares. El modo Markdown en sí pondrá en cursiva el texto con estrella y el texto en doble estrella en negrita, de modo que esto lo llevará hasta allí. Sin embargo, no hará que los caracteres de control sean invisibles.

Si quieres eso, probablemente deberías buscar ejemplos pretty-lambda (como sugirió Bozhidar Batsov )


Yo también, he estado buscando algo como esto durante mucho tiempo. Lo mejor que pude encontrar, sin embargo, no es la solución de Emacs, es una gran pieza de software ReText llamada ReText .