Add useful defaults and bindings to scheme mode (#2947)

* Add useful defaults and bindings to scheme mode

Scheme mode was pretty bare for a long time now and lacked many of
geiser's useful features like `geiser-smart-tab` and starting the geiser
repl on entering a file. This turns them on by default for the
productive schemer.

Besides that the following key bindings were remapped
+ `SPC m e e` -> `geiser-eval-last-sexp`
+ `SPC m e d` -> `geiser-eval-definition`
+ `SPC m e D` -> `geiser-eval-definition-and-go`

This brings the geiser keymaps in line with other lisp modes in doom.

Another change involves adding macro expand commands under `SPC m m` so
schemers can see what evil lurks beneath their commands.

Geiser autodoc commands have also been added under `SPC m h` for
schemers to read the docs, though they can still use `SPC c k` to do the
same thing.

* Remove package cookie

Its only necessary when not using (use-package!)

* Use setq instead of custom

* Add `defer t` back

* Add defer flag for scheme package

If a user went directly to a scheme file after load they would get an
error concerning rainbow-delimiters not being loaded. Deferring scheme
mode stops that error from happening

* Fix typo

Co-authored-by: Elais Player <elais@samus.hsd1.nm.comcast.net>
This commit is contained in:
Elais Player 2020-04-23 22:00:27 -06:00 committed by GitHub
parent f78cc7ed38
commit 5205fde619
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -1,16 +1,19 @@
;;; lang/scheme/config.el -*- lexical-binding: t; -*- ;;; lang/scheme/config.el -*- lexical-binding: t; -*-
;;;###package scheme (use-package! scheme
(add-hook 'scheme-mode-hook #'rainbow-delimiters-mode) :defer t
:hook ((scheme-mode . rainbow-delimiters-mode)
(scheme-mode . geiser-mode)))
(use-package! geiser (use-package! geiser
:defer t :defer t
:init :init
(setq geiser-active-implementations '(guile chicken mit chibi chez)) (setq geiser-active-implementations '(guile chicken mit chibi chez))
(setq geiser-mode-start-repl-p t)
(setq geiser-smart-tab-p t)
(unless (featurep! :lang racket) (unless (featurep! :lang racket)
(push 'racket geiser-active-implementations)) (push 'racket geiser-active-implementations))
(after! scheme ; built-in (after! scheme ; built-in
(set-repl-handler! 'scheme-mode '+scheme/open-repl) (set-repl-handler! 'scheme-mode '+scheme/open-repl)
(set-eval-handler! 'scheme-mode #'geiser-eval-region) (set-eval-handler! 'scheme-mode #'geiser-eval-region)
(set-lookup-handlers! 'scheme-mode (set-lookup-handlers! 'scheme-mode
@ -22,24 +25,34 @@
( "\\* [A-Za-z0-9_-]+ REPL \\*" :quit nil))) ( "\\* [A-Za-z0-9_-]+ REPL \\*" :quit nil)))
(map! :localleader (map! :localleader
:map scheme-mode-map :map scheme-mode-map
"'" #'geiser-mode-switch-to-repl "'" #'geiser-mode-switch-to-repl
"s" #'geiser-set-scheme "\"" #'geiser-connect
"[" #'geiser-squarify
"\\" #'geiser-insert-lambda
"s" #'geiser-set-scheme
(:prefix ("e" . "eval") (:prefix ("e" . "eval")
"b" #'geiser-eval-buffer "b" #'geiser-eval-buffer
"B" #'geiser-eval-buffer-and-go "B" #'geiser-eval-buffer-and-go
"e" #'geiser-eval-definition "e" #'geiser-eval-last-sexp
"E" #'geiser-eval-definition-and-go "d" #'geiser-eval-definition
"D" #'geiser-eval-definition-and-go
"r" #'geiser-eval-region "r" #'geiser-eval-region
"R" #'geiser-eval-region-and-go) "R" #'geiser-eval-region-and-go)
(:prefix ("h" . "help") (:prefix ("h" . "help")
"d" 'geiser-autodoc) "d" #'geiser-autodoc
;; TODO add more help keybindings "<" #'geiser-xref-callers
">" #'geiser-xref-callees
"i" #'geiser-doc-look-up-manual)
(:prefix ("m" . "macro")
"r" #'geiser-expand-region
"d" #'geiser-expand-definition
"e" #'geiser-expand-last-sexp)
(:prefix ("r" . "repl") (:prefix ("r" . "repl")
"b" #'geiser-switch-to-repl "b" #'geiser-switch-to-repl
"q" #'geiser-repl-exit "q" #'geiser-repl-exit
"l" #'geiser-load-current-buffer
"r" #'geiser-restart-repl "r" #'geiser-restart-repl
"R" #'geiser-reload "R" #'geiser-reload
"c" #'geiser-repl-clear-buffer))) "c" #'geiser-repl-clear-buffer)))