**編集:**この執筆以来、機能の一部はマークダウンモードで直接実装されているようです。このコメントとその中のリンクをチェックしてください。
構成
あなたが取ることができる2つのアプローチがあります。
- (シェルコマンドを使用して)マークダウンコードをコンパイルし、バッファー内のhtmlを表示するコマンドを作成できます。
- いくつかのカスタマイズをa-la org-modeで行い、バッファーをマークダウンのように見せることができます。
ここでは、2番の実装方法を説明します。以下のすべてのコードをinitファイルにコピーするだけです。
フォントロック規則を追加する
この変数は、リストの外観を制御します。リストをインデントするためのスペースを追加し、きれいな箇条書きを使用します(フォントで表示できる場合)。
(defvar endless/bullet-appearance
(propertize (if (char-displayable-p ?•) " •" " *")
'face 'markdown-list-face)
"String to be displayed as the bullet of markdown list items.")
これは、実際にルールを追加するコマンドです。リスト用とリンク用があります。
(require 'rx)
(defvar endless/markdown-link-regexp
"\\[\\(?1:[^]]+\\)]\\(?:(\\(?2:[^)]+\\))\\|\\[\\(?3:[^]]+\\)]\\)"
"Regexp matching a markdown link.")
(font-lock-add-keywords
'markdown-mode
'(("^ *\\(\\*\\|\\+\\|-\\|\\) "
1 `(face nil display ,endless/bullet-appearance) prepend)
(endless/markdown-link-regexp
1 '(face nil display "") prepend))
'append)
リンクを編集可能にする
display
プロパティを使用してリンクの一部を非表示にしているため、フォントのロックに、リンクの一部を削除するたびにそのプロパティを消去するように指示する必要があります(そのように編集できます)。
(add-hook 'markdown-mode-hook #'endless/markdown-font-lock)
(defun endless/markdown-font-lock ()
"Configure aggressive font-locking of `markdown-mode'."
(define-key markdown-mode-map "\C-c\C-l" #'endless/markdown-insert-link)
(add-to-list (make-local-variable 'font-lock-extra-managed-props) 'display))
C-c C-l
org-modeのように、にバインドして簡単に編集するコマンドを定義することもできます。
(defun endless/markdown-insert-link ()
"Insert or edit link at point."
(interactive)
(if (or (looking-at endless/markdown-link-regexp)
(and (ignore-errors (backward-up-list) t)
(or (looking-at endless/markdown-link-regexp)
(and (forward-sexp -1)
(looking-at endless/markdown-link-regexp)))))
(let ((data (endless/ask-for-link
(match-string-no-properties 1)
(or (match-string-no-properties 2)
(match-string-no-properties 3)))))
(if (match-string-no-properties 2)
(replace-match (cdr data) :fixedcase :literal nil 2)
(replace-match (cdr data) :fixedcase :literal nil 3))
(replace-match (car data) :fixedcase :literal nil 1))
(let ((data (endless/ask-for-link)))
(insert "[" (car data) "](" (cdr data) ")"))))
(defun endless/ask-for-link (&optional name link)
(cons (read-string "Text of the link: " name)
(read-string "URL of the link: " link)))
(オプション)いくつかの面を構成する
それはあなたが要求したポイントに十分なはずです。あなたのバッファが見たい場合は、さらに SEの値下げのように、コール
M-x customize-group RET markdown-faces
そして、あなたが合うと思うものを変えてください。私は自分自身でいくつかの設定を行いました。
(custom-set-faces
'(markdown-header-face-1 ((t (:inherit markdown-header-face :height 2.0))))
'(markdown-header-face-2 ((t (:inherit markdown-header-face :height 1.7))))
'(markdown-header-face-3 ((t (:inherit markdown-header-face :height 1.4))))
'(markdown-header-face-4 ((t (:inherit markdown-header-face :height 1.1))))
'(markdown-inline-code-face ((t (:inherit font-lock-constant-face :background "gainsboro"))))
'(markdown-link-face ((t (:inherit link))))
'(markdown-pre-face ((t (:inherit font-lock-constant-face :background "gainsboro")))))
結果
以下は、最初の2セットの構成の後に得られるものです。
顔を設定した後にも何が得られます。これが良く見えるかどうかは議論の余地がありますが、私は個人的に上記のものに固執します。