Render Markdown в буфере Emacs
Можно ли представить Markdown в буфере Emacs с использованием возможностей форматирования текста в буфер обмена Emacs? Emacs в графических средах обладает богатыми возможностями текстового представления (стили шрифтов, цвета, ссылки и даже изображения), поэтому это должно быть вполне возможно. Существуют ли какие-либо существующие реализации?
Обратите внимание, что идея состоит в том, чтобы отображаемый Markdown был родным форматированным текстом Emacs, который можно перемещать и работать как любой другой текст в Emacs. Поэтому здесь не нужны решения, которые отображают изображение, встроенное в буфер Emacs.
Также обратите внимание, что речь идет не о режиме редактирования Markdown, а о представлении рендеринга Markdown в буфере Emacs. Он должен предпочтительно быть чистым решением Emacs Lisp для переносимости.
Ответы
Ответ 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.