5.2 KiB
Scheme layer
Description
This layer adds support for Scheme via Geiser. Note that combined usage of racket-mode and geiser has not been tested.
Features:
- Support the Scheme compiler Chicken
- Support for the extension language platform Guile
- Structuraly safe editing using optional evil-cleverparens
Install
To use this configuration layer, add it to your ~/.spacemacs
. You will need to
add scheme
to the existing dotspacemacs-configuration-layers
list in this
file.
For full Chicken support, the following commands should be run:
$ chicken-install -s apropos chicken-doc
$ cd `csi -p '(chicken-home)'`
$ curl https://3e8.org/pub/chicken-doc/chicken-doc-repo.tgz | sudo tar zx
Note: Chicken 5 does not have chicken-home
imported by default,
so the command for changing to that directory can be accomplished with this:
$ cd `csi -b -e "(import (chicken platform))" -p "(chicken-home)"`
Additionally, as of 2018-12-12 there is a naming conflict in some of the Linux package repos:
# Chicken had csc and csi first, but then mono introduced a conflict and # does not seem to want to change this. OpenBSD renamed csc and csi to # chicken-csc and chicken-csi 2018-12-12.
You may need to modify the csi
command accordingly. If the name of the
REPL binary on your system is chicken-csi
, you will also need to add
(setq geiser-chicken-binary "chicken-csi")
to your dotspacemacs/user-config
in order for the REPL to start in spacemacs.
Structuraly safe editing
This layer adds support for evil-cleverparens
which allows to safely edit
lisp code by keeping the s-expressions balanced.
By default this mode is not activated. You can turn it on locally on the active
buffer with SPC m T s
(s
for safe).
To turn it on automatically for all scheme
buffers call the following
function in your dotspacemacs/user-config
function:
(spacemacs/toggle-evil-safe-lisp-structural-editing-on-register-hook-scheme-mode)
or to enable it for all supported modes:
(spacemacs/toggle-evil-safe-lisp-structural-editing-on-register-hooks)
When enabled the symbol 🆂
should be displayed in the mode-line.
Key bindings
Compiling
Key binding | Description |
---|---|
SPC m c c |
Compile current buffer |
SPC m c p |
Add directory to load path |
Navigation
Key binding | Description |
---|---|
SPC m g g |
Goto Definition |
SPC m g b |
Go Back |
SPC m g m |
Goto Module |
SPC m g n |
Goto next error |
SPC m g N |
Goto previous error |
Documentation
Key binding | Description |
---|---|
SPC m h h |
Docs for symbol at point |
SPC m h d |
Look up manual entry for symbol at point |
SPC m h m |
Display exports for module |
SPC m h < |
Display callers |
SPC m h > |
Display callees |
Insertion
Key binding | Description |
---|---|
SPC m i l |
Insert Lambda |
Macroexpansion
Key binding | Description |
---|---|
SPC m m e |
Macroexpand last sexp |
SPC m m f |
Macroexpand surrounding sexp |
SPC m m r |
Macroexpand region |
REPL
Key binding | Description |
---|---|
SPC m s i |
Start or switch to the REPL |
SPC m s s |
Select Scheme implementation |
SPC m s b |
Send buffer to the REPL |
SPC m s B |
Send buffer to the REPL and focus it |
SPC m s f |
Send definition to the REPL |
SPC m s F |
Send definition to the REPL and focus it |
SPC m s e |
Send last sexp to the REPL |
SPC m s r |
Send region to the REPL |
SPC m s R |
Send region to the REPL and focus it |
Evaluation
Key binding | Description |
---|---|
SPC m e b |
Evaluate the whole buffer |
SPC m e e |
Evaluate last sexp |
SPC m e f |
Evaluate current function |
SPC m e l |
Evaluate line |
SPC m e r |
Evaluate region |