intro.texi (3750B)
1 @node Introduction, Installation, Top, Top 2 @chapter Introduction 3 4 Geiser is an Emacs environment to hack and have fun in Scheme. If that's 5 enough for you, see @ref{Installation} to get it running and 6 @ref{The REPL} for the fun part. 7 8 @menu 9 * Modus operandi:: 10 * Showing off:: 11 @end menu 12 13 @node Modus operandi, Showing off, Introduction, Introduction 14 @section Modus operandi 15 16 @cindex modus operandi 17 As already mentioned, Geiser relies on a running Scheme process to 18 obtain the information it makes accessible to the programmer. There's 19 little effort, on the Elisp side, to understand, say, the module system 20 used by the Scheme implementation at hand; instead, a generic interface 21 between the two worlds is defined, and each supported Scheme includes a 22 library implementing that API, together with some wee shims in Elisp 23 allowing the reuse of the Emacs-side framework, which constitutes the 24 bulk of the code. 25 26 @cindex current module 27 @anchor{current-module} While being as generic as possible, the 28 Scheme-Elisp interface makes some assumptions about the capabilities and 29 interaction mode of the corresponding REPL. In particular, Geiser 30 expects the latter to support namespaces in the form of a module system, 31 and to provide a well-defined way to establish the REPL's current 32 namespace (or module), as well as the current file's module (or 33 namespace). Thus, all evaluations performed by Geiser either in the 34 REPL or in a source code buffer happen in the context of the current 35 namespace. Every time you switch to a different file, you're switching 36 namespaces automatically; at the REPL, you must request the switch 37 explicitly (usually just using means provided by the Scheme 38 implementation itself). 39 40 If your favourite Scheme supports the above modus operandi, it has all 41 that's needed for a bare-bones Geiser mode. But Geiser can, and will, 42 use any metadata available: procedure arities and argument lists to 43 display interactive help, documentation strings, location information to 44 jump to definitions, export lists to provide completion, and so on and 45 so forth. Although this is not an all-or-none proposition (Geiser can 46 operate with just part of that functionality available), i initially 47 concentrated in supporting those Schemes with the richest (to my 48 knowledge) introspection capabilities, namely, Guile and Racket. Later 49 on, Dan Leslie added support for Chicken, and several other schemes 50 followed suit. 51 52 @node Showing off, , Modus operandi, Introduction 53 @section Showing off 54 @cindex swanking 55 When working with a fully conniving Scheme, Geiser can offer the 56 following functionality: 57 58 @itemize @bullet 59 @item 60 Form evaluation in the context of the current file's module. 61 @item 62 Macro expansion. 63 @item 64 File/module loading and/or compilation. 65 @item 66 Namespace-aware identifier completion (including local bindings, names 67 visible in the current module, and module names). 68 @item 69 Autodoc: the echo area shows information about the signature of the 70 procedure/macro around point automatically. 71 @item 72 Jump to definition of identifier at point. 73 @item 74 Access to documentation (including docstrings when the implementation 75 provides it). 76 @item 77 Listings of identifiers exported by a given module. 78 @item 79 Listings of callers/callees of procedures. 80 @item 81 Rudimentary support for debugging (when the REPL provides a 82 debugger) and error navigation. 83 @item 84 Support for multiple, simultaneous REPLs. 85 @item 86 Support for image display in those Schemes that treat them as first 87 class values. 88 @end itemize 89 90 In the following pages, i'll try to explain what these features 91 actually are (i'm just swanking here), and how to use them for your 92 profit. But, before that, let's see how to install Geiser. 93 94 @c Local Variables: 95 @c mode: texinfo 96 @c TeX-master: "geiser" 97 @c End: