* 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.

* Installation

  - In your .emacs:

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

    This installs all supported Scheme implementations. You can list
    explicitly the ones that you want, e.g.:

      (geiser-setup '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.

*** Implementation caveats

    - 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. Listing of
      callers/callees is not available.

* Quick key reference

*** In Scheme buffers:

    |------------------+-------------------------------------------------|
    | C-cC-z           | Switch to REPL                                  |
    | C-cC-s           | Specify Scheme implementation for buffer        |
    |------------------+-------------------------------------------------|
    | M-.              | Edit symbol at point                            |
    | M-,              | Go back to where M-. was last invoked           |
    | C-cC-em          | Ask for a module and open its file              |
    |------------------+-------------------------------------------------|
    | C-M-x            | Eval definition around point                    |
    | C-cM-e           | Eval definition around point and switch to REPL |
    | C-xC-e           | Eval sexp before point                          |
    | C-cC-r           | Eval region                                     |
    | C-cM-r           | Eval region and switch to REPL                  |
    |------------------+-------------------------------------------------|
    | C-cC-mx          | Macro-expand definition around point            |
    | C-cC-me          | Macro-expand sexp before point                  |
    | C-cC-mr          | Marcro-expand region                            |
    | C-uC-cC-m[x,e,r] | (With prefix, macro expansions are recursive)   |
    |------------------+-------------------------------------------------|
    | C-cC-k           | Compile and load current file                   |
    | C-cC-l           | Load current file                               |
    |------------------+-------------------------------------------------|
    | C-cC-dd          | See documentation for symbol at point           |
    | C-cC-dm          | See list of module symbols                      |
    | C-cC-da          | Toggle autodoc mode                             |
    |------------------+-------------------------------------------------|
    | C-c<             | Show callers of procedure at point              |
    | C-c>             | Show callees of procedure at point              |
    | C-cC-xf          | 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-cC-z, C-cz | 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-ck         | Compile and load scheme file            |
    | C-cl         | Load scheme file                        |
    |--------------+-----------------------------------------|
    | C-cd         | See documentation for symbol at point   |
    | C-cm         | See module documentation                |
    | C-ca         | 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-gn, M-gp for next/previous error).
    - q to bury buffer.