Как я могу просмотреть уценку в 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

Мне нравится этот более простой подход, который не требует другого пакета или браузера:

  • Выполните Mx markdown-other-window в текущем буфере и отобразите результат в другом окне.

  • Перейдите в Mx html-mode и скройте теги HTML Mx sgml-tags-invisible.

Затем для обновления 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))

Как использовать:

  1. Mx http-start
  2. В буфере.md Mx markdown-preview-like-god
  3. Перейти на localhost:8080/imp

Ответ 6

Я хотел бы порекомендовать режим захвата: мгновенный предварительный просмотр Markdown/Org со вкусом Github.