* Overview

  Geiser is a generic Emacs/Scheme interaction mode, featuring an
  enhanced REPL and a set of minor modes improving Emacs' basic scheme
  major mode. The main functionalities provided are:

    - Evaluation of forms in the namespace of the current module.
    - Macro expansion.
    - File/module loading.
    - Namespace-aware symbol completion (including local bindings,
      names visible in the current module, and module names).
    - Autodoc: the echo area shows information about the signature of
      the procedure/macro around point automatically.
    - Jump to definition of symbol at point.
    - Access to documentation (including docstrings when the
      implementation provides it).
    - Listings of callers/callees of procedures.
    - Rudimentary support for debugging (list of
      evaluation/compilation error in an Emacs' compilation-mode
      buffer).

   Currently supported implementations are Guile and PLT.

    - Guile works only with the development, vm-based binary. Be sure
      to customize `geiser-repl-guile-binary' to point to a correct vm
      binary.
    - PLT Scheme 4.1.5.5 or better required.

* Installation

  - In your .emacs:

     (load-file "<path-to-geiser>/elisp/geiser.el")

    This installs all supported Scheme implementations. You can list
    explicitly the ones that you want by setting the variable
    `geiser-impl-installed-implementations' *before* loading geiser.el.
    For instance:

     (setq geiser-impl-installed-implementations '(plt guile))

    On opening a scheme file, Geiser will try to guess its Scheme,
    defaulting to the first in the list.

  - Check the geiser customization group for some options with:

      M-x customize-group RET geiser RET

    In particular, customize `geiser-repl-<impl>-binary' (in
    geiser-repl), which should point to an executable in your path.

  - To start a REPL, M-x geiser.

* Quick key reference

*** In Scheme buffers:

    |---------------------+-------------------------------------------------|
    | C-c C-z             | Switch to REPL                                  |
    | C-c C-s             | Specify Scheme implementation for buffer        |
    |---------------------+-------------------------------------------------|
    | M-.                 | Edit symbol at point                            |
    | M-,                 | Go back to where M-. was last invoked           |
    | C-c C-e m           | Ask for a module and open its file              |
    |---------------------+-------------------------------------------------|
    | C-M-x               | Eval definition around point                    |
    | C-c M-e             | Eval definition around point and switch to REPL |
    | C-x C-e             | Eval sexp before point                          |
    | C-c C-r             | Eval region                                     |
    | C-c M-r             | Eval region and switch to REPL                  |
    |---------------------+-------------------------------------------------|
    | C-c C-m x           | Macro-expand definition around point            |
    | C-c C-m e           | Macro-expand sexp before point                  |
    | C-c C-m r           | Marcro-expand region                            |
    | C-u C-c C-m [x,e,r] | (With prefix, macro expansions are recursive)   |
    |---------------------+-------------------------------------------------|
    | C-c C-k             | Compile and load current file                   |
    | C-c C-l             | Load current file                               |
    |---------------------+-------------------------------------------------|
    | C-c C-d d           | See documentation for symbol at point           |
    | C-c C-d m           | See list of module symbols                      |
    | C-c C-d a           | Toggle autodoc mode                             |
    |---------------------+-------------------------------------------------|
    | C-c<                | Show callers of procedure at point              |
    | C-c>                | Show callees of procedure at point              |
    | C-c C-x f           | See a generic's methods signatures              |
    |---------------------+-------------------------------------------------|
    | M-TAB               | Complete symbol at point                        |
    | M-`, C-.            | Complete module name at point                   |
    | TAB                 | Complete symbol at point or indent              |
    |                     | (If `geiser-mode-smart-tab-p' is t)             |
    |---------------------+-------------------------------------------------|

*** In the REPL

    |----------------+-----------------------------------------|
    | C-c C-z, C-c z | Start Scheme REPL (if it's not running) |
    |----------------+-----------------------------------------|
    | M-.            | Edit symbol at point                    |
    | TAB, M-TAB     | Complete symbol at point                |
    | M-`, C-.       | Complete module name at point           |
    |----------------+-----------------------------------------|
    | M-p, M-n       | Prompt history, matching current prefix |
    |----------------+-----------------------------------------|
    | C-c k          | Compile and load scheme file            |
    | C-c l          | Load scheme file                        |
    |----------------+-----------------------------------------|
    | C-c d          | See documentation for symbol at point   |
    | C-c m          | See module documentation                |
    | C-c a          | Toggle autodoc mode                     |
    |----------------+-----------------------------------------|

*** In the documentation browser:

    |-----------+----------------------------------------------|
    | n/p       | next/previous page                           |
    | l         | previous page                                |
    | SPC/S-SPC | scroll up/down                               |
    | TAB/S-TAB | next/previous link                           |
    | k         | kill current page and go to previous or next |
    | r         | refresh page                                 |
    | c         | clean browsing history                       |
    | M-.       | edit symbol at point                         |
    | C-cz      | switch to REPL                               |
    | q         | bury buffer                                  |
    |-----------+----------------------------------------------|

*** In backtrace (evaluation/compile result) buffers:

    - Default error navigation keys used by Emacs' compilation mode
      (e.g. M-g n, M-g p for next/previous error).
    - q to bury buffer.