(macros)
Getting Started

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 define so you can read exactly how it works.
  • M-aDescribe 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.

Still stuck?

  • Open the tutorial with C-h t and practice hands-on.
  • Browse this documentation — start at the overview.
  • File an issue on GitHub.