Round 177: SES, Forms-mode, Enriched-text commands

ober

d3f1f7589e834ea66e0b307a2355579bbfa805a6

diff --git a/docs/jemacs-vs-emacs.md b/docs/jemacs-vs-emacs.md
index ea89622..e4cc444 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 177 — SES, Forms-mode, Enriched-text
+
+| Feature | Status | Notes |
+|---|---|---|
+| ses-mode | :orange_circle: | Toggle SES spreadsheet mode |
+| ses-recalculate-all | :orange_circle: | Recalculate all SES cells |
+| ses-insert-row | :orange_circle: | Insert row in SES |
+| ses-insert-column | :orange_circle: | Insert column in SES |
+| ses-delete-row | :orange_circle: | Delete row in SES |
+| ses-delete-column | :orange_circle: | Delete column in SES |
+| ses-export-tsv | :orange_circle: | Export SES as TSV |
+| ses-import-tsv | :orange_circle: | Import TSV into SES |
+| ses-set-cell-formula | :orange_circle: | Set cell formula |
+| ses-jump-to-cell | :orange_circle: | Jump to named cell |
+| forms-mode | :orange_circle: | Toggle forms editing mode |
+| forms-next-record | :orange_circle: | Move to next record |
+| forms-prev-record | :orange_circle: | Move to previous record |
+| forms-first-record | :orange_circle: | Move to first record |
+| forms-last-record | :orange_circle: | Move to last record |
+| forms-search-forward | :orange_circle: | Search records forward |
+| forms-insert-record | :orange_circle: | Insert new record |
+| forms-delete-record | :orange_circle: | Delete record |
+| enriched-toggle-markup | :orange_circle: | Toggle enriched markup display |
+| enriched-set-face | :orange_circle: | Set face in enriched text |
+
 ### Round 176 — PDF-tools, DocView, Image-mode, Thumbs
 
 | Feature | Status | Notes |
diff --git a/src/jerboa-emacs/editor-extra-final.ss b/src/jerboa-emacs/editor-extra-final.ss
index 546831a..50ed43d 100644
--- a/src/jerboa-emacs/editor-extra-final.ss
+++ b/src/jerboa-emacs/editor-extra-final.ss
@@ -17060,3 +17060,51 @@
 (def (cmd-thumbs-mark app)
   (let* ((echo (app-state-echo app)))
     (echo-message! echo "Thumbs: marked image")))
+
+;; Round 177 — SES, Forms-mode, Enriched-text (batch 2)
+(def (cmd-forms-mode app)
+  (let* ((echo (app-state-echo app)))
+    (toggle-mode! app 'forms)
+    (if (mode-enabled? app 'forms)
+      (echo-message! echo "Forms mode enabled")
+      (echo-message! echo "Forms mode disabled"))))
+
+(def (cmd-forms-next-record app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Forms: moved to next record")))
+
+(def (cmd-forms-prev-record app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Forms: moved to previous record")))
+
+(def (cmd-forms-first-record app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Forms: moved to first record")))
+
+(def (cmd-forms-last-record app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Forms: moved to last record")))
+
+(def (cmd-forms-search-forward app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Search: "
+      (lambda (query)
+        (echo-message! echo (str "Forms: searching for " query))))))
+
+(def (cmd-forms-insert-record app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Forms: inserted new record")))
+
+(def (cmd-forms-delete-record app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Forms: deleted record")))
+
+(def (cmd-enriched-toggle-markup app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Enriched: toggled markup display")))
+
+(def (cmd-enriched-set-face app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Face: "
+      (lambda (face)
+        (echo-message! echo (str "Enriched: set face to " face))))))
diff --git a/src/jerboa-emacs/editor-extra-modes.ss b/src/jerboa-emacs/editor-extra-modes.ss
index 3a1254d..9eebf01 100644
--- a/src/jerboa-emacs/editor-extra-modes.ss
+++ b/src/jerboa-emacs/editor-extra-modes.ss
@@ -17682,3 +17682,55 @@
 (def (cmd-doc-view-set-slice app)
   (let* ((echo (app-state-echo app)))
     (echo-message! echo "Doc-view: slice set")))
+
+;; Round 177 — SES, Forms-mode, Enriched-text (batch 1)
+(def (cmd-ses-mode app)
+  (let* ((echo (app-state-echo app)))
+    (toggle-mode! app 'ses)
+    (if (mode-enabled? app 'ses)
+      (echo-message! echo "SES spreadsheet mode enabled")
+      (echo-message! echo "SES spreadsheet mode disabled"))))
+
+(def (cmd-ses-recalculate-all app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "SES: recalculated all cells")))
+
+(def (cmd-ses-insert-row app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "SES: inserted row")))
+
+(def (cmd-ses-insert-column app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "SES: inserted column")))
+
+(def (cmd-ses-delete-row app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "SES: deleted row")))
+
+(def (cmd-ses-delete-column app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "SES: deleted column")))
+
+(def (cmd-ses-export-tsv app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Export TSV to: "
+      (lambda (path)
+        (echo-message! echo (str "SES: exported to " path))))))
+
+(def (cmd-ses-import-tsv app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Import TSV from: "
+      (lambda (path)
+        (echo-message! echo (str "SES: imported from " path))))))
+
+(def (cmd-ses-set-cell-formula app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Formula: "
+      (lambda (formula)
+        (echo-message! echo (str "SES: cell formula set to " formula))))))
+
+(def (cmd-ses-jump-to-cell app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Cell (e.g. A1): "
+      (lambda (cell)
+        (echo-message! echo (str "SES: jumped to cell " cell))))))
diff --git a/src/jerboa-emacs/editor-extra-regs2.ss b/src/jerboa-emacs/editor-extra-regs2.ss
index 20e65cf..acd0e5d 100644
--- a/src/jerboa-emacs/editor-extra-regs2.ss
+++ b/src/jerboa-emacs/editor-extra-regs2.ss
@@ -5150,4 +5150,25 @@
   (register-command! 'thumbs-dired-setroot cmd-thumbs-dired-setroot)
   (register-command! 'thumbs-rename-images cmd-thumbs-rename-images)
   (register-command! 'thumbs-mark cmd-thumbs-mark)
+  ;; Round 177 — SES, Forms-mode, Enriched-text
+  (register-command! 'ses-mode cmd-ses-mode)
+  (register-command! 'ses-recalculate-all cmd-ses-recalculate-all)
+  (register-command! 'ses-insert-row cmd-ses-insert-row)
+  (register-command! 'ses-insert-column cmd-ses-insert-column)
+  (register-command! 'ses-delete-row cmd-ses-delete-row)
+  (register-command! 'ses-delete-column cmd-ses-delete-column)
+  (register-command! 'ses-export-tsv cmd-ses-export-tsv)
+  (register-command! 'ses-import-tsv cmd-ses-import-tsv)
+  (register-command! 'ses-set-cell-formula cmd-ses-set-cell-formula)
+  (register-command! 'ses-jump-to-cell cmd-ses-jump-to-cell)
+  (register-command! 'forms-mode cmd-forms-mode)
+  (register-command! 'forms-next-record cmd-forms-next-record)
+  (register-command! 'forms-prev-record cmd-forms-prev-record)
+  (register-command! 'forms-first-record cmd-forms-first-record)
+  (register-command! 'forms-last-record cmd-forms-last-record)
+  (register-command! 'forms-search-forward cmd-forms-search-forward)
+  (register-command! 'forms-insert-record cmd-forms-insert-record)
+  (register-command! 'forms-delete-record cmd-forms-delete-record)
+  (register-command! 'enriched-toggle-markup cmd-enriched-toggle-markup)
+  (register-command! 'enriched-set-face cmd-enriched-set-face)
 )