markdown-mode is a major mode for editing Markdown-formatted text. The latest stable version is markdown-mode 2.1, released on January 9, 2016. See the release notes for details. markdown-mode is free software, licensed under the GNU GPL.
The recommended way to install markdown-mode is to install the package
from MELPA Stable
using package.el
. First, configure package.el
and the MELPA Stable
repository by adding the following to your .emacs
, init.el
,
or equivalent startup file:
(require 'package)
(add-to-list 'package-archives
'("melpa-stable" . "https://stable.melpa.org/packages/"))
(package-initialize)
Then, after restarting Emacs or evaluating the above statements, issue
the following command: M-x package-install RET markdown-mode RET.
When installed this way, the major modes markdown-mode
and gfm-mode
will be autoloaded and markdown-mode
will be used for file names
ending in either .md
or .markdown
.
Alternatively, if you manage loading packages with use-package
then you can automatically install and configure markdown-mode
by
adding a declaration such as this one to your init file (as an
example; adjust settings as desired):
(use-package markdown-mode
:ensure t
:commands (markdown-mode gfm-mode)
:mode (("README\\.md\\'" . gfm-mode)
("\\.md\\'" . markdown-mode)
("\\.markdown\\'" . markdown-mode))
:init (setq markdown-command "multimarkdown"))
Direct Download
Alternatively you can manually download and install markdown-mode.
First, download the latest stable version and
save the file where Emacs can find it (i.e., a directory in your
load-path
). You can then configure markdown-mode
and gfm-mode
to load automatically by adding the following to your init file:
(autoload 'markdown-mode "markdown-mode"
"Major mode for editing Markdown files" t)
(add-to-list 'auto-mode-alist '("\\.markdown\\'" . markdown-mode))
(add-to-list 'auto-mode-alist '("\\.md\\'" . markdown-mode))
(autoload 'gfm-mode "markdown-mode"
"Major mode for editing GitHub Flavored Markdown files" t)
(add-to-list 'auto-mode-alist '("README\\.md\\'" . gfm-mode))
Development Version
To follow or contribute to markdown-mode development, you can browse or clone the Git repository on GitHub:
git clone https://github.com/jrblevin/markdown-mode.git
If you prefer to install and use the development version, which may become unstable at some times, you can either clone the Git repository as above or install markdown-mode from MELPA.
If you clone the repository directly, then make sure that Emacs can find it by adding the following line to your startup file:
(add-to-list 'load-path "/path/to/markdown-mode/repository")
Packaged Installation
markdown-mode is also available in several package managers. You may want to confirm that the package you install contains the latest stable version first (and please notify the package maintainer if not).
- Debian Linux: elpa-markdown-mode and emacs-goodies-el
- Ubuntu Linux: elpa-markdown-mode and emacs-goodies-el
- RedHat and Fedora Linux: emacs-goodies
- NetBSD: textproc/markdown-mode
- MacPorts: markdown-mode.el (pending)
- FreeBSD: textproc/markdown-mode.el
Dependencies
markdown-mode
depends on cl-lib
, which has been bundled with
GNU Emacs since 24.3. Users of GNU Emacs 24.1 and 24.2 can install
cl-lib
with package.el
.
Keybindings are grouped by prefixes based on their function. For
example, the commands for inserting links are grouped under C-c C-a
, where the C-a is a mnemonic for the HTML <a>
tag. In
other cases, the connection to HTML is not direct. For example,
commands dealing with headings begin with C-c C-t (mnemonic:
titling). The primary commands in each group will are described
below. You can obtain a list of all keybindings by pressing C-c C-h
. Movement and shifting commands tend to be associated with
paired delimiters such as M-{ and M-} or C-c < and C-c >.
Outline navigation keybindings the same as in org-mode
. Finally,
commands for running Markdown or doing maintenance on an open file
are grouped under the C-c C-c prefix. The most commonly used
commands are described below. You can obtain a list of all
keybindings by pressing C-c C-h.
-
Hyperlinks: C-c C-a
In this group, C-c C-a l inserts an inline link of the form
[text](url)
. The link text is determined as follows. First, if there is an active region (i.e., when transient mark mode is on and the mark is active), use it as the link text. Second, if the point is at a word, use that word as the link text. In these two cases, the original text will be replaced with the link and point will be left at the position for inserting a URL. Otherwise, insert empty link markup and place the point for inserting the link text.C-c C-a L inserts a reference link of the form
[text][label]
and, optionally, a corresponding reference label definition. The link text is determined in the same way as with an inline link (using the region, when active, or the word at the point), but instead of inserting empty markup as a last resort, the link text will be read from the minibuffer. The reference label will be read from the minibuffer in both cases, with completion from the set of currently defined references. To create an implicit reference link, press RET to accept the default, an empty label. If the entered referenced label is not defined, additionally prompt for the URL and (optional) title. If a URL is provided, a reference definition will be inserted in accordance withmarkdown-reference-location
. If a title is given, it will be added to the end of the reference definition and will be used to populate the title attribute when converted to XHTML.C-c C-a u inserts a bare url, delimited by angle brackets. When there is an active region, the text in the region is used as the URL. If the point is at a URL, that url is used. Otherwise, insert angle brackets and position the point in between them for inserting the URL.
C-c C-a f inserts a footnote marker at the point, inserts a footnote definition below, and positions the point for inserting the footnote text. Note that footnotes are an extension to Markdown and are not supported by all processors.
C-c C-a w behaves much like the inline link insertion command and inserts a wiki link of the form
[[WikiLink]]
. If there is an active region, use the region as the link text. If the point is at a word, use the word as the link text. If there is no active region and the point is not at word, simply insert link markup. Note that wiki links are an extension to Markdown and are not supported by all processors. -
Images: C-c C-i
C-c C-i i inserts markup for an inline image, using the active region or the word at point, if any, as the alt text. C-c C-i I behaves similarly and inserts a reference-style image.
Local images associated with image links may be displayed inline in the buffer by pressing C-c C-i C-t (
markdown-toggle-inline-images
). This is a toggle command, so pressing this once again will remove inline images. -
Styles: C-c C-s
C-c C-s e inserts markup to make a region or word italic (e for
<em>
or emphasis). If there is an active region, make the region italic. If the point is at a non-italic word, make the word italic. If the point is at an italic word or phrase, remove the italic markup. Otherwise, simply insert italic delimiters and place the cursor in between them. Similarly, use C-c C-s s for bold (<strong>
), C-c C-s c for inline code (<code>
), and C-c C-s k for inserting<kbd>
tags.C-c C-s b inserts a blockquote using the active region, if any, or starts a new blockquote. C-c C-s C-b is a variation which always operates on the region, regardless of whether it is active or not. The appropriate amount of indentation, if any, is calculated automatically given the surrounding context, but may be adjusted later using the region indentation commands.
C-c C-s p behaves similarly for inserting preformatted code blocks, with C-c C-s C-p being the region-only counterpart.
-
Headings: C-c C-t
All heading insertion commands use the text in the active region, if any, as the heading text. Otherwise, if the current line is not blank, they use the text on the current line. Finally, the setext commands will prompt for heading text if there is no active region and the current line is blank.
C-c C-t h inserts a heading with automatically chosen type and level (both determined by the previous heading). C-c C-t H behaves similarly, but uses setext (underlined) headings when possible, still calculating the level automatically. In cases where the automatically-determined level is not what you intended, the level can be quickly promoted or demoted (as described below). Alternatively, a C-u prefix can be given to insert a heading promoted by one level or a C-u C-u prefix can be given to insert a heading demoted by one level.
To insert a heading of a specific level and type, use C-c C-t 1 through C-c C-t 6 for atx (hash mark) headings and C-c C-t ! or C-c C-t @ for setext headings of level one or two, respectively. Note that ! is S-1 and @ is S-2.
If the point is at a heading, these commands will replace the existing markup in order to update the level and/or type of the heading. To remove the markup of the heading at the point, press C-c C-k to kill the heading and press C-y to yank the heading text back into the buffer.
-
Horizontal Rules: C-c -
C-c - inserts a horizontal rule. By default, insert the first string in the list
markdown-hr-strings
(the most prominent rule). With a C-u prefix, insert the last string. With a numeric prefix N, insert the string in position N (counting from 1). -
Markdown and Maintenance Commands: C-c C-c
Compile: C-c C-c m will run Markdown on the current buffer and show the output in another buffer. Preview: C-c C-c p runs Markdown on the current buffer and previews, stores the output in a temporary file, and displays the file in a browser. Export: C-c C-c e will run Markdown on the current buffer and save the result in the file
basename.html
, wherebasename
is the name of the Markdown file with the extension removed. Export and View: press C-c C-c v to export the file and view it in a browser. Open: C-c C-c o will open the Markdown source file directly usingmarkdown-open-command
. Live Export: Press C-c C-c l to turn onmarkdown-live-preview-mode
to view the exported output side-by-side with the source Markdown. For all export commands, the output file will be overwritten without notice.markdown-live-preview-window-function
can be customized to open in a browser other thaneww
.To summarize:
- C-c C-c m:
markdown-command
>*markdown-output*
buffer. - C-c C-c p:
markdown-command
> temporary file > browser. - C-c C-c e:
markdown-command
>basename.html
. - C-c C-c v:
markdown-command
>basename.html
> browser. - C-c C-c w:
markdown-command
> kill ring. - C-c C-c o:
markdown-open-command
. - C-c C-c l:
markdown-live-preview-mode
>*eww*
buffer.
C-c C-c c will check for undefined references. If there are any, a small buffer will open with a list of undefined references and the line numbers on which they appear. In Emacs 22 and greater, selecting a reference from this list and pressing RET will insert an empty reference definition at the end of the buffer. Similarly, selecting the line number will jump to the corresponding line.
C-c C-c n renumbers any ordered lists in the buffer that are out of sequence.
C-c C-c ] completes all headings and normalizes all horizontal rules in the buffer.
- C-c C-c m:
-
Following Links: C-c C-o
Press C-c C-o when the point is on an inline or reference link to open the URL in a browser. When the point is at a wiki link, open it in another buffer (in the current window, or in the other window with the C-u prefix). Use M-p and M-n to quickly jump to the previous or next link of any type.
-
Jumping: C-c C-l
Use C-c C-l to jump from the object at point to its counterpart elsewhere in the text, when possible. Jumps between reference links and definitions; between footnote markers and footnote text. If more than one link uses the same reference name, a new buffer will be created containing clickable buttons for jumping to each link. You may press TAB or S-TAB to jump between buttons in this window.
-
Promotion and Demotion: C-c C-- and C-c C-=
Headings, horizontal rules, and list items can be promoted and demoted, as well as bold and italic text. For headings, "promotion" means decreasing the level (i.e., moving from
<h2>
to<h1>
) while "demotion" means increasing the level. For horizontal rules, promotion and demotion means moving backward or forward through the list of rule strings inmarkdown-hr-strings
. For bold and italic text, promotion and demotion means changing the markup from underscores to asterisks. Press C-c C-- or M-LEFT to promote the element at the point if possible.To remember these commands, note that - is for decreasing the level (promoting), and = (on the same key as +) is for increasing the level (demoting). Similarly, the left and right arrow keys indicate the direction that the atx heading markup is moving in when promoting or demoting.
-
Completion: C-c C-]
Complete markup is in normalized form, which means, for example, that the underline portion of a setext header is the same length as the heading text, or that the number of leading and trailing hash marks of an atx header are equal and that there is no extra whitespace in the header text. C-c C-] completes the markup at the point, if it is determined to be incomplete.
-
Editing Lists: M-RET, M-UP, M-DOWN, M-LEFT, and M-RIGHT
New list items can be inserted with M-RET or C-c C-j. This command determines the appropriate marker (one of the possible unordered list markers or the next number in sequence for an ordered list) and indentation level by examining nearby list items. If there is no list before or after the point, start a new list. Prefix this command by C-u to decrease the indentation by one level. Prefix this command by C-u C-u to increase the indentation by one level.
Existing list items can be moved up or down with M-UP or M-DOWN and indented or exdented with M-RIGHT or M-LEFT.
-
Editing Subtrees: M-S-UP, M-S-DOWN, M-S-LEFT, and M-S-RIGHT
Entire subtrees of ATX headings can be promoted and demoted with M-S-LEFT and M-S-RIGHT, which mirror the bindings for promotion and demotion of list items. Similarly, subtrees can be moved up and down with M-S-UP and M-S-DOWN.
Please note the following "boundary" behavior for promotion and demotion. Any level-six headings will not be demoted further (i.e., they remain at level six, since Markdown and HTML define only six levels) and any level-one headings will promoted away entirely (i.e., heading markup will be removed, since a level-zero heading is not defined).
-
Shifting the Region: C-c < and C-c >
Text in the region can be indented or exdented as a group using C-c > to indent to the next indentation point (calculated in the current context), and C-c < to exdent to the previous indentation point. These keybindings are the same as those for similar commands in
python-mode
. -
Killing Elements: C-c C-k
Press C-c C-k to kill the thing at point and add important text, without markup, to the kill ring. Possible things to kill include (roughly in order of precedece): inline code, headings, horizonal rules, links (add link text to kill ring), images (add alt text to kill ring), angle URIs, email addresses, bold, italics, reference definitions (add URI to kill ring), footnote markers and text (kill both marker and text, add text to kill ring), and list items.
-
Outline Navigation: C-c C-n, C-c C-p, C-c C-f, C-c C-b, and C-c C-u
Navigation between headings is possible using
outline-mode
. Use C-c C-n and C-c C-p to move between the next and previous visible headings. Similarly, C-c C-f and C-c C-b move to the next and previous visible headings at the same level as the one at the point. Finally, C-c C-u will move up to a lower-level (higher precedence) visible heading. -
Movement by Paragraph or Block: M-{ and M-}
The definition of a "paragraph" is slightly different in markdown-mode than, say, text-mode, because markdown-mode supports filling for list items and respects hard line breaks, both of which break paragraphs. So, markdown-mode overrides the usual paragraph navigation commands M-{ and M-} so that with a C-u prefix, these commands jump to the beginning or end of an entire block of text, respectively, where "blocks" are separated by one or more lines.
-
Movement by Defun: C-M-a, C-M-e, and C-M-h
The usual Emacs commands can be used to move by defuns (top-level major definitions). In markdown-mode, a defun is a section. As usual, C-M-a will move the point to the beginning of the current or preceding defun, C-M-e will move to the end of the current or following defun, and C-M-h will put the region around the entire defun.
As noted, many of the commands above behave differently depending on whether Transient Mark mode is enabled or not. When it makes sense, if Transient Mark mode is on and the region is active, the command applies to the text in the region (e.g., C-c C-s s makes the region bold). For users who prefer to work outside of Transient Mark mode, since Emacs 22 it can be enabled temporarily by pressing C-SPC C-SPC. When this is not the case, many commands then proceed to look work with the word or line at the point.
When applicable, commands that specifically act on the region even
outside of Transient Mark mode have the same keybinding as their
standard counterpart, but the letter is uppercase. For example,
markdown-insert-blockquote
is bound to C-c C-s b and only acts on
the region in Transient Mark mode while markdown-blockquote-region
is bound to C-c C-s B and always applies to the region (when nonempty).
Note that these region-specific functions are useful in many cases where it may not be obvious. For example, yanking text from the kill ring sets the mark at the beginning of the yanked text and moves the point to the end. Therefore, the (inactive) region contains the yanked text. So, C-y followed by C-c C-s C-b will yank text and turn it into a blockquote.
markdown-mode attempts to be flexible in how it handles indentation. When you press TAB repeatedly, the point will cycle through several possible indentation levels corresponding to things you might have in mind when you press RET at the end of a line or TAB. For example, you may want to start a new list item, continue a list item with hanging indentation, indent for a nested pre block, and so on. Exdention is handled similarly when backspace is pressed at the beginning of the non-whitespace portion of a line.
markdown-mode supports outline-minor-mode as well as org-mode-style visibility cycling for atx- or hash-style headings. There are two types of visibility cycling: Pressing S-TAB cycles globally between the table of contents view (headings only), outline view (top-level headings only), and the full document view. Pressing TAB while the point is at a heading will cycle through levels of visibility for the subtree: completely folded, visible children, and fully visible. Note that mixing hash and underline style headings will give undesired results.
Although no configuration is necessary there are a few things that can be customized. The M-x customize-mode command provides an interface to all of the possible customizations:
-
markdown-command
- the command used to run Markdown (default:markdown
). This variable may be customized to pass command-line options to your Markdown processor of choice. -
markdown-command-needs-filename
- set to t ifmarkdown-command
does not accept standard input (default:nil
). Whennil
,markdown-mode
will pass the Markdown content tomarkdown-command
using standard input (stdin
). When set to t,markdown-mode
will pass the name of the file as the final command-line argument tomarkdown-command
. Note that in the latter case, you will only be able to runmarkdown-command
from buffers which are visiting a file. -
markdown-open-command
- the command used for calling a standalone Markdown previewer which is capable of opening Markdown source files directly (default:nil
). This command will be called with a single argument, the filename of the current buffer. A representative program is the Mac app Marked 2, a live-updating Markdown previewer which can be called from a simple shell script. -
markdown-hr-strings
- list of strings to use when inserting horizontal rules. Different strings will not be distinguished when converted to HTML--they will all be converted to<hr/>
--but they may add visual distinction and style to plain text documents. To maintain some notion of promotion and demotion, keep these sorted from largest to smallest. -
markdown-bold-underscore
- set to a non-nil value to use two underscores when inserting bold text instead of two asterisks (default:nil
). -
markdown-italic-underscore
- set to a non-nil value to use underscores when inserting italic text instead of asterisks (default:nil
). -
markdown-asymmetric-header
- set to a non-nil value to use asymmetric header styling, placing header characters only on the left of headers (default:nil
). -
markdown-header-scaling
- set to a non-nil value to use a variable-pitch font for headings where the size corresponds to the level of the heading (default:nil
). -
markdown-header-scaling-values
- list of scaling values, relative to baseline, for headers of levels one through six, used whenmarkdown-header-scaling
is non-nil (default:(list 1.8 1.4 1.2 1.0 1.0 1.0)
). -
markdown-list-indent-width
- depth of indentation for lists when inserting, promoting, and demoting list items (default: 4). -
markdown-indent-function
- the function to use for automatic indentation (default:markdown-indent-line
). -
markdown-indent-on-enter
- set to a non-nil value to automatically indent new lines when the enter key is pressed (default: t) -
markdown-enable-wiki-links
- syntax highlighting for wiki links (default:nil
). Set this to a non-nil value to turn on wiki link support by default. Wiki link support can be toggled later using the functionmarkdown-toggle-wiki-links
." -
markdown-wiki-link-alias-first
- set to a non-nil value to treat aliased wiki links like[[link text|PageName]]
(default: t). When set to nil, they will be treated as[[PageName|link text]]
. -
markdown-uri-types
- a list of protocol schemes (e.g., "http") for URIs thatmarkdown-mode
should highlight. -
markdown-enable-math
- syntax highlighting for LaTeX fragments (default:nil
). Set this to t to turn on math support by default. Math support can be enabled, disabled, or toggled later using the functionmarkdown-toggle-math
." -
markdown-css-paths
- CSS files to link to in XHTML output (default:nil
). -
markdown-content-type
- when set to a nonempty string, anhttp-equiv
attribute will be included in the XHTML<head>
block (default:""
). If needed, the suggested values areapplication/xhtml+xml
ortext/html
. See also:markdown-coding-system
. -
markdown-coding-system
- used for specifying the character set identifier in thehttp-equiv
attribute when included (default:nil
). Seemarkdown-content-type
, which must be set before this variable has any effect. When set tonil
,buffer-file-coding-system
will be used to automatically determine the coding system string (falling back toiso-8859-1
when unavailable). Common settings areutf-8
andiso-latin-1
. -
markdown-xhtml-header-content
- additional content to include in the XHTML<head>
block (default:""
). -
markdown-xhtml-standalone-regexp
- a regular expression whichmarkdown-mode
uses to determine whether the output ofmarkdown-command
is a standalone XHTML document or an XHTML fragment (default:"^\\(<\\?xml\\|<!DOCTYPE\\|<html\\)"
). If this regular expression not matched in the first five lines of output,markdown-mode
assumes the output is a fragment and adds a header and footer. -
markdown-link-space-sub-char
- a character to replace spaces when mapping wiki links to filenames (default:"_"
). For example, use an underscore for compatibility with the Python Markdown WikiLinks extension. Ingfm-mode
, this is set to"-"
to conform with GitHub wiki links. -
markdown-reference-location
- where to insert reference definitions (default:header
). The possible locations are the end of the document (end
), after the current block (immediately
), before the next header (header
). -
markdown-footnote-location
- where to insert footnote text (default:end
). The set of location options is the same as formarkdown-reference-location
. -
markdown-nested-imenu-heading-index
- Use nested imenu heading instead of a flat index (default:nil
). A nested index may provide more natural browsing from the menu, but a flat list may allow for faster keyboard navigation via tab completion. -
comment-auto-fill-only-comments
- variable is made buffer-local and set tonil
by default. In programming language modes, when this variable is non-nil, only comments will be filled by auto-fill-mode. However, comments in Markdown documents are rare and the most users probably intend for the actual content of the document to be filled. Making this variable buffer-local allowsmarkdown-mode
to override the default behavior induced when the global variable is non-nil. -
markdown-gfm-additional-languages
, - additional languages to make available, aside from those predefined inmarkdown-gfm-recognized-languages
, when inserting GFM code blocks (default:nil
). Language strings must have be trimmed of whitespace and not contain any curly braces. They may be of arbitrary capitalization, though. -
markdown-gfm-use-electric-backquote
- usemarkdown-electric-backquote
for interactive insertion of GFM code blocks when backquote is pressed three times (default: t). -
markdown-make-gfm-checkboxes-buttons
- Whether GitHub Flavored Markdown style task lists (checkboxes) should be turned into buttons that can be toggled with mouse-1 or RET. If non-nil (default), then buttons are enabled. This works inmarkdown-mode
as well asgfm-mode
.
Additionally, the faces used for syntax highlighting can be modified to your liking by issuing M-x customize-group RET markdown-faces or by using the "Markdown Faces" link at the bottom of the mode customization screen.
Besides supporting the basic Markdown syntax, Markdown Mode also
includes syntax highlighting for [[Wiki Links]]
. This can be
enabled by setting markdown-enable-wiki-links
to a non-nil value.
Wiki links may be followed by pressing C-c C-o when the point
is at a wiki link. Use M-p and M-n to quickly jump to the
previous and next links (including links of other types).
Aliased or piped wiki links of the form [[link text|PageName]]
are also supported. Since some wikis reverse these components, set
markdown-wiki-link-alias-first
to nil to treat them as
[[PageName|link text]]
. If markdown-wiki-link-fontify-missing
is also non-nil, Markdown Mode will highlight wiki links with
missing target file in a different color. By default, Markdown
Mode only searches for target files in the current directory.
Sequential parent directory search (as in Ikiwiki) can be
enabled by setting markdown-wiki-link-search-parent-directories
to a non-nil value.
SmartyPants support is possible by customizing markdown-command
.
If you install SmartyPants.pl
at, say, /usr/local/bin/smartypants
,
then you can set markdown-command
to "markdown | smartypants"
.
You can do this either by using M-x customize-group markdown
or by placing the following in your .emacs
file:
(setq markdown-command "markdown | smartypants")
Syntax highlighting for mathematical expressions written
in LaTeX (only expressions denoted by $..$
, $$..$$
, or \[..\]
)
can be enabled by setting markdown-enable-math
to a non-nil value,
either via customize or by placing (setq markdown-enable-math t)
in .emacs
, and then restarting Emacs or calling
markdown-reload-extensions
.
A GitHub Flavored Markdown mode, gfm-mode
, is also
available. The GitHub implementation differs slightly from
standard Markdown in that it supports things like different
behavior for underscores inside of words, automatic linking of
URLs, strikethrough text, and fenced code blocks with an optional
language keyword.
The GFM-specific features above apply to README.md
files, wiki
pages, and other Markdown-formatted files in repositories on
GitHub. GitHub also enables additional features for
writing on the site (for issues, pull requests, messages, etc.)
that are further extensions of GFM. These features include task
lists (checkboxes), newlines corresponding to hard line breaks,
auto-linked references to issues and commits, wiki links, and so
on. To make matters more confusing, although task lists are not
part of GFM proper, since 2014 they are rendered (in a
read-only fashion) in all Markdown documents in repositories on the
site. These additional extensions are supported to varying degrees
by markdown-mode
and gfm-mode
as described below.
-
URL autolinking: Both
markdown-mode
andgfm-mode
support highlighting of URLs without angle brackets. -
Multiple underscores in words: You must enable
gfm-mode
to toggle support for underscores inside of words. In this mode variable names such asa_test_variable
will not trigger emphasis (italics). -
Fenced code blocks: Code blocks quoted with backticks, with optional programming language keywords, are highlighted in both
markdown-mode
andgfm-mode
. They can be inserted with C-c C-s P. If there is an active region, the text in the region will be placed inside the code block. You will be prompted for the name of the language, but may press enter to continue without naming a language. -
Strikethrough: Strikethrough text is only supported in
gfm-mode
and can be inserted (and toggled) using C-c C-s d. Following the mnemonics for the other style keybindings, the letter d coincides with the HTML tag<del>
. -
Task lists: GFM task lists will be rendered as checkboxes (Emacs buttons) in both
markdown-mode
andgfm-mode
whenmarkdown-make-gfm-checkboxes-buttons
is set to a non-nil value (and it is set to t by default). These checkboxes can be toggled by clickingmouse-1
or pressing RET over the button. -
Wiki links: Generic wiki links are supported in
markdown-mode
, but ingfm-mode
specifically they will be treated as they are on GitHub: spaces will be replaced by hyphens in filenames and the first letter of the filename will be capitalized. For example,[[wiki link]]
will map to a file namedWiki-link
with the same extension as the current file. -
Newlines: Neither
markdown-mode
norgfm-mode
do anything specifically with respect to newline behavior. If you usegfm-mode
mostly to write text for comments or issues on the GitHub site--where newlines are significant and correspond to hard line breaks--then you may want to enablevisual-line-mode
for line wrapping in buffers. You can do this with agfm-mode-hook
as follows:;; Use visual-line-mode in gfm-mode (defun my-gfm-mode-hook () (visual-line-mode 1)) (add-hook 'gfm-mode-hook 'my-gfm-mode-hook)
-
Preview: GFM-specific preview can be powered by setting
markdown-command
to use Docter. This may also be configured to work with Marked 2 formarkdown-open-command
.
markdown-mode has benefited greatly from the efforts of the following people:
- Cyril Brulebois for Debian packaging.
- Conal Elliott for a font-lock regexp patch.
- Edward O'Connor for a font-lock regexp fix and
GitHub Flavored Markdown mode (
gfm-mode
). - Greg Bognar for menus and running
markdown
with an active region. - Daniel Burrows for filing Debian bug #456592.
- Peter S. Galbraith for maintaining
emacs-goodies-el
. - Dmitry Dzhus for undefined reference checking.
- Carsten Dominik for
org-mode
, from which the visibility cycling functionality was derived, and for a bug fix related toorgtbl-mode
. - Bryan Kyle for indentation code.
- Ben Voui for font-lock face customizations.
- Ankit Solanki for
longlines.el
compatibility and custom CSS. - Hilko Bengen for proper XHTML output.
- Jose A. Ortega Ruiz for Emacs 23 fixes.
- Nelson Minar for
html-helper-mode
, from which comment matching functions were derived. - Alec Resnick for bug reports.
- Joost Kremers for footnote-handling functions, bug reports regarding indentation, and fixes for byte-compilation warnings.
- Peter Williams for
fill-paragraph
enhancements. - George Ogata for fixing several byte-compilation warnings.
- Eric Merritt for wiki link features.
- Philippe Ivaldi for XHTML preview customizations and XHTML export.
- Jeremiah Dodds for supporting Markdown processors which do not accept input from stdin.
- Werner Dittmann for bug reports
regarding the
cl
dependency andauto-fill-mode
and indentation. - Scott Pfister for generalizing the space substitution character for mapping wiki links to filenames.
- Marcin Kasperski for a patch to escape shell commands.
- Christopher J. Madsen for patches to fix a match
data bug and to prefer
visual-line-mode
ingfm-mode
. - Shigeru Fukaya for better adherence to Emacs Lisp coding conventions.
- Donald Ephraim Curtis for fixing the
fill-paragraph
regexp, refactoring the compilation and preview functions, heading font-lock generalizations, list renumbering, and kill ring save. - Kevin Porter for wiki link handling in
gfm-mode
. - Max Penet and Peter Eisentraut peter_e@gmx.net
for an autoload token for
gfm-mode
. - Ian Yang for improving the reference definition regex.
- Akinori Musha for an imenu index function.
- Michael Sperber for XEmacs fixes.
- Francois Gannaz for suggesting charset declaration in XHTML output.
- Zhenlei Jia for smart exdention function.
- Matus Goljer for improved wiki link following and GFM code block insertion.
- Peter Jones for link following functions.
- Bryan Fink for a bug report regarding externally modified files.
- Vegard Vesterheim for a bug fix
related to
orgtbl-mode
. - Makoto Motohashi for before- and after- export hooks, unit test improvements, and updates to support wide characters.
- Michael Dwyer for
gfm-mode
underscore regexp. - Chris Lott for suggesting reference label completion.
- Gunnar Franke for a completion bug report.
- David Glasser for a
paragraph-separate
fix. - Daniel Brotsky for better auto-fill defaults.
- Samuel Freilich for improved filling behavior regarding list items, footnotes, and reference definitions, improved killing of footnotes, and numerous other tests and bug fixes.
- Antonis Kanouras for strikethrough support.
- Tim Visher for multiple CSS files and other general improvements.
- Matt McClure for a patch to prevent overwriting source files with .html extensions upon export.
- Roger Bolsius for ordered list improvements.
- Google's Open Source Programs Office for recognizing the project with a monetary contribution in June 2015.
- Howard Melman for supporting GFM checkboxes as buttons.
- Danny McClanahan for live preview
mode, completion of GFM programming language names, improved
font lock for fenced code blocks and metadata blocks,
cl-lib
updates, and numerous other improvements. - Syohei Yoshida for better heading detection and movement functions, improved italic font lock, fixing adaptive filling for hanging list items, more efficient fontification, and numerous other improvements.
- Vitalie Spinu for improvements to font lock and source code aesthetics.
- Kévin Le Gouguec for improvements related to ATX headings and Pandoc fancy lists.
markdown-mode is developed and tested primarily for compatibility with GNU Emacs 24.3 and later. If you find any bugs in markdown-mode, please construct a test case or a patch and open a ticket on the GitHub issue tracker.
markdown-mode was written and is maintained by Jason Blevins. The first version was released on May 24, 2007.
- 2007-05-24: Version 1.1
- 2007-05-25: Version 1.2
- 2007-06-05: Version 1.3
- 2007-06-29: Version 1.4
- 2007-10-11: Version 1.5
- 2008-06-04: Version 1.6
- 2009-10-01: Version 1.7
- 2011-08-12: Version 1.8
- 2011-08-15: Version 1.8.1
- 2013-01-25: Version 1.9
- 2013-03-24: Version 2.0
- 2016-01-09: Version 2.1