Round 87: Add CIDER, Sly, Geiser, and Racket features

ober

015a3471f9e699e1273a37096817690ad75204fc

diff --git a/docs/jemacs-vs-emacs.md b/docs/jemacs-vs-emacs.md
index b172125..67e36ca 100644
--- a/docs/jemacs-vs-emacs.md
+++ b/docs/jemacs-vs-emacs.md
@@ -3119,6 +3119,32 @@ No remaining Tier 1 gaps. All core editing, completion, and navigation features 
 
 ---
 
+### Round 87 — CIDER, Sly, Geiser & Racket
+
+| Emacs Command | Status | Description |
+|---|---|---|
+| cider-eval-defun | :orange_circle: | Evaluate defun at point (CIDER) |
+| cider-find-var | :orange_circle: | Find var definition (CIDER) |
+| cider-doc | :orange_circle: | Show documentation (CIDER) |
+| cider-test-run-test | :orange_circle: | Run test at point (CIDER) |
+| cider-repl-set-ns | :orange_circle: | Set REPL namespace (CIDER) |
+| cider-inspect | :orange_circle: | Inspect expression (CIDER) |
+| cider-refresh | :orange_circle: | Refresh loaded namespaces (CIDER) |
+| sly-eval-defun | :orange_circle: | Evaluate defun at point (Sly) |
+| sly-eval-buffer | :orange_circle: | Evaluate buffer (Sly) |
+| sly-describe-symbol | :orange_circle: | Describe symbol (Sly) |
+| sly-who-calls | :orange_circle: | Show callers (Sly) |
+| sly-who-references | :orange_circle: | Show references (Sly) |
+| geiser-eval-definition | :orange_circle: | Evaluate definition (Geiser) |
+| geiser-doc-symbol | :orange_circle: | Show doc for symbol (Geiser) |
+| geiser-connect | :orange_circle: | Connect to Scheme REPL (Geiser) |
+| racket-run | :orange_circle: | Run current Racket file |
+| racket-test | :orange_circle: | Run Racket tests |
+| racket-describe | :orange_circle: | Describe Racket symbol |
+| racket-repl | :orange_circle: | Start Racket REPL |
+
+---
+
 ## Recommended Development Roadmap
 
 > *Reprioritized based on the user's actual Emacs workflow*
diff --git a/src/jerboa-emacs/editor-extra-final.ss b/src/jerboa-emacs/editor-extra-final.ss
index 12076e0..963861f 100644
--- a/src/jerboa-emacs/editor-extra-final.ss
+++ b/src/jerboa-emacs/editor-extra-final.ss
@@ -12672,3 +12672,50 @@
 (def (cmd-paradox-upgrade-packages app)
   (let* ((echo (app-state-echo app)))
     (echo-message! echo "Paradox: upgrading all packages")))
+
+;;; Round 87 — Sly, Geiser & Racket (cont.)
+(def (cmd-sly-who-calls app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Sly who calls: "
+      (lambda (sym)
+        (echo-message! echo (str "Sly: showing callers of " sym))))))
+
+(def (cmd-sly-who-references app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Sly who references: "
+      (lambda (sym)
+        (echo-message! echo (str "Sly: showing references to " sym))))))
+
+(def (cmd-geiser-eval-definition app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Geiser: evaluated definition at point")))
+
+(def (cmd-geiser-doc-symbol app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Geiser doc for: "
+      (lambda (sym)
+        (echo-message! echo (str "Geiser: showing doc for " sym))))))
+
+(def (cmd-geiser-connect app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Geiser connect to (host:port): "
+      (lambda (addr)
+        (echo-message! echo (str "Geiser: connecting to " addr))))))
+
+(def (cmd-racket-run app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Racket: running current file")))
+
+(def (cmd-racket-test app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Racket: running tests")))
+
+(def (cmd-racket-describe app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Racket describe: "
+      (lambda (sym)
+        (echo-message! echo (str "Racket: describing " sym))))))
+
+(def (cmd-racket-repl app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Racket: REPL started")))
diff --git a/src/jerboa-emacs/editor-extra-modes.ss b/src/jerboa-emacs/editor-extra-modes.ss
index fc44da8..87b013a 100644
--- a/src/jerboa-emacs/editor-extra-modes.ss
+++ b/src/jerboa-emacs/editor-extra-modes.ss
@@ -13237,3 +13237,52 @@
       (lambda (pkg)
         (echo-message! echo (str "Quelpa: upgrading " pkg))))))
 
+;;; Round 87 — CIDER, Sly, Geiser & Racket
+(def (cmd-cider-eval-defun app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "CIDER: evaluated defun at point")))
+
+(def (cmd-cider-find-var app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "CIDER find var: "
+      (lambda (var)
+        (echo-message! echo (str "CIDER: navigating to " var))))))
+
+(def (cmd-cider-doc app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "CIDER doc for: "
+      (lambda (sym)
+        (echo-message! echo (str "CIDER: showing doc for " sym))))))
+
+(def (cmd-cider-test-run-test app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "CIDER: running test at point")))
+
+(def (cmd-cider-repl-set-ns app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "CIDER: REPL namespace set to current buffer")))
+
+(def (cmd-cider-inspect app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "CIDER inspect: "
+      (lambda (expr)
+        (echo-message! echo (str "CIDER: inspecting " expr))))))
+
+(def (cmd-cider-refresh app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "CIDER: refreshing loaded namespaces")))
+
+(def (cmd-sly-eval-defun app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Sly: evaluated defun at point")))
+
+(def (cmd-sly-eval-buffer app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Sly: evaluated entire buffer")))
+
+(def (cmd-sly-describe-symbol app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Sly describe symbol: "
+      (lambda (sym)
+        (echo-message! echo (str "Sly: describing " sym))))))
+
diff --git a/src/jerboa-emacs/editor-extra-regs2.ss b/src/jerboa-emacs/editor-extra-regs2.ss
index 179cc8b..50ee576 100644
--- a/src/jerboa-emacs/editor-extra-regs2.ss
+++ b/src/jerboa-emacs/editor-extra-regs2.ss
@@ -3262,4 +3262,24 @@
   (register-command! 'auto-package-update-maybe cmd-auto-package-update-maybe)
   (register-command! 'paradox-list-packages cmd-paradox-list-packages)
   (register-command! 'paradox-upgrade-packages cmd-paradox-upgrade-packages)
+  ;; Round 87
+  (register-command! 'cider-eval-defun cmd-cider-eval-defun)
+  (register-command! 'cider-find-var cmd-cider-find-var)
+  (register-command! 'cider-doc cmd-cider-doc)
+  (register-command! 'cider-test-run-test cmd-cider-test-run-test)
+  (register-command! 'cider-repl-set-ns cmd-cider-repl-set-ns)
+  (register-command! 'cider-inspect cmd-cider-inspect)
+  (register-command! 'cider-refresh cmd-cider-refresh)
+  (register-command! 'sly-eval-defun cmd-sly-eval-defun)
+  (register-command! 'sly-eval-buffer cmd-sly-eval-buffer)
+  (register-command! 'sly-describe-symbol cmd-sly-describe-symbol)
+  (register-command! 'sly-who-calls cmd-sly-who-calls)
+  (register-command! 'sly-who-references cmd-sly-who-references)
+  (register-command! 'geiser-eval-definition cmd-geiser-eval-definition)
+  (register-command! 'geiser-doc-symbol cmd-geiser-doc-symbol)
+  (register-command! 'geiser-connect cmd-geiser-connect)
+  (register-command! 'racket-run cmd-racket-run)
+  (register-command! 'racket-test cmd-racket-test)
+  (register-command! 'racket-describe cmd-racket-describe)
+  (register-command! 'racket-repl cmd-racket-repl)
 )