2010-08-04 19 views
43

¿Es posible presentar Markdown renderizado en un búfer de Emacs utilizando las capacidades de formateo de texto de búfer 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?Renderización en el búfer de Emacs

Tenga en cuenta que la idea es hacer que el Markdown render sea un texto nativo de Emacs formateado que se pueda 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 es no sobre un modo para editar Markdown, pero para presentar Markdown rendido en un búfer de Emacs. Preferiblemente debe ser una solución pura de Emacs Lisp para la portabilidad.

+0

¿Alguna necesidad específica? Así como "marcado" no significa HTML, "markdown" es bastante vago. – phils

+1

¡Marque como en cualquier dialecto de Markdown, si eso es lo que quería decir! –

Respuesta

6

Supongo que puede usar el código fuente de latex-preview como 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 es fácil de lograr :-)

+1

Gracias por mencionar latex-preview. Sin embargo, no me gustaría renderizar Markdown como una imagen incrustada en el búfer de Emacs, sino como texto nativo con formato Emacs que se puede navegar y utilizar como cualquier otro texto. Sin embargo, algo podría aprenderse de la bonita lambda. –

1

Si sólo se trata de la prestación, con la sugerencia de ir y hacer un Bozhidar de rebajas a la conversión de HTML, a continuación, mostrar el código HTML en un W3 buffer. 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 reducción.

+1

Gracias, pero realmente quiero tenerlo todo en Emacs Lisp para la portabilidad. Por lo tanto, espero encontrar un analizador de Emacs Lisp Markdown existente. –

3

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 SO pregunta puede arrojar algunos consejos a usted.

Si opta por ir por el camino exclusivo de Emacs, entonces Semantic es una API excelente para ese trabajo (le ofrece un generador de analizadores, analizador y analizador lexer, 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 esto sería un viaje esclarecedor, aún así optaría por utilizar un convertidor existente Markdown-> html 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 de Markdown genere HTML directamente, y obtener una vista previa en un búfer w3 (m) (le quita el peso de representación de sus hombros, solo necesita transliterar la marca en html, y eso parece bastante sencillo con Semántica).

+0

Gracias por el enlace a la pregunta sobre el análisis de Markdown, y por mencionar Semántica. –

0

Yo también, he estado buscando algo como esto por un muy largo plazo. Lo mejor que pude encontrar, sin embargo, no es la solución de Emacs, es una gran pieza de software independiente llamada ReText.

+0

En Mac, tiene una alternativa similar: [MOU] (http://mouapp.com/) –

5

Dependiendo del contexto en el que le gustaría ver el texto renderizado, es posible que pueda acercarse bastante a lo que necesita simplemente modificando las reglas de bloqueo de fuente del modo markdown-mode.

+0

Suena como un enfoque pragmático con un pequeño esfuerzo (solo actualiza las reglas de bloqueo de fuentes) y no depende de ninguna herramienta externa o proceso que es bueno. –

18

Personnaly, yo uso el siguiente flujo de trabajo:

  • ejecución en un C-c C-c m para funcionar de rebajas en el búfer en uso y previsualizar el resultado en otro búfer.
  • movimiento para html-mode en este otro búfer (M-x html-mode)
  • ocultar las etiquetas HTML para mostrar algo cercano a la salida de (M-x sgml-tags-invisible)

Entonces, cada vez que desee actualizar la representación, sólo tiene que ejecutar de nuevo C-c C-c m en el buffer de reducción.

Sin embargo, confieso que hasta ahora para la edición/previsualización de Markdown, nada mejor que el panel de vista previa de Textmate and markdown. 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. Tal como lo veo, es simplemente:

  • obtener el css interno utilizado por Textmate para renderizar la vista previa
  • uso W3 o w3m para ver la salida de rebajas usar este css
+0

Gracias, amo cómo combinaste todas estas funcionalidades :) – dolzenko

+3

Gran configuración, pero por alguna razón no puedo actualizar. Cuando ejecuto 'C-c C-c m' en el búfer renderizado obtengo' C-c C-c m no está definido', y cuando lo ejecuto en el búfer de origen obtengo 'Text is read-only'. ¿Cómo puedo evitar esto? –

+0

¿Estás en 'markdown-mode'? Quizás puedas asegurarte de que tu 'markdown-mode' esté instalado y actualizado.También puede ejecutar 'C-h k C-c C-c m' para comprobar si' C-c C-c m' se une a la función 'markdown-other-window'. También se puede simplemente ejecutar la función 'rebaja-otra-window' directamente con' M-x-rebaja otra-window'. – modulitos

6

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 amplía 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 desea que, probablemente debería mirar en pretty-lambda de ejemplos (como Bozhidar Batsov suggested)

4

Aparte de pretty-lambda (que ya se ha sugerido varias veces), se podría mirar en org-mode y sus reglas de sintaxis highliting. 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 ocultar caracteres de marcado).

Cuestiones relacionadas