こんにちは! Emacs Advent Calendarです! メリークリスマス!
Advent Calendarの季節なのでみなさんも20個くらい記事を書く羽目になっているのではないかと思うのですが、私も最近いろいろあって執筆環境を整えてモチベを高めようという気になってきました。
EmacsでMarkdownを書くならMarkdown Modeを使うのが定石ですが、長年何も考えずに使ってきてMarkdown ModeのMarkdown Modeらしい使いかたをしてこなかったので長い12月の最初に向き合ってみようかと思いました。
Markdown Modeのインストール
Markdown ModeはEmacsに標準では付属していませんが、M-x package-install markdown-mode
とかで入ります。Emacs 28以降ではNonGNU ELPAが最初から設定されているので、特別な設定は何もしなくても入ります。
それ以前のEmacs向けにはREADMEを読んで package-archives
の追加をしてください。
いままで"melpa"
/"melpa-stable"
/"nongnu"
のどれかを追加していて非標準のパッケージがインストールできていれば追加の設定は必要ありません。
Markdown Modeの設定
設定項目はREADMEやドキュメントにいっぱい書いてあります。
みなさんもう既にEmacs 29を使ってると思うのでsetopt
で設定すると便利です。
これはカスタム変数を設定するための機能で、custom-set-variables
と同等のものですが、setq
と似た使いかたができるようになったものです。
以下の設定はleaf.elが使える環境向けに書かれています。
leafについては2020年代のEmacs入門などもご参照ください。
(leaf markdown-mode :ensure t
:mode ("\\.md\\'" . gfm-mode)
:config
(setopt markdown-command '("pandoc" "--from=markdown" "--to=html5"))
(setopt markdown-fontify-code-blocks-natively t)
(setopt markdown-header-scaling t)
(setopt markdown-indent-on-enter 'indent-and-new-item)
(leaf-key "<S-tab>" #'markdown-shifttab markdown-mode-map))
leafを使わずに古いEmacs向けの同等の設定も比較してみましょう。
(add-to-list 'auto-mode-alist '("\\.md\\'" . gfm-mode))
(with-eval-after-load 'markdown-mode
(custom-set-variables
'(markdown-command '("pandoc" "--from=markdown" "--to=html5"))
'(markdown-fontify-code-blocks-natively t)
'(markdown-header-scaling t)
'(markdown-indent-on-enter 'indent-and-new-item))
(define-key markdown-mode-map (kbd "<S-tab>") #'markdown-shifttab))
- 拡張子
.md
のファイルに対してmarkdown-mode
ではなくgfm-mode
を使う- これはどちらでも機能に大きな差があるわけではないのだが、GitHub拡張向けが有効になる
- 世の中のMarkdownは暗黙的にGFM(GitHub Flavored Markdown)準拠なので大きな問題は起こらない
-
markdown-command
: MarkdownをHTMLに変換するコマンドを設定する -
markdown-fontify-code-blocks-natively
: コードブロックに対応する言語で色付けする -
markdown-header-scaling
: 見出し部のフォントをおっきくする- Emacsで文字の大きさを変えるような変更は好き嫌いがあると思います
-
markdown-indent-on-enter
: RETを押したときの振る舞いを制御する-
'indent-and-new-item
を設定すると、改行するときに「いい感じ」になる
-
-
leaf-key
/define-key
: Shift + Tabを押したときの動きをいい感じにする- もともとは本来は
(kbd "<backtab>")
として設定されているのだけれど、私が使っているmacOSのEmacsでは動作しないので明示的に設定した
- もともとは本来は
あとは私は長年Markdown で表(テーブル)を描くの設定を使ってorg-table-mode(orgtbl)をむりやり使ってたのですが… 2017年にMarkdown Modeに実装されていたことをたったいま知りました。
スクリーンショット
- macOS上のEmacs Plus 29.1を全画面で使っています
- カラーテーマはmodus-themesに含まれる
modus-vivendi
を使っています - 画面の文字がある領域の幅が狭いのはwriteroom-modeによるものです
というわけで、EmacsでばりばりMarkdownを弄れるようになりました。
俺たちの執筆道はこれからだ!
みなさまもよい年末を🎉