Shell & compile
Macros integrates with external processes the Emacs way: a compile command that runs a build into a read-only buffer and parses its errors, plus error navigation that jumps straight to the offending source line, and a basic interactive shell.
compile
| Key | Command | Action |
|---|---|---|
| C-c c | compile |
Prompt for a command and run it |
recompile |
Re-run the last compile (also g in the buffer) |
Output streams into a *compilation* buffer. When the process finishes, Macros parses each line for an error location and faces it. It recognizes the common compiler and grep formats (the first matching pattern wins, like Emacs's compilation-error-regexp-alist).
In the compilation buffer
| Key | Action |
|---|---|
| Enter | visit the source for the error on this line |
| g | recompile |
| n / p | move |
| q | close |
Walking errors anywhere
| Key | Command |
|---|---|
| M-g n | next-error |
| M-g p | previous-error |
next-error / previous-error step through the parsed error list without needing the compilation buffer focused. They're shared with diagnostics and grep: the most recently used source claims them.
grep
Project grep is described under Projects & search. Its results buffer (grep-mode) is wired to the same compile-visit / next-error machinery, so jumping to a match works identically.
Shell
| Key | Command | Action |
|---|---|---|
| C-c s | shell |
Open a basic interactive shell buffer |
| Enter | shell-send-input |
Send the current input line |
The shell command gives you a simple line-oriented shell inside a buffer. For a full terminal — ANSI/VT, curses apps, REPLs, htop — use the embedded terminal instead.
Running processes from Scheme
All of this is built on call-process, which you can call directly in your own commands:
(define (current-branch)
(call-process "git" '("rev-parse" "--abbrev-ref" "HEAD")))
See Scripting with Steel for more on call-process and the async make-process.