spacemacs/layers/+lang/scheme/README.org

5.3 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