Markdown Mode 2.3 Release Notes
Markdown Mode for Emacs version 2.3 was released on August 31, 2017. This is a major new stable release and all users are encouraged to upgrade. The many new features and bug fixes included are described below. See the Git repository or the commit-specific links below for a detailed history of changes. Thanks to everyone who submitted bug reports, feature suggestions, and especially patches.
The major new features are the following (but see the release notes below for complete details):
- Native font lock and indirect editing for fenced code blocks.
- Hidden markup mode and URL hiding.
- Interactive image and link insertion commands.
- New text style insertion keybindings.
- Many new movement, marking, narrowing commands.
- Clickable links.
The Guide to Markdown Mode for Emacs is now also available at Leanpub to supplement the existing documentation. It contains in-depth discussions of advanced movement and editing commands, configuration examples, tips and tricks, and a survey of other packages that work with Markdown Mode.
Breaking changes:
markdown-mode
now requires Emacs 24.3 or later.- Markup insertion and replacement keybindings under C-c C-s (s for style) have been revised to make them easier to remember. Now, when the prefix C-c C-s is pressed, a short minibuffer help prompt is presented as a reminder of a few of the most frequently used keys. The major changes are that bold is now inserted with b (previously s) and italic is now i (previously e). As a result, blockquote is now q (previously b) and strikethrough markup is inserted with s (previously d). Press C-c C-s C-h for a complete list of markup insertion keybindings. Heading insertion commands are also now under C-c C-s.
- Link insertion and editing has been consolidated into one
command,
markdown-insert-link
, bound to C-c C-l. As such, the previous separate link insertion keybindings have been removed: C-c C-a l, C-c C-a L, C-c C-a r, and C-c C-a u. - Image insertion and editing has been consolidated into one
command,
markdown-insert-image
, bound to C-c C-i. As such, the previous separate image insertion keybindings have been removed: C-c C-i i and C-c C-i I. - Footnote and wiki link insertion have been moved to the markup insertion prefix, as C-c C-s f and C-c C-s w.
- The list and outline editing commands have been removed from the top-level positions (previously M-LEFT, M-RIGHT, M-UP, M-DOWN) and moved to major mode keybindings under C-c to C-c LEFT, C-c RIGHT, C-c UP, and C-c DOWN, respectively. (GH–164)
- The list and outline editing commands have also been unified so that they all operate on entire subtrees of list items and subtrees of atx headings, symmetrically. Previously there were separate commands for editing heading subtrees, but promoting a single section is easy enough by directly inserting or removing a hash mark or using the markup replacement commands.
- Jumping between references and reference definitions via
markdown-jump
, previously bound to C-c C-l, has been moved to C-c C-d and rebranded asmarkdown-do
, which attempts to do something sensible with the object at the point. - Rename internal
markdown-link-link
tomarkdown-link-url
for clarity. - The old inline image toggling command C-c C-i C-t has been removed and replaced C-c C-x C-i in order to allow for the new interactive image insertion command at C-c C-i. Toggling keybindings are currently being grouped under C-c C-x.
markdown-blockquote-face
is now applied to the entire blockquote, including the leading>
, so it can be used to apply a background if desired.- In
markdown-regex-header
, groups 4 and 6 now include whitespace surrounding hash marks in atx headings. - Font lock for
~~strikethrough~~
is now supported inmarkdown-mode
in addition togfm-mode
. - Introduced a new face for horizontal rules:
markdown-hr-face
. Previously,markdown-header-delimiter-face
was used. - Markdown Mode is now distributed under the GNU GPL version 3 or later.
- Rename
markdown-fill-forward-paragraph-function
tomarkdown-fill-forward-paragraph
. - Rename
markdown-footnote-face
tomarkdown-footnote-marker-face
. - Functions
markdown-insert-inline-link-dwim
andmarkdown-insert-reference-link-dwim
have been combined and replaced withmarkdown-insert-link
. - Functions
markdown-exdent-region
andmarkdown-exdent-or-delete
are now namedmarkdown-outdent-region
andmarkdown-outdent-or-delete
, respectively. - The non-interactive image insertion commands have been
refactored to mirror the corresponding link insertion
commands.
markdown-insert-image
(for inline images) has been renamedmarkdown-insert-inline-image
and it now takes three arguments (previously one optional argument).markdown-insert-reference-image
now takes four arguments (previously none).
New features:
- Markup hiding: Add a custom variable
markdown-hide-markup
, which determines whether to hide or otherwise beautify Markdown markup. For example, for inline links the brackets, URL, and title will be hidden and only the (clickable) link text will remain. The URL can be seen by hovering with the mouse pointer and edited by deleting one of the invisible brackets or parentheses. This can be toggled interactively using C-c C-x C-m (markdown-toggle-markup-hiding
). This setting supersedes URL hiding (below). (GH–130) - Unicode bullets are used to replace ASCII list item markers
for unordered lists when markup hiding is enabled. The list
of characters used, in order of list level, can be specified
by setting the variable
markdown-list-item-bullets
. (GH–130) - When markup hiding is enabled, the characters used for
replacing certain markup can be changed by customizing the
corresponding variables:
markdown-blockquote-display-char
,markdown-hr-display-char
, andmarkdown-definition-display-char
. - URL and reference label hiding: URLs for inline links and
labels for reference links can now be hidden if desired. This is
configurable via
markdown-hide-urls
. URLs will appear as[link](∞)
instead of[link](http://perhaps.a/very/long/url/)
. To change the placeholder character used, setmarkdown-url-compose-char
. This feature can be toggled using C-c C-x C-l (markdown-toggle-url-hiding
). If full markup hiding (above) is enabled, then URL hiding has no additional effect. - Native code block font-lock: Add a custom variable
markdown-fontify-code-blocks-natively
, which determines whether to fontify code in code blocks using the native major mode. This only works for fenced code blocks where the language is specified where we can automatically determine the appropriate mode to use. The language to mode mapping may be customized by setting the variablemarkdown-code-lang-modes
. (GH–123, GH–185) - When the
edit-indirect
package is installed, C-c ’ (markdown-edit-code-block
) can be used to edit a code block in an indirect buffer in the native major mode. Press C-c C-c to commit changes and return or C-c C-k to cancel. - Add command C-c C-x C-f for toggling native font lock
for code blocks (
markdown-toggle-fontify-code-blocks-natively
). - Add “page” movement, marking, and narrowing commands, where a
“page” in Markdown is defined to be a top-level subtree:
markdown-forward-page
(C-x ]),markdown-backward-page
(C-x [),markdown-mark-page
(C-x C-p), andmarkdown-narrow-to-page
(C-x n p). (GH–191) - Add subtree marking and narrowing functions:
markdown-mark-subtree
(C-c C-M-h) andmarkdown-narrow-to-subtree
(C-x n s). (GH–191) - Add syntax-aware Markdown paragraph movement commands:
M-{ (
markdown-backward-paragraph
) and M-} (markdown-forward-paragraph
). To mark a paragraph, use M-h (markdown-mark-paragraph
). These move at a more granular level than the block movement commands. (GH–191) - The previous block movement and marking commands are now at C-M-{, C-M-}, and C-c M-h. In terms of lists, paragraph movement commands now stop at each list item while block commands move over entire lists. (GH–191)
- Add
subtree
as a possible value formarkdown-reference-location
andmarkdown-footnote-location
. - Ask flyspell to ignore words in URLs, code fragments, comments, and reference labels.
- Make inline links, reference links, angle bracket URLs, and plain URLs clickable.
- Add an additional keybinding for toggling inline image display, C-c C-x C-i.
- Add a keybinding for toggling LaTeX math (_e_quation) support: C-c C-x C-e.
- Support Leanpub blocks (asides, info blocks, warnings, etc.). These are simple extensions of the usual blockquote syntax.
- Font lock, with markup hiding, for subscripts (e.g.,
H~2~0
) and superscripts (e.g.,334^10^
). Thanks to Syohei Yoshida for a patch on which this is based. (GH–134) - Add basic font-lock support for inline attribute lists or inline identifiers used by Pandoc, Python Markdown, PHP Markdown Extra, Leanpub, etc.
- Add basic font-lock support for Leanpub section identifiers and page breaks.
- Add basic font-lock support for common file inclusion syntax:
<<(file)
,<<[title](file)
,<<[file]
, and<<{file}
. - Add font lock support for Pandoc inline footnotes. (GH–81)
- Raise footnote markers and inline footnote text, and optionally hide markup.
- Filling with now respects Pandoc line blocks. (GH–144)
- Add interactive link editing and insertion command
markdown-insert-link
. (GH–199) - Added C-c C-d,
markdown-do
, which is a replacement for C-c C-l,markdown-jump
. In addition to jumping between reference/footnote labels and definitions, it also toggles GFM checkboxes. - Outline movement keys C-c C-p, C-c C-n, C-c C-f, C-c C-b, and C-c C-u now move between list items, when the point is in a list, and move between headings otherwise.
- New customization option
markdown-spaces-after-code-fence
to control the number of spaces inserted after a code fence (```
). Thanks to Philipp Stephani for a patch. - New customization option
markdown-gfm-uppercase-checkbox
which, when non-nil, uses[X]
to complete task list items instead of[x]
. Thanks to Paul Rankin for a patch. (GH–236) - Add prefix-specific prompts for styles (
C-c C-s
) and toggles (C-c C-x
). These may be disabled if desired by settingmarkdown-enable-prefix-prompts
tonil
.
- Markup hiding: Add a custom variable
Improvements:
- Document customizable variables added in version 2.2 with
:package-version
tags. - Better consistency of function names: predicate functions
ending in
-p
shouldn’t modify match data. - Generalize rebinding of paragraph movement commands in case users
have customized
{forward,backward,mark}-paragraph
bindings. - Adjust point so that it is left at beginning of setext headings in heading navigation commands.
- Prevent inline link matching in code blocks.
- When inserting a new reference definition, don’t add blank line after existing reference definitions.
markdown-toggle-inline-images
now displays the status in the minibuffer.- Increased default heading scaling range slightly, to make level differences more pronounced when markup is hidden.
- Reuse existing windows, when possible, rather than splitting again in preferred direction. (GH–129)
- Update known languages in
markdown-gfm-recognized-languages
. - Filling with
fill-region
now leaves code blocks unmodified. (GH–192) - Avoid error when live-previewing a buffer that’s not visiting a file. Thanks to Tianxiang Xiong for a patch. (GH–200, GH–201)
- Adaptive filling for Leanpub blocks.
- Set variable
comment-use-syntax
. (GH–213) - Support
electric-quote-inhibit-functions
for inhibiting electric quoting in code spans and blocks. Thanks to Philipp Stephani for patches to both Emacs and Markdown Mode. (GH–220) - Stop inhibiting line breaks inside links when filling. (GH–173)
- Document customizable variables added in version 2.2 with
Bug fixes:
- Fix spurious bold/italic faces in inline code. (GH–172)
- Fix defun movement at end of buffer. (GH–197)
- Fix bug with adjacent bold font-locking in a list item. (GH–176)
- Prevent matching italics, bold, and inline code in comments.
- Prevent matching italics and bold in URLs.
- Prevent matching links in inline code or comment spans.
- Avoid infinite loop when promoting or demoting last section in a buffer.
- Fix font lock for subsequent inline links after a malformed inline link. (GH–209)
- Prevent clobbering match data in
markdown-font-lock-extend-region-function
. Thanks to Philipp Stephani for a patch. (GH–221) - Fix incorrect indentation of inserted GFM code blocks in lists. Thanks to Philipp Stephani for a patch. (GH–215)
- Fix an issue with font lock for headings with code blocks immediately afterwards, without whitespace. (GH–234)