* 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 identifier 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 identifier at point. - Access to documentation (including docstrings when the implementation provides it). - Listings of identifiers exported by a given module. - Listings of callers/callees of procedures. - Rudimentary support for debugging (list of evaluation/compilation error in an Emacs' compilation-mode buffer). NOTE: if you're not in a hurry, [[http://www.nongnu.org/geiser/][Geiser's website]] contains a nicer manual, also included in Geiser tarballs as a texinfo file (doc/geiser.info). * Supported scheme implementations - Guile 2.0 (not released yet: use the latest git master branch). - PLT Racket 5.0.1 or better. * Installation Geiser can be used either directly from its uninstalled source tree or byte-compiled and installed after perfoming the standard configure/make/make install dance. *** In place - Extract the tarball or clone the git repository anywhere in your file system. Let's call that place . - In your .emacs: #+BEGIN_SRC emacs-lisp (load-file "/elisp/geiser.el") #+END_SRC *** Byte-compiled - Create a build directory, `build', say: #+BEGIN_SRC shell $ cd $ mkdir build; cd build #+END_SRC - Configure and make: #+BEGIN_SRC shell $ ../configure && make #+END_SRC Now, you can use the byte-compiled Geiser in place by adding to your .emacs: #+BEGIN_SRC emacs-lisp (load "/build/elisp/geiser-load") #+END_SRC or, alternatively, install it with: #+BEGIN_SRC shell $ make install #+END_SRC (you might need to get root access, depending on your installation directory) and, instead of the above load forms, require 'geiser-install (not 'geiser, mind you) in your emacs initialization file: #+BEGIN_SRC emacs-lisp (require 'geiser-install) #+END_SRC You're ready to go! * Basic configuration The loading invocations above install 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: #+BEGIN_SRC emacs-lisp (setq geiser-impl-installed-implementations '(racket guile)) #+END_SRC On opening a scheme file, Geiser will try to guess its Scheme, defaulting to the first in the list. Use `C-c C-s' to select the implementation by hand (on a per file basis). Check the geiser customization group for some options with: M-x customize-group RET geiser RET In particular, customize `geiser--binary', which should point to an executable in your path. To start a REPL, M-x geiser. *** Completion with company-mode Geiser offers identifier and module name completion, bound to M-TAB and M-` respectively. Only names visible in the current module are offered. While that is cool and all, things are even better: if you have [[http://nschum.de/src/emacs/company-mode/][company-mode]] installed, Geiser's completion will use it. Just require company-mode and, from then on, any new scheme buffer or REPL will use it. If you didn't know about Nikolaj Schumacher's awesome mode, check [[http://www.screentoaster.com/watch/stU0lSRERIR1pYRFVdXVlRVFFV/company_mode_for_gnu_emacs][this screencast]]. * Quick key reference *** In Scheme buffers: |---------------------+-------------------------------------------------| | C-c C-z | Switch to REPL | |---------------------+-------------------------------------------------| | C-u C-c C-z | Switch to REPL and current module | |---------------------+-------------------------------------------------| | C-c C-s | Specify Scheme implementation for buffer | |---------------------+-------------------------------------------------| | M-. | Go to definition of identifier 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 identifier at point | |---------------------+-------------------------------------------------| | C-c C-d m | See a list of a module's exported identifiers | |---------------------+-------------------------------------------------| | 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 identifier at point | |---------------------+-------------------------------------------------| | M-`, C-. | Complete module name at point | |---------------------+-------------------------------------------------| | TAB | Complete identifier at point or indent | | | (If `geiser-mode-smart-tab-p' is t) | |---------------------+-------------------------------------------------| *** In the REPL |-------------+----------------------------------------------------| | C-c C-z | Start Scheme REPL, or jump to previous buffer | |-------------+----------------------------------------------------| | C-c C-q | Kill Scheme process | |-------------+----------------------------------------------------| | M-. | Edit identifier at point | |-------------+----------------------------------------------------| | TAB, M-TAB | Complete identifier at point | |-------------+----------------------------------------------------| | M-`, C-. | Complete module name at point | |-------------+----------------------------------------------------| | M-p, M-n | Prompt history, matching current prefix | |-------------+----------------------------------------------------| | C-c C-k | Nuke REPL: use it if the REPL becomes unresponsive | |-------------+----------------------------------------------------| | C-c C-m | Set current module | |-------------+----------------------------------------------------| | C-c C-i | Import module into current namespace | |-------------+----------------------------------------------------| | C-c C-l | Load scheme file | |-------------+----------------------------------------------------| | C-c C-d C-d | See documentation for symbol at point | |-------------+----------------------------------------------------| | C-c C-d C-m | See documentation for module | |-------------+----------------------------------------------------| | C-c C-d C-a | Toggle autodoc mode | |-------------+----------------------------------------------------| *** In the documentation browser: |------------+----------------------------------------------| | n, f | Next page | |------------+----------------------------------------------| | p, b | Previous page | |------------+----------------------------------------------| | TAB, S-TAB | Next/previous link | |------------+----------------------------------------------| | k | Kill current page and go to previous or next | |------------+----------------------------------------------| | g, r | Refresh page | |------------+----------------------------------------------| | c | Clear browsing history | |------------+----------------------------------------------| | ., M-. | Edit identifier at point | |------------+----------------------------------------------| | z | Switch to REPL | |------------+----------------------------------------------| | q | Bury buffer | |------------+----------------------------------------------| *** In backtrace (evaluation/compile result) buffers: - TAB, M-TAB for error navigation. - q to bury buffer.