web-dev-qa-db-ja.com

Emacsバッファでマークダウンをレンダリングする

Emacs独自のバッファテキストフォーマット機能を使用して、Emacsバッファにレンダリングされたマークダウンを表示することは可能ですか?グラフィック環境のEmacsには豊富なテキスト表示機能(フォントスタイル、色、リンク、さらには画像)があるので、それはかなり可能であるはずです。既存の実装はありますか?

レンダリングされたマークダウンを、Emacsの他のテキストと同じようにナビゲートおよび操作できるネイティブのEmacs形式のテキストにするという考え方に注意してください。したがって、ここではEmacsバッファーに埋め込まれた画像にレンダリングするソリューションは望ましくありません。

また、これは編集モードについてではありませんマークダウンですが、レンダリングされたマークダウンをEmacsバッファーに表示するためのものであることに注意してください。移植性のために、純粋なEmacsLISPソリューションであることが望ましいです。

47
Markus Hallmann

個人的には、次のワークフローを使用します。

  • 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とそのマークダウンプレビューパネルに勝るものはありません。実際、個人的な観点から、EmacsではなくTextmateを実行したいのは、マークダウンファイルを編集したい場合だけです。それでも、emacsで同じ品質のプレビューを表示する方法はそれほど難しくないので、おそらく調査する必要があります。私が見るように、それは単に:

  • プレビューをレンダリングするためにTextmateによって使用される内部CSSを取得します
  • このcssを使用してマークダウン出力をプレビューするには、w3またはw3mを使用します
20

latex-preview のソースコードをインスピレーションに使用したり、 pretty-lambda (はるかに単純なソフトウェア)を使用したりできると思います。

または、バックグラウンドプロセスでマークダウンをhtmlに変換し、htmlをプレビューすることもできます。

Emacsではすべてが可能ですが、すべてが簡単に達成できるわけではありません:-)

6
Bozhidar Batsov

私はこれを.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)

これはすべての見出しを拡大します。マークダウンモード自体は、スター付きのテキストと太字のダブルスター付きのテキストをイタリック体にするので、そこに到達します。ただし、制御文字が非表示になることはありません。

それが必要な場合は、例として pretty-lambda を調べる必要があります( Bozhidar Batsovが提案

6
bastibe

レンダリングされたテキストを表示したいコンテキストによっては、markdown-modeのフォントロックルールを調整するだけで、必要なものにかなり近づくことができる場合があります。

5
Stefan

pretty-lambda (すでに複数回提案されています)とは別に、 org-mode とその構文のハイライトルールを調べることができます。特に、org-hide-emphasis-markers変数は多かれ少なかれあなたが望むことをします(例えばどのように org-do-emphasis-faces マークアップ文字を隠すかを見てください)。

4
ffevotte

レンダリングのみの場合は、Bozhidarの提案に従って、MarkdownからHTMLへの変換を行ってから、HTMLをW3バッファーに表示します。 markdown-mode には、いくつかの機能を備えた外部Markdownコマンドを呼び出すコードがあります。

しかし、本当にEmacs LISP内ですべてを実行したい場合は、最初にMarkdownパーサーを作成する必要があります。

1
Thomas Kappler

私もvery長い間このようなものを探していました。しかし、私が見つけた最高のものはEmacsソリューションではなく、 ReText と呼ばれる独立した素晴らしいソフトウェアです。

0
Bruno Reis