Rendered Markdown
Development reference · View source
? in a Markdown document opens it as a page to read; ? again returns to
the source. :render (also :markdown) does the same.
| Source | Rendered page |
|---|---|
**strong** | strong (bold) |
*emphasis* | emphasis (italic) |
~~struck~~ | crossed out |
# Heading | Heading without hashes; the first level underlined with a rule |
- item | •, then ◦ and ▪ by depth |
1. item | Keeps its number |
- [ ] / - [x] | ☐ / ☑ |
> quote | Marked in the margin with ▌ |
--- | A rule |
| A table | Re-aligned around │ |
| A fenced code block | Indented, without fences |
[text](url) | The text followed by its destination, underlined |
| YAML front matter | Kept without its --- fences, in the dimmed colour |
Anything Runyte does not recognize is passed through as written.
Moving between the two:
- Both directions move the cursor to the corresponding text and bring it into view.
- On markup removed by rendering, the page uses the nearest surviving text. Toggling straight back restores the exact source position; moving around the page first takes you to that new place in the source.
g fon a link or image label opens its destination, as in the source. Relative paths resolve beside the source document and at the project root.Space eopens the source document’s directory and selects its file.
The page is a buffer. It is a generated read-only buffer beside the document, not a mode the document is in, so both stay open and the source keeps every editing key.
- Nothing is concealed. The markers are absent because they were never written into the page, so no offset moves and rows and columns mean what they say.
- Search, selections, splits, and yank work on the page, and find the text actually on screen.
- It is rendered from the buffer, not the file, so it shows unsaved work. Rendering the same document again reuses and regenerates its one page.
The scratch buffer renders too while editor.scratch_markdown is on — the
same option that makes Space p r refill it as Markdown. Its page is named
[rendered scratch]. With the option off, the scratchpad is plain text and
? is unbound there.
Tables and soft wrap. Rendered pages, including rendered scratchpads,
wrap by default independently of source buffers. Set
editor.always_wrap_rendered_markdown: false to follow the general
editor.soft_wrap setting controlled by Space p s. Opening or leaving a page
does not change the general setting. When the override is active, toggling
soft wrap still changes the general setting and the status-line arrow; the
feedback explains why the page stays wrapped. Comparison panes and the
large-line safety limit still prevent wrapping.
Rendered tables use the same effective wrapping setting as the rest of the page.
- Columns share the pane’s text width, keeping short columns compact and wrapping longer cells independently.
- A row is as tall as its tallest cell. Vertical separators continue through its lines, and horizontal rules separate entries.
- Resizing changes only the visual layout. With soft wrap off, tables keep their natural widths.
- Columns keep a small minimum width. If the pane is too narrow for them all, the table scrolls horizontally; moving the caret into a hidden column brings it into view. Other text still wraps normally.
- Up/down follows visual rows and skips added rules. In a shorter cell’s blank continuation, it moves to the nearest cell with text on that row.
- Clicks on padding place the caret at nearby text; added rules are not click targets.
- Search and yank use the logical text: wrap breaks, padding, and added rules are not copied. A selection across cells follows that order, so it need not be a rectangle on screen.
Attributes and colours. Bold and underline are drawn by every terminal,
italic by most. Each role also has a theme colour, so a terminal that ignores
an attribute still shows the difference. The roles are the markup.* entries
in Syntax colours
, so a theme can recolour them.