Geiser is an Emacs environment to hack and have fun in Scheme. If that’s enough for you, see Installation to get it running and The REPL for the fun part.
As already mentioned, Geiser relies on a running Scheme process to obtain the information it makes accessible to the programmer. There’s little effort, on the Elisp side, to understand, say, the module system used by the Scheme implementation at hand; instead, a generic interface between the two worlds is defined, and each supported Scheme includes a library implementing that API, together with some wee shims in Elisp allowing the reuse of the Emacs-side framework, which constitutes the bulk of the code.
While being as generic as possible, the Scheme-Elisp interface makes some assumptions about the capabilities and interaction mode of the corresponding REPL. In particular, Geiser expects the latter to support namespaces in the form of a module system, and to provide a well-defined way to establish the REPL’s current namespace (or module), as well as the current file’s module (or namespace). Thus, all evaluations performed by Geiser either in the REPL or in a source code buffer happen in the context of the current namespace. Every time you switch to a different file, you’re switching namespaces automatically; at the REPL, you must request the switch explicitly (usually just using means provided by the Scheme implementation itself).
If your favourite Scheme supports the above modus operandi, it has all that’s needed for a bare-bones Geiser mode. But Geiser can, and will, use any metadata available: procedure arities and argument lists to display interactive help, documentation strings, location information to jump to definitions, export lists to provide completion, and so on and so forth. Although this is not an all-or-none proposition (Geiser can operate with just part of that functionality available), i initially concentrated in supporting those Schemes with the richest (to my knowledge) introspection capabilities, namely, Guile and Racket. Later on, Dan Leslie added support for Chicken, and there’s active work to add support for scsh.
When working with a fully conniving Scheme, Geiser can offer the following functionality:
In the following pages, i’ll try to explain what these features actually are (i’m just swanking here), and how to use them for your profit. But, before that, let’s see how to install Geiser.