Подтвердить что ты не робот

Render Markdown в буфере Emacs

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

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

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

4b9b3361

Ответ 1

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

  • запустите 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 и его панелью предварительного просмотра. На самом деле, с личной точки зрения, единственный случай, когда я предпочитаю запускать Textmate, а не Emacs, - это когда я хочу редактировать файлы уценки. И все же путь к тому же качеству предварительного просмотра на emacs не так уж и сложен, и, вероятно, я должен его исследовать. На мой взгляд, это просто:

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

Ответ 2

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

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

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

Ответ 3

У меня это в файле .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 для примеров (как Божидар Бацов предложил)

Ответ 4

В зависимости от контекста, в котором вы хотите видеть текст, вы можете приблизиться к тому, что вам нужно, просто изменив правила ограничения шрифта по умолчанию.

Ответ 5

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

Ответ 6

Поскольку я не знаю ни одного анализатора Markdown, основанного на emacs, я должен сказать, что вам нужно закодировать его с нуля. Возможно, this Вопрос SO может бросить вам несколько указателей.

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

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

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

Ответ 7

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

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

Ответ 8

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