Визуализация уценки в буфере Emacs - PullRequest
45 голосов
/ 05 августа 2010

Можно ли представить Markdown, визуализированный в буфере Emacs, используя собственные возможности форматирования текста в буфере Emacs? Emacs в графической среде имеет богатые возможности представления текста (стили шрифтов, цвета, ссылки и даже изображения), поэтому это должно быть вполне возможно. Существуют ли какие-либо реализации?

Обратите внимание, что идея состоит в том, чтобы визуализированный Markdown был собственным форматированным текстом Emacs, по которому можно перемещаться и работать с ним, как с любым другим текстом в Emacs. Поэтому решения, которые визуализируют изображение, встроенное в буфер Emacs, здесь нежелательны.

Также обратите внимание, что это не для режима редактирования Markdown, но для представления отрисованной Markdown в буфере Emacs. Желательно, чтобы это было чистое решение Emacs Lisp для переносимости.

Ответы [ 8 ]

20 голосов
/ 24 июля 2012

Personnaly, я использую следующий рабочий процесс:

  • запустить на C-c C-c m, чтобы запустить Markdown для текущего буфера и просмотреть вывод в другом буфере.
  • перейти к html-mode в этом другом буфере (M-x html-mode)
  • скрыть теги html, чтобы отобразить что-то близкое к выводу (M-x sgml-tags-invisible)

Затем каждый раз, когда вы хотите обновить рендеринг, просто снова запускайте C-c C-c m в буфере уценки.

Тем не менее, я признаюсь, что до сих пор для редактирования / предварительного просмотра Markdown ничто не сравнится с моим Textmate и его панелью предварительного просмотра markdown. На самом деле, с личной точки зрения, единственный случай, когда я предпочитаю запускать Textmate, а не Emacs, - это когда я хочу редактировать файлы уценки. И все же путь к тому же качеству предварительного просмотра на emacs не так уж и сложен, и, вероятно, я должен его исследовать. На мой взгляд, это просто:

  • получить внутренний CSS, используемый Textmate для рендеринга предварительного просмотра
  • используйте w3 или w3m для предварительного просмотра вывода уценки с помощью этой css
6 голосов
/ 18 сентября 2012

У меня есть это в моем файле .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)

, который увеличивает все заголовки. Режим Markdown сам по себе будет курсивом помеченный текст и жирный шрифт двойным пометкой, так что вы попадете туда. Однако это не сделает управляющие символы невидимыми.

Если вы хотите этого, вам, вероятно, следует обратиться к pretty-lambda за примерами (как Божидар Бацов предложил )

6 голосов
/ 05 августа 2010

Полагаю, вы можете использовать исходный код latex-preview для вдохновения или pretty-lambda (гораздо более простая часть программного обеспечения).

В качестве альтернативы вы можете преобразовать уценку в html в фоновом режиме и просмотреть html.

В Emacs возможно все, но не все легко достигается: -)

5 голосов
/ 28 марта 2012

В зависимости от контекста, в котором вы хотели бы видеть визуализированный текст, вы можете быть достаточно близки к тому, что вам нужно, просто изменив правила font-lock режима markdown-mode.

4 голосов
/ 18 сентября 2012

Помимо pretty-lambda (который уже предлагался несколько раз), вы можете посмотреть org-mode и его правила подсветки синтаксиса. В частности, переменная org-hide-emphasis-markers делает более или менее то, что вам нужно (см., Например, как org-do-emphasis-Faces скрыть символы разметки).

3 голосов
/ 10 августа 2010

Поскольку я не знаю ни одного парсера Markdown, основанного на emacs, я должен сказать, что вы должны кодировать его с нуля. Может быть, этот ТАК вопрос может на вас навести указатели.

Если вы решите пройти путь только для Emacs, то Semantic является отличным API для этой работы (он предлагает вам лексер, парсер-генератор и парсер; он существует уже более десятилетие, и у него есть документация!). После того, как у вас будет синтаксический анализатор языка, вам нужно будет сделать несколько функций рендеринга для каждого типа токенов. И таким образом вы можете настроить все.

Хотя это было бы просветляющим путешествием, я, конечно же, выбрал бы использование существующего конвертора Markdown-> html в отдельном фоновом процессе, а затем использовал w3 (m) для предварительного просмотра emacs (как предложил Божидар). Это делает работу, и это намного проще сделать. Никаких серьезных проблем с производительностью тоже нет - вы должны запускать этот инструмент довольно редко, чтобы вы могли легко сэкономить несколько дополнительных миллисекунд).

Смешанным решением было бы заставить парсер Markdown генерировать HTML напрямую и просматривать его в буфере w3 (m) (он снимает вес рендеринга с ваших плеч, вам нужно только транслитерировать уценку в html, и это с Semantic выглядит довольно просто).

1 голос
/ 05 августа 2010

Если речь идет только о рендеринге, воспользуйтесь предложением Божидара и выполните преобразование Markdown в HTML, а затем отобразите HTML в буфере W3. markdown-mode содержит код для вызова внешней команды Markdown с несколькими полезностями.

Но если вы действительно хотите делать все в Emacs Lisp, вам сначала нужно написать анализатор Markdown.

0 голосов
/ 28 марта 2012

Я тоже, я искал что-то вроде этого в течение очень долгого времени. Лучшее, что я смог найти, - это не решение Emacs, а независимое отличное программное обеспечение под названием ReText .

...