Getting help
Macros is self-documenting. Function docs are scraped from the ;; comments above each definition in the Steel source, so the same explanations you'd read in the code are available live through describe-function, apropos, and helm-apropos. This covers not just the built-in library but every package you install — a package's documented definitions are folded into the same index as it loads. The help commands live under the C-h prefix, mirroring Emacs.
The command palette — M-x
Press M-x to open a fuzzy-searchable list of every invocable command — both Rust built-ins and Scheme-defined commands. Type to narrow, Enter to run. This is the single best way to explore what the editor can do.
Under the hood M-x is helm-execute-command, routed through the Helm selection framework.
Help commands
| Key | Command | Shows |
|---|---|---|
| C-h t | help-with-tutorial |
The interactive tutorial |
| C-h k | describe-key |
What a key is bound to — press the key after |
| C-h f | describe-function |
A command's documentation |
| C-h a | apropos |
Commands whose name or docs match a query (into a buffer) |
| C-h C-a | helm-apropos |
Live search over docs; jump to the implementation |
| C-h b | which-key-top |
All active top-level keybindings |
| C-h e | list-messages |
The echo-area / message scrollback |
| C-h l | list-lsp-log |
Language-server stderr |
describe-key
Press C-h k, then the chord you're curious about. Macros tells you which command it runs in the current context.
describe-function & apropos
C-h f prompts for a command name and shows its documentation — the first lines of the source comment above its definition. C-h a searches across those docs, so you can find a command even when you don't remember its exact name. Try C-h a and type region, or buffer, or git. It dumps the matches into a read-only *apropos* buffer.
helm-apropos — search and jump
C-h C-a (helm-apropos) is the interactive version: a live Helm picker that narrows as you type, matching on both names and doc-comments across every loaded definition — built-ins, installed packages, and editor options alike. Each match is annotated with its one-line summary (options show their current value).
Matching is by word: type several words in any order and every one must appear (in the name or the docs), the way Emacs apropos works. So font size finds the font-size option, and so does size font. Don't know the name of something? Describe what it does — region, kill buffer, git stage. Then:
- Enter jumps to the implementation — it opens the defining source file at the
defineso you can read exactly how it works. - M-a → Describe shows the documentation in a
*Help*buffer instead.
When the source file isn't on disk (an installed binary ships its built-in library compiled in, not as files), the jump gracefully falls back to showing the documentation — the same way Emacs handles a primitive defined in C.
Discovering keys under a prefix — which-key
Forgot what comes after a prefix? Ask for the list (Emacs which-key):
| Key | Command | Shows |
|---|---|---|
| C-x ? | which-key-cx |
Every binding under the C-x prefix |
| C-c ? | which-key-cc |
Every binding under the C-c prefix |
| C-h b | which-key-top |
All top-level bindings |
A read-only buffer lists the matching chords and their commands; q closes it. M-x which-key prompts for any prefix you want to inspect.
Querying the API from Scheme
The discoverability layer is also callable as functions, useful while scripting:
(function-list) ; every documented function/variable name
(function-doc "yank") ; the doc string for a name
(function-source "yank") ; (file line) of its definition, or '()
These read from the same index helm-apropos searches, so anything you load — including packages — is queryable here too.
In help/list buffers (*Help*, the diagnostics list, xref results, …) the standard read-only keys apply: n / p to move, Enter to act on a row, q to close.
License & credits
M-x licenses opens a read-only *licenses* buffer with Macros' license (MIT) and its third-party acknowledgments — the Lilex font, and a note that Magit, Org mode, and Helm are original reimplementations, not the Emacs packages themselves. The full text of every bundled Rust crate license is in THIRD-PARTY-LICENSES.md.