diff --git a/modules/lang/markdown/README.org b/modules/lang/markdown/README.org index 72ea069d0..dc2e4660c 100644 --- a/modules/lang/markdown/README.org +++ b/modules/lang/markdown/README.org @@ -33,11 +33,16 @@ for Markdown's syntax is the format of plain text email. -- John Gruber - +grip :: Enable [[https://github.com/seagle0128/grip-mode][grip support]] (on [[kbd:][ p]]), to provide live github-style previews of your markdown (or org) files. +- +tree-sitter :: + Enable tree-sitter support for Markdown files. Note that tree-sitter support + on Emacs 31 is superior to 30 and under. Requires the [[doom-module::tools + tree-sitter]] module. ** Packages - [[doom-package:edit-indirect]] - [[doom-package:evil-markdown]] if [[doom-module::editor evil +everywhere]] - [[doom-package:grip-mode]] if [[doom-module:+grip]] +- [[doom-package:markdown-ts-mode]] if [[doom-module:+tree-sitter]] - [[doom-package:markdown-mode]] - [[doom-package:markdown-toc]] diff --git a/modules/lang/markdown/config.el b/modules/lang/markdown/config.el index 8df215bca..6f5e2111e 100644 --- a/modules/lang/markdown/config.el +++ b/modules/lang/markdown/config.el @@ -126,6 +126,23 @@ capture, the end position, and the output buffer.") :desc "GFM checkbox" "x" #'markdown-toggle-gfm-checkbox))) +(use-package! markdown-ts-mode + :when (modulep! +tree-sitter) + :when (fboundp 'markdown-ts-mode) + :defer t + :init + (set-tree-sitter! 'markdown-mode 'markdown-ts-mode + '((markdown :url "https://github.com/tree-sitter-grammars/tree-sitter-markdown" + :rev "v0.4.1" + :source-dir "tree-sitter-markdown-inline/src") + (markdown-inline :url "https://github.com/tree-sitter-grammars/tree-sitter-markdown" + :rev "v0.4.1" + :source-dir "tree-sitter-markdown-inline/src"))) + + :config + (cl-callf2 delete '("\\.md\\'" . markdown-ts-mode) auto-mode-alist)) + + (use-package! evil-markdown :when (modulep! :editor evil +everywhere) :hook (markdown-mode . evil-markdown-mode) diff --git a/modules/lang/markdown/doctor.el b/modules/lang/markdown/doctor.el index 6a2d39231..3617565de 100644 --- a/modules/lang/markdown/doctor.el +++ b/modules/lang/markdown/doctor.el @@ -1,6 +1,10 @@ ;; -*- lexical-binding: t; no-byte-compile: t; -*- ;;; lang/markdown/doctor.el +(assert! (or (not (modulep! +tree-sitter)) + (modulep! :tools tree-sitter)) + "This module requires (:tools tree-sitter)") + (when (require 'markdown-mode nil t) (cond ((eq markdown-command #'+markdown-compile) (unless (cl-loop for (exe . cmd) in (list (cons "marked" '+markdown-compile-marked) diff --git a/modules/lang/markdown/packages.el b/modules/lang/markdown/packages.el index 9f3521546..ae6542d1f 100644 --- a/modules/lang/markdown/packages.el +++ b/modules/lang/markdown/packages.el @@ -8,6 +8,11 @@ ;; present when you call `markdown-edit-code-block'. (package! edit-indirect :pin "82a28d8a85277cfe453af464603ea330eae41c05") +(when (modulep! +tree-sitter) + (package! markdown-ts-mode + :built-in 'prefer ; Emacs 31+ has a superior markdown-ts-mode + :pin "2f1ee8b94cdf53cebc31ae08ecfbba846193d5e1")) + (when (modulep! +grip) (package! grip-mode :pin "96a927dce69d7607b981d7754cf8b415ebf9d6a8"))