Round 270: Octave ext, Maxima ext, SageMath ext, GAP ext, Coq ext (20 commands)

ober

da2a0cbd6cf0bcf8a6d57b6e27157faad8a870eb

diff --git a/docs/jemacs-vs-emacs.md b/docs/jemacs-vs-emacs.md
index 001f515..5c3d6f1 100644
--- a/docs/jemacs-vs-emacs.md
+++ b/docs/jemacs-vs-emacs.md
@@ -4583,6 +4583,31 @@ No remaining Tier 1 gaps. All core editing, completion, and navigation features 
 | ebib-import-file | :orange_circle: | Import file into Ebib |
 | ebib-push-citation | :orange_circle: | Push Ebib citation to buffer |
 
+### Round 270 — Octave ext, Maxima ext, SageMath ext, GAP ext, Coq ext
+
+| Command | Status | Description |
+|---------|--------|-------------|
+| octave-eval-buffer | :orange_circle: | Evaluate Octave buffer |
+| octave-eval-region | :orange_circle: | Evaluate Octave region |
+| octave-shell | :orange_circle: | Start Octave shell |
+| octave-doc | :orange_circle: | Show Octave documentation |
+| maxima-eval-buffer | :orange_circle: | Evaluate Maxima buffer |
+| maxima-eval-region | :orange_circle: | Evaluate Maxima region |
+| maxima-shell | :orange_circle: | Start Maxima shell |
+| maxima-doc | :orange_circle: | Show Maxima documentation |
+| sage-eval-buffer | :orange_circle: | Evaluate SageMath buffer |
+| sage-eval-region | :orange_circle: | Evaluate SageMath region |
+| sage-shell | :orange_circle: | Start SageMath shell |
+| sage-doc | :orange_circle: | Show SageMath documentation |
+| gap-eval-buffer | :orange_circle: | Evaluate GAP buffer |
+| gap-eval-region | :orange_circle: | Evaluate GAP region |
+| gap-shell | :orange_circle: | Start GAP shell |
+| gap-doc | :orange_circle: | Show GAP documentation |
+| coq-next-step | :orange_circle: | Process next Coq step |
+| coq-prev-step | :orange_circle: | Undo previous Coq step |
+| coq-goto-end | :orange_circle: | Process Coq to end of buffer |
+| coq-assert-next | :orange_circle: | Assert next Coq sentence |
+
 ### Round 269 — Assembly ext, MATLAB ext, R ext, Julia ext, Wolfram ext
 
 | Command | Status | Description |
diff --git a/src/jerboa-emacs/editor-extra-final.ss b/src/jerboa-emacs/editor-extra-final.ss
index fef8500..5bdb216 100644
--- a/src/jerboa-emacs/editor-extra-final.ss
+++ b/src/jerboa-emacs/editor-extra-final.ss
@@ -21437,4 +21437,50 @@
   (let* ((echo (app-state-echo app)))
     (echo-read-string echo "Symbol: "
       (lambda (sym)
-        (echo-message! echo (str "Wolfram: doc for " sym))))))
\ No newline at end of file
+        (echo-message! echo (str "Wolfram: doc for " sym))))))
+
+;;; Round 270 — SageMath ext, GAP ext, Coq ext (batch 2)
+
+(def (cmd-sage-shell app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "SageMath: starting shell")))
+
+(def (cmd-sage-doc app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Topic: "
+      (lambda (topic)
+        (echo-message! echo (str "SageMath: doc for " topic))))))
+
+(def (cmd-gap-eval-buffer app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "GAP: evaluating buffer")))
+
+(def (cmd-gap-eval-region app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "GAP: evaluating region")))
+
+(def (cmd-gap-shell app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "GAP: starting shell")))
+
+(def (cmd-gap-doc app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Topic: "
+      (lambda (topic)
+        (echo-message! echo (str "GAP: doc for " topic))))))
+
+(def (cmd-coq-next-step app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Coq: processing next step")))
+
+(def (cmd-coq-prev-step app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Coq: undoing previous step")))
+
+(def (cmd-coq-goto-end app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Coq: processing to end of buffer")))
+
+(def (cmd-coq-assert-next app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Coq: asserting next sentence")))
\ No newline at end of file
diff --git a/src/jerboa-emacs/editor-extra-modes.ss b/src/jerboa-emacs/editor-extra-modes.ss
index c9275c0..01ceff6 100644
--- a/src/jerboa-emacs/editor-extra-modes.ss
+++ b/src/jerboa-emacs/editor-extra-modes.ss
@@ -22058,3 +22058,49 @@
   (let* ((echo (app-state-echo app)))
     (echo-message! echo "R: evaluating region")))
 
+;;; Round 270 — Octave ext, Maxima ext, SageMath ext, GAP ext, Coq ext (batch 1)
+
+(def (cmd-octave-eval-buffer app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Octave: evaluating buffer")))
+
+(def (cmd-octave-eval-region app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Octave: evaluating region")))
+
+(def (cmd-octave-shell app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Octave: starting shell")))
+
+(def (cmd-octave-doc app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Function: "
+      (lambda (func)
+        (echo-message! echo (str "Octave: doc for " func))))))
+
+(def (cmd-maxima-eval-buffer app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Maxima: evaluating buffer")))
+
+(def (cmd-maxima-eval-region app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Maxima: evaluating region")))
+
+(def (cmd-maxima-shell app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Maxima: starting shell")))
+
+(def (cmd-maxima-doc app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Topic: "
+      (lambda (topic)
+        (echo-message! echo (str "Maxima: doc for " topic))))))
+
+(def (cmd-sage-eval-buffer app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "SageMath: evaluating buffer")))
+
+(def (cmd-sage-eval-region app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "SageMath: evaluating region")))
+
diff --git a/src/jerboa-emacs/editor-extra-regs2.ss b/src/jerboa-emacs/editor-extra-regs2.ss
index 4b44696..1dbf697 100644
--- a/src/jerboa-emacs/editor-extra-regs2.ss
+++ b/src/jerboa-emacs/editor-extra-regs2.ss
@@ -7087,4 +7087,25 @@
   (register-command! 'wolfram-eval-region cmd-wolfram-eval-region)
   (register-command! 'wolfram-kernel cmd-wolfram-kernel)
   (register-command! 'wolfram-doc cmd-wolfram-doc)
+  ;; Round 270
+  (register-command! 'octave-eval-buffer cmd-octave-eval-buffer)
+  (register-command! 'octave-eval-region cmd-octave-eval-region)
+  (register-command! 'octave-shell cmd-octave-shell)
+  (register-command! 'octave-doc cmd-octave-doc)
+  (register-command! 'maxima-eval-buffer cmd-maxima-eval-buffer)
+  (register-command! 'maxima-eval-region cmd-maxima-eval-region)
+  (register-command! 'maxima-shell cmd-maxima-shell)
+  (register-command! 'maxima-doc cmd-maxima-doc)
+  (register-command! 'sage-eval-buffer cmd-sage-eval-buffer)
+  (register-command! 'sage-eval-region cmd-sage-eval-region)
+  (register-command! 'sage-shell cmd-sage-shell)
+  (register-command! 'sage-doc cmd-sage-doc)
+  (register-command! 'gap-eval-buffer cmd-gap-eval-buffer)
+  (register-command! 'gap-eval-region cmd-gap-eval-region)
+  (register-command! 'gap-shell cmd-gap-shell)
+  (register-command! 'gap-doc cmd-gap-doc)
+  (register-command! 'coq-next-step cmd-coq-next-step)
+  (register-command! 'coq-prev-step cmd-coq-prev-step)
+  (register-command! 'coq-goto-end cmd-coq-goto-end)
+  (register-command! 'coq-assert-next cmd-coq-assert-next)
 )