Как я могу просмотреть уценку в Emacs в режиме реального времени?
Я использую spacemacs и ищу плагин для предварительного просмотра уценки в реальном времени. Я нашел плагин markdown-preview-eww, но для него требуется гем, и я предпочитаю не устанавливать ruby.
Режим уценки просто экспортирует MD в HTML, и он не может просматривать уценку в реальном времени. Кроме того, я не люблю создавать файлы без моего согласия.
Итак, есть ли плагин для предварительного просмотра уценки в Emacs? Или все используют Org-режим в Emacs, а не уценки?
Ответы
Ответ 1
Есть несколько решений, перечисленных здесь: http://wikemacs.org/wiki/Markdown#Live_preview_as_you_type.
Два из них требуют дополнительных пакетов: рубиновый номер, который вы упомянули, или библиотеку npm (nodejs, javascript) в случае livedown-mode
.
Однако есть два варианта Elisp! Самый простой - это flymd
а другой - нетерпеливый. Оба доступны в Мелпе.
Flymd
Установите его с Mx package-install RET flymd RET
package.el(Mx package-install RET flymd RET
), а затем просто вызовите Mx flymd-flyit. Он открывает браузер с отображаемой уценкой.
Мы можем включить/отключить автоматическую перезагрузку и вкус удержания github.
Нетерпеливый режим
Он предназначен для работы с html, но документ дает трюк, чтобы заставить его работать с уценкой. Он также работает как шарм, но требует одного шага настройки:
- Установите нетерпеливый режим с
Mx package-install RET impatient-mode RET
, учитывая, что вы настроили package.el для использования репозитория melpa. - Запустите веб-сервер emacs с помощью
Mx httpd-start
. - Начать нетерпеливый режим в буферах, которые вам интересны для предварительного просмотра:
Mx impatient-mode
. - Откройте ваш браузер на localhost: 8080/imp. Вы увидите список буферов с включенным режимом. Нажмите на один: вы видите живое отображение буфера.
Чтобы включить преобразование уценки, мы следуем wikemacs:
-
Определите эту функцию elisp где-нибудь, как в вашем файле инициализации:
(defun markdown-html (buffer)
(princ (with-current-buffer buffer
(format "<!DOCTYPE html><html><title>Impatient Markdown</title><xmp theme=\"united\" style=\"display:none;\"> %s </xmp><script src=\"http://strapdownjs.com/v/0.2/strapdown.js\"></script></html>" (buffer-substring-no-properties (point-min) (point-max))))
(current-buffer)))
-
Скажите нетерпеливый режим, чтобы использовать его: Mx imp-set-user-filter RET markdown-html RET
.
- Вернитесь в свой браузер, он работает!
Ответ 2
Мне нравится этот более простой подход, который не требует другого пакета или браузера:
Затем для обновления html-буфера снова запустите markdown-other-window
C-c C-c m в буфере уценки.
Ответ 3
Вы можете использовать мою инфраструктуру приложений emacs: https://github.com/manateelazycat/emacs-application-framework
Он встраивает браузер в ваши emacs, тогда вы можете написать уценку слева и обновить предварительный просмотр с правой стороны.
Снимок экрана: https://github.com/manateelazycat/emacs-application-framework/blob/master/screenshot/markdown_previewer.gif
Как установить eaf, посмотрите https://github.com/manateelazycat/emacs-application-framework/blob/master/README.md
Ответ 4
Теперь вы можете сделать это в Spacemacs с помощью markdown markdown-live-preview-mode
или SPC mcp
.
Ответ 5
Ответ @Ehvince вдохновил меня немного изменить функцию markdown-html, чтобы обеспечить точно такой же вид, что и в Github.com.
(defun markdown-html (buffer)
(princ (with-current-buffer buffer
(format "<!DOCTYPE html><html><script src=\"https://cdnjs.cloudflare.com/ajax/libs/he/1.1.1/he.js\"></script><link rel=\"stylesheet\" href=\"https://assets-cdn.github.com/assets/github-e6bb18b320358b77abe040d2eb46b547.css\"><link rel=\"stylesheet\" href=\"https://assets-cdn.github.com/assets/frameworks-95aff0b550d3fe338b645a4deebdcb1b.css\"><title>Impatient Markdown</title><div id=\"markdown-content\" style=\"display:none\">%s</div><div class=\"markdown-body\" style=\"max-width:968px;margin:0 auto;\"></div><script>fetch('https://api.github.com/markdown', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ \"text\": document.getElementById('markdown-content').innerHTML, \"mode\": \"gfm\", \"context\": \"knit-pk/homepage-nuxtjs\"}) }).then(response => response.text()).then(response => {document.querySelector('.markdown-body').innerHTML = he.decode(response)}).then(() => { fetch(\"https://gist.githubusercontent.com/FieryCod/b6938b29531b6ec72de25c76fa978b2c/raw/\").then(response => response.text()).then(eval)});</script></html>"
(buffer-substring-no-properties (point-min) (point-max))))
(current-buffer)))
Функция, которая активирует нетерпеливый режим и автоматически устанавливает imp-user-filter
в markdown-html
.
(defun markdown-preview-like-god ()
(interactive)
(impatient-mode 1)
(setq imp-user-filter #'markdown-html)
(cl-incf imp-last-state)
(imp--notify-clients))
Как использовать:
-
Mx http-start
- В буфере.md
Mx markdown-preview-like-god
- Перейти на
localhost:8080/imp
Ответ 6
Я хотел бы порекомендовать режим захвата: мгновенный предварительный просмотр Markdown/Org со вкусом Github.