200ok-ch/counsel-jq@f5bfed8 -> 200ok-ch/counsel-jq@153d70b Andersbakken/rtags@63a7d9b -> Andersbakken/rtags@aa4c827 MatthewFluet/company-mlton@b87e363 -> MatthewFluet/company-mlton@9b09d20 NixOS/nix-mode@e32c6bf -> NixOS/nix-mode@0023fc5 OmniSharp/omnisharp-emacs@e26ff8b -> OmniSharp/omnisharp-emacs@8ec5929 ProofGeneral/PG@702f5b9 -> ProofGeneral/PG@bdb6782 Wilfred/elisp-def@da1f763 -> Wilfred/elisp-def@dfca043 agda/agda@5070bd8 -> agda/agda@9d08edb ananthakumaran/exunit.el@c77b039 -> ananthakumaran/exunit.el@5bb115f ananthakumaran/tide@a43a37b -> ananthakumaran/tide@7f7334b asok/projectile-rails@7a256b1 -> asok/projectile-rails@8d6b373 brotzeit/rustic@f7d5ac0 -> brotzeit/rustic@61d600e clojure-emacs/cider@1a34f89 -> clojure-emacs/cider@815204f clojure-emacs/clj-refactor.el@9dcc50d -> clojure-emacs/clj-refactor.el@b24ce76 clojure-emacs/clojure-mode@53ef8ac -> clojure-emacs/clojure-mode@f26379b crystal-lang-tools/emacs-crystal-mode@f9e4db1 -> crystal-lang-tools/emacs-crystal-mode@1599814 cython/cython@17e03b8 -> cython/cython@9a761a6 dgutov/robe@f04dcc7 -> dgutov/robe@3ef165c diml/utop@7bc5117) -> diml/utop@a5ff52b) dominikh/go-mode.el@fdf46fe -> dominikh/go-mode.el@49a5380 elixir-editors/emacs-elixir@b78e7f7 -> elixir-editors/emacs-elixir@9de08c1 emacs-csharp/csharp-mode@4916829 -> emacs-csharp/csharp-mode@09b4d57 emacs-ess/ESS@d013616 -> emacs-ess/ESS@5169b0d emacs-lsp/lsp-dart@b81b1ec -> emacs-lsp/lsp-dart@71902ca emacs-lsp/lsp-haskell@4d85cb3 -> emacs-lsp/lsp-haskell@7efbef3 emacs-lsp/lsp-java@f43b00a -> emacs-lsp/lsp-java@5f6d357 emacs-lsp/lsp-metals@31dafff -> emacs-lsp/lsp-metals@c76eeb6 emacs-lsp/lsp-pyright@71ff088 -> emacs-lsp/lsp-pyright@65fb141 emacs-lsp/lsp-python-ms@5470ada -> emacs-lsp/lsp-python-ms@689f6cf emacs-lsp/lsp-sourcekit@948c3a3 -> emacs-lsp/lsp-sourcekit@ff204ed emacs-php/php-mode@7e5722c -> emacs-php/php-mode@8cdc727 emacs-straight/auctex@fb062a3 -> emacs-straight/auctex@384c4b9 emacs-straight/csv-mode@eb3ec00 -> emacs-straight/csv-mode@8da54e8 emacs-straight/org-mode@9e98e9a -> emacs-straight/org-mode@0b117f7 emacs-typescript/typescript.el@54f14c4 -> emacs-typescript/typescript.el@1043025 emacsmirror/cmake-mode@e58c411 -> emacsmirror/cmake-mode@d5d77de ericdallo/hover.el@3f07a18 -> ericdallo/hover.el@c9c0593 erlang/otp@8fc0641 -> erlang/otp@af06b43 eschulte/jump.el@e4f1372 -> eschulte/jump.el@55caa66 ethereum/emacs-solidity@d166a86 -> ethereum/emacs-solidity@b4fd719 factor/factor@94a922a -> factor/factor@1928e60 fsharp/emacs-fsharp-mode@13fbf4c -> fsharp/emacs-fsharp-mode@78898a1 fxbois/web-mode@890e837 -> fxbois/web-mode@8ef4793 godotengine/emacs-gdscript-mode@75fe658 -> godotengine/emacs-gdscript-mode@16c631c greghendershott/racket-mode@3563081 -> greghendershott/racket-mode@75ea8f6 haskell/haskell-mode@0d39c84 -> haskell/haskell-mode@3a019e6 hhvm/hack-mode@9079bc3) -> hhvm/hack-mode@847fd91) hvesalai/emacs-scala-mode@9d3b56e -> hvesalai/emacs-scala-mode@402d6df idris-hackers/idris-mode@b77eadd -> idris-hackers/idris-mode@80aabd2 immerrr/lua-mode@d2ff304 -> immerrr/lua-mode@2d9a468 iyefrat/evil-tex@ac313ef -> iyefrat/evil-tex@5f0d6fb jaor/geiser@cd00be6 -> jaor/geiser@26dd2f4 jcollard/elm-mode@363da4b -> jcollard/elm-mode@188b9c7 joaotavora/sly@3278819 -> joaotavora/sly@fb84318 jorgenschaefer/emacs-buttercup@2f24a44 -> jorgenschaefer/emacs-buttercup@1de6be4 jrblevin/markdown-mode@dcad557 -> jrblevin/markdown-mode@0517340 jwiegley/emacs-async@14f48de -> jwiegley/emacs-async@d7e7f79 jyp/attrap@9c88154 -> jyp/attrap@778382e jyp/dante@e2acbf6 -> jyp/dante@7b1ab64 kaushalmodi/ox-hugo@04f41ca -> kaushalmodi/ox-hugo@a05667e leanprover/lean-mode@cc1f5fa -> leanprover/lean-mode@15bee87 ledger/ledger-mode@805507f -> ledger/ledger-mode@3495d12 mooz/js2-mode@f7816bd -> mooz/js2-mode@29979e5 nonsequitur/inf-ruby@b012457 -> nonsequitur/inf-ruby@1fc972e ocaml-ppx/ocamlformat@860266b -> ocaml-ppx/ocamlformat@7db8d13 ocaml/dune@4d097cd -> ocaml/dune@f839fc1 ocaml/merlin@28193d5 -> ocaml/merlin@36d0aef pezra/rspec-mode@f1029ca -> pezra/rspec-mode@92ef785 polymode/poly-R@51ffeb6 -> polymode/poly-R@c42ff3a polymode/polymode@3284ff1 -> polymode/polymode@b3871e9 purescript-emacs/psc-ide-emacs@663f4e2 -> purescript-emacs/psc-ide-emacs@ce97d71 purescript-emacs/purescript-mode@154ad16 -> purescript-emacs/purescript-mode@8410baf pwalsh/pipenv.el@f516a1a -> pwalsh/pipenv.el@8f50c68 pythonic-emacs/anaconda-mode@b1875a5 -> pythonic-emacs/anaconda-mode@081f9d8 racer-rust/emacs-racer@a0bdf77 -> racer-rust/emacs-racer@f17f9d7 rubocop-hq/rubocop-emacs@03bf155 -> rubocop-hq/rubocop-emacs@1372ee3 seagle0128/grip-mode@91da46f -> seagle0128/grip-mode@1aebf9c senny/rvm.el@b2498a4 -> senny/rvm.el@c1f2642 swift-emacs/swift-mode@0bc8d8d -> swift-emacs/swift-mode@95ff004 takaxp/org-tree-slide@04b5a9d -> takaxp/org-tree-slide@c9487e5 technomancy/fennel-mode@fa56106 -> technomancy/fennel-mode@bebc9dd tpapp/julia-repl@d073acb -> tpapp/julia-repl@7ce38a9 wbolster/emacs-python-pytest@3fadf1f -> wbolster/emacs-python-pytest@31ae5e0 wwwjfy/emacs-fish@db257db -> wwwjfy/emacs-fish@a7c953b Fix #4695 Close #4529 Close #4576
lang/markdown
Description
This module provides Markdown support for Emacs.
Markdown is a text-to-HTML conversion tool for web writers. Markdown allows you to write using an easy-to-read, easy-to-write plain text format, then convert it to structurally valid XHTML (or HTML).
Thus, “Markdown” is two things: (1) a plain text formatting syntax; and (2) a software tool, written in Perl, that converts the plain text formatting to HTML. See the Syntax page for details pertaining to Markdown’s formatting syntax. You can try it out, right now, using the online Dingus.
The overriding design goal for Markdown’s formatting syntax is to make it as readable as possible. The idea is that a Markdown-formatted document should be publishable as-is, as plain text, without looking like it’s been marked up with tags or formatting instructions. While Markdown’s syntax has been influenced by several existing text-to-HTML filters, the single biggest source of inspiration for Markdown’s syntax is the format of plain text email. – John Gruber
Module Flags
+grip
Enables grip support (on<localleader> p
), to provide live github-style previews of your markdown (or org) files.
Plugins
- markdown-mode
- markdown-toc
Hacks
- Flyspell has been configured not to spell check in code blocks, links, HTML tags or references.
Prerequisites
This module has two soft dependencies: a linter and a compiler (for previewing markdown).
Linters
Out of the box, flycheck recognizes these checkers for markdown-mode and gfm-mode:
-
Markdown-specific
- markdownlint (
npm install markdownlint
) - mdl (
gem install mdl
)
- markdownlint (
-
General (natural language)
Markdown preview
This module requires a markdown compiler in order for markdown-preview
to
work. It will recognize and use one of the following executables, in this order
(you only need one):
- markedjs: a markdown compiler "built for speed"
- pandoc: the universal markup transpiler
-
markdown: there are various flavors of this compiler. This module will look for these two:
- John Gruber's original perl script
- The C implementation called discount, by David Parsons
- multimarkdown: a compiler for a language that is a superset of Markdown, with additional output formats and features.
MarkedJS
Not to be confused with the Marked 2 app, marked is an npm package:
npm install -g marked
Pandoc
Pandoc is the universal markup transpiler. It should be available through your system package manager. For example:
- MacOS:
brew install pandoc
- Arch Linux:
pacman -S pandoc
Markdown
The C implementation of Markdown.pl, called discount
, is available through
your OS's package manager:
- MacOS:
brew install discount
- Arch Linux:
pacman -S discount
The original perl script that discount is inspired from can be found on John Gruber's website.
MultiMarkdown
See its documentation for details on what MultiMarkdown is. The compiler can be installed through your OS's package manager:
- MacOS:
brew install multimarkdown
- Arch Linux: multimarkdown is available on the AUR
Features
Markdown preview
markdown-preview
is bound to <localleader> p
. This will open a preview of
your compiled markdown document in your browser.
Alternatively, you can use grip-mode
through +grip
.
Configuration
Changing how markdown is compiled
When markdown-preview
is invoked (<localleader> p
) it consults
markdown-command
. Its default value (#'+markdown-compile
) will consult
+markdown-compile-functions
: a list of functions that take three arguments: the
start and end point in the current buffer to use as input, and an output buffer
to insert the result in.
By default, the value of +markdown-compile-functions
is:
'(+markdown-compile-marked
+markdown-compile-pandoc
+markdown-compile-markdown
+markdown-compile-multimarkdown)
These functions will attempt to use the marked, pandoc and markdown executables, if available. Changing this variable will control how markdown is compiled.
;; Add a new one
(add-hook '+markdown-compile-functions #'my-compile-function)
;; Or remove an existing one
(remove-hook '+markdown-compile-functions #'+markdown-compile-markdown)
Otherwise, you can change markdown-command
directly:
(setq markdown-command "markdown | smartypants")