From db8d541fbe676d02894e23823e2d890dab706e5c Mon Sep 17 00:00:00 2001 From: Elais Player Date: Sat, 20 Jul 2019 23:59:29 -0500 Subject: [PATCH] Add scheme module Adds scheme module with geiser. --- modules/lang/scheme/autoload.el | 8 ++++++ modules/lang/scheme/config.el | 46 +++++++++++++++++++++++++++++++++ modules/lang/scheme/packages.el | 4 +++ 3 files changed, 58 insertions(+) create mode 100644 modules/lang/scheme/autoload.el create mode 100644 modules/lang/scheme/config.el create mode 100644 modules/lang/scheme/packages.el diff --git a/modules/lang/scheme/autoload.el b/modules/lang/scheme/autoload.el new file mode 100644 index 000000000..2573ef5fb --- /dev/null +++ b/modules/lang/scheme/autoload.el @@ -0,0 +1,8 @@ +;;; lang/scheme/autoload.el -*- lexical-binding: t; -*- + +;;;###autoload +(defun +scheme/repl (&optional arg) + "Open the Scheme REPL." + (interactive "P") + (switch-to-geiser arg) + (current-buffer)) diff --git a/modules/lang/scheme/config.el b/modules/lang/scheme/config.el new file mode 100644 index 000000000..a68db8208 --- /dev/null +++ b/modules/lang/scheme/config.el @@ -0,0 +1,46 @@ +;;; lang/scheme/config.el -*- lexical-binding: t; -*- + +(add-hook 'scheme-mode-hook #'rainbow-delimiters-mode) + +(defun +scheme/impls () + `( ,@(when (featurep! +racket) '(racket)) + ,@(when (featurep! +guile) '(guile)) + ,@(when (featurep! +chicken) '(chicken)) + ,@(when (featurep! +mit) '(mit)) + ,@(when (featurep! +chibi) '(chibi)) + ,@(when (featurep! +chez) '(chez)) ())) + +(def-package! geiser + :mode ("\\.scm\\'" . scheme-mode) + :mode ("\\.ss\\'" . scheme-mode) + :commands (geiser) + :init + (setq geiser-active-implementations #'+scheme/impls) + (set-repl-handler! 'scheme-mode '+scheme/repl) + (set-eval-handler! 'scheme-mode #'geiser-eval-region) + (set-lookup-handlers! 'scheme-mode + :definition #'geiser-edit-symbol-at-point + :documentation #'geiser-doc-symbol-at-point) + :config + (map! (:localleader + (:map scheme-mode-map + "'" #'geiser-mode-switch-to-repl + "s" #'geiser-set-scheme + + (:prefix ("e" . "eval") + "b" #'geiser-eval-buffer + "B" #'geiser-eval-buffer-and-go + "e" #'geiser-eval-definition + "E" #'geiser-eval-definition-and-go + "r" #'geiser-eval-region + "R" #'geiser-eval-region-and-go) + + (:prefix ("h" . "help") + "d" 'geiser-autodoc) + + (:prefix ("r" . "repl") + "b" #'geiser-switch-to-repl + "q" #'geiser-repl-exit + "r" #'geiser-restart-repl + "R" #'geiser-reload + "c" #'geiser-repl-clear-buffer))))) diff --git a/modules/lang/scheme/packages.el b/modules/lang/scheme/packages.el new file mode 100644 index 000000000..20a43e613 --- /dev/null +++ b/modules/lang/scheme/packages.el @@ -0,0 +1,4 @@ +;; -*- no-byte-compile: t; -*- +;;; lang/scheme/packages.el + +(package! geiser)