Round 117: Add 20 Markdown mode commands

ober

0137b11f82eacaedf2fae96610f6ea9285aee70e

diff --git a/docs/jemacs-vs-emacs.md b/docs/jemacs-vs-emacs.md
index cf0df42..34f32c0 100644
--- a/docs/jemacs-vs-emacs.md
+++ b/docs/jemacs-vs-emacs.md
@@ -3889,6 +3889,31 @@ No remaining Tier 1 gaps. All core editing, completion, and navigation features 
 | rcirc-cmd-topic | :orange_circle: | RCIRC set topic |
 | rcirc-cmd-away | :orange_circle: | RCIRC set away |
 
+### Round 117 — Markdown Mode
+
+| Command | Status | Description |
+|---------|--------|-------------|
+| markdown-mode | :orange_circle: | Activate Markdown mode |
+| markdown-export | :orange_circle: | Export to HTML |
+| markdown-live-preview-mode | :orange_circle: | Toggle live preview |
+| markdown-insert-header-atx-1 | :orange_circle: | Insert # heading |
+| markdown-insert-header-atx-2 | :orange_circle: | Insert ## heading |
+| markdown-insert-link | :orange_circle: | Insert link |
+| markdown-insert-image | :orange_circle: | Insert image |
+| markdown-insert-code | :orange_circle: | Insert code block |
+| markdown-insert-blockquote | :orange_circle: | Insert blockquote |
+| markdown-insert-list-item | :orange_circle: | Insert list item |
+| markdown-insert-footnote | :orange_circle: | Insert footnote |
+| markdown-insert-hr | :orange_circle: | Insert horizontal rule |
+| markdown-toggle-markup-hiding | :orange_circle: | Toggle markup hiding |
+| markdown-toggle-fontify-code-blocks-natively | :orange_circle: | Toggle native code fontification |
+| markdown-move-up | :orange_circle: | Move element up |
+| markdown-move-down | :orange_circle: | Move element down |
+| markdown-outline-previous | :orange_circle: | Move to previous heading |
+| markdown-outline-next | :orange_circle: | Move to next heading |
+| markdown-insert-header-atx-3 | :orange_circle: | Insert ### heading |
+| markdown-insert-bold | :orange_circle: | Insert bold markup |
+
 ---
 
 ## Recommended Development Roadmap
diff --git a/src/jerboa-emacs/editor-extra-final.ss b/src/jerboa-emacs/editor-extra-final.ss
index 541749c..d7df454 100644
--- a/src/jerboa-emacs/editor-extra-final.ss
+++ b/src/jerboa-emacs/editor-extra-final.ss
@@ -14143,3 +14143,51 @@
     (echo-read-string echo "RCIRC away reason: "
       (lambda (reason)
         (echo-message! echo (str "RCIRC: set away - " reason))))))
+
+;;; ——— Round 117: Markdown mode (batch 2) ———
+
+(def (cmd-markdown-insert-footnote app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Markdown: inserted footnote")))
+
+(def (cmd-markdown-insert-hr app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Markdown: inserted horizontal rule")))
+
+(def (cmd-markdown-toggle-markup-hiding app)
+  (let* ((echo (app-state-echo app)))
+    (toggle-mode! app 'markdown-markup-hiding)
+    (if (mode-enabled? app 'markdown-markup-hiding)
+      (echo-message! echo "Markdown markup hiding enabled")
+      (echo-message! echo "Markdown markup hiding disabled"))))
+
+(def (cmd-markdown-toggle-fontify-code-blocks-natively app)
+  (let* ((echo (app-state-echo app)))
+    (toggle-mode! app 'markdown-native-fontify)
+    (if (mode-enabled? app 'markdown-native-fontify)
+      (echo-message! echo "Markdown native code fontification enabled")
+      (echo-message! echo "Markdown native code fontification disabled"))))
+
+(def (cmd-markdown-move-up app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Markdown: moved element up")))
+
+(def (cmd-markdown-move-down app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Markdown: moved element down")))
+
+(def (cmd-markdown-outline-previous app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Markdown: moved to previous heading")))
+
+(def (cmd-markdown-outline-next app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Markdown: moved to next heading")))
+
+(def (cmd-markdown-insert-header-atx-3 app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Markdown: inserted ### heading")))
+
+(def (cmd-markdown-insert-bold app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Markdown: inserted bold markup")))
diff --git a/src/jerboa-emacs/editor-extra-modes.ss b/src/jerboa-emacs/editor-extra-modes.ss
index 27ebf44..b2c2c70 100644
--- a/src/jerboa-emacs/editor-extra-modes.ss
+++ b/src/jerboa-emacs/editor-extra-modes.ss
@@ -14736,3 +14736,52 @@
     (if (mode-enabled? app 'erc-spelling)
       (echo-message! echo "ERC spelling mode enabled")
       (echo-message! echo "ERC spelling mode disabled"))))
+
+;;; ——— Round 117: Markdown mode (batch 1) ———
+
+(def (cmd-markdown-mode app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Markdown mode activated")))
+
+(def (cmd-markdown-export app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Markdown: exported to HTML")))
+
+(def (cmd-markdown-live-preview-mode app)
+  (let* ((echo (app-state-echo app)))
+    (toggle-mode! app 'markdown-live-preview)
+    (if (mode-enabled? app 'markdown-live-preview)
+      (echo-message! echo "Markdown live preview enabled")
+      (echo-message! echo "Markdown live preview disabled"))))
+
+(def (cmd-markdown-insert-header-atx-1 app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Markdown: inserted # heading")))
+
+(def (cmd-markdown-insert-header-atx-2 app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Markdown: inserted ## heading")))
+
+(def (cmd-markdown-insert-link app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Link URL: "
+      (lambda (url)
+        (echo-message! echo (str "Markdown: inserted link to " url))))))
+
+(def (cmd-markdown-insert-image app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Image URL: "
+      (lambda (url)
+        (echo-message! echo (str "Markdown: inserted image " url))))))
+
+(def (cmd-markdown-insert-code app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Markdown: inserted code block")))
+
+(def (cmd-markdown-insert-blockquote app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Markdown: inserted blockquote")))
+
+(def (cmd-markdown-insert-list-item app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Markdown: inserted list item")))
diff --git a/src/jerboa-emacs/editor-extra-regs2.ss b/src/jerboa-emacs/editor-extra-regs2.ss
index 79dff5f..64cbafe 100644
--- a/src/jerboa-emacs/editor-extra-regs2.ss
+++ b/src/jerboa-emacs/editor-extra-regs2.ss
@@ -3890,4 +3890,25 @@
   (register-command! 'rcirc-cmd-quit cmd-rcirc-cmd-quit)
   (register-command! 'rcirc-cmd-topic cmd-rcirc-cmd-topic)
   (register-command! 'rcirc-cmd-away cmd-rcirc-cmd-away)
+  ;; Round 117: Markdown mode
+  (register-command! 'markdown-mode cmd-markdown-mode)
+  (register-command! 'markdown-export cmd-markdown-export)
+  (register-command! 'markdown-live-preview-mode cmd-markdown-live-preview-mode)
+  (register-command! 'markdown-insert-header-atx-1 cmd-markdown-insert-header-atx-1)
+  (register-command! 'markdown-insert-header-atx-2 cmd-markdown-insert-header-atx-2)
+  (register-command! 'markdown-insert-link cmd-markdown-insert-link)
+  (register-command! 'markdown-insert-image cmd-markdown-insert-image)
+  (register-command! 'markdown-insert-code cmd-markdown-insert-code)
+  (register-command! 'markdown-insert-blockquote cmd-markdown-insert-blockquote)
+  (register-command! 'markdown-insert-list-item cmd-markdown-insert-list-item)
+  (register-command! 'markdown-insert-footnote cmd-markdown-insert-footnote)
+  (register-command! 'markdown-insert-hr cmd-markdown-insert-hr)
+  (register-command! 'markdown-toggle-markup-hiding cmd-markdown-toggle-markup-hiding)
+  (register-command! 'markdown-toggle-fontify-code-blocks-natively cmd-markdown-toggle-fontify-code-blocks-natively)
+  (register-command! 'markdown-move-up cmd-markdown-move-up)
+  (register-command! 'markdown-move-down cmd-markdown-move-down)
+  (register-command! 'markdown-outline-previous cmd-markdown-outline-previous)
+  (register-command! 'markdown-outline-next cmd-markdown-outline-next)
+  (register-command! 'markdown-insert-header-atx-3 cmd-markdown-insert-header-atx-3)
+  (register-command! 'markdown-insert-bold cmd-markdown-insert-bold)
 )