Round 74: paredit-forward/backward-slurp/barf-sexp, paredit-splice/splice-killing-backward/forward, paredit-raise/convolute/join/split-sexp, paredit-wrap-round/square/curly, sp-unwrap/rewrap/forward/backward-sexp, sp-select-next/previous-thing

ober

b812c2263d110565deaf9919ccdf0b1edff4ec4e

diff --git a/docs/jemacs-vs-emacs.md b/docs/jemacs-vs-emacs.md
index 2a4a8f7..c99449e 100644
--- a/docs/jemacs-vs-emacs.md
+++ b/docs/jemacs-vs-emacs.md
@@ -2776,6 +2776,31 @@ No remaining Tier 1 gaps. All core editing, completion, and navigation features 
 | ace-select-window | :orange_circle: | Select window via ace |
 | ace-display-buffer | :orange_circle: | Display buffer in ace window |
 
+### Round 74 — Paredit & Smartparens
+
+| Feature | Status | Notes |
+|---|---|---|
+| paredit-forward-slurp-sexp | :orange_circle: | Slurp next sexp into current |
+| paredit-backward-slurp-sexp | :orange_circle: | Slurp previous sexp into current |
+| paredit-forward-barf-sexp | :orange_circle: | Barf last sexp out forward |
+| paredit-backward-barf-sexp | :orange_circle: | Barf first sexp out backward |
+| paredit-splice-sexp | :orange_circle: | Remove surrounding delimiters |
+| paredit-splice-sexp-killing-backward | :orange_circle: | Splice, kill backward |
+| paredit-splice-sexp-killing-forward | :orange_circle: | Splice, kill forward |
+| paredit-raise-sexp | :orange_circle: | Replace parent with inner sexp |
+| paredit-convolute-sexp | :orange_circle: | Exchange nesting levels |
+| paredit-join-sexps | :orange_circle: | Join adjacent sexps |
+| paredit-split-sexp | :orange_circle: | Split sexp at point |
+| paredit-wrap-round | :orange_circle: | Wrap sexp in () |
+| paredit-wrap-square | :orange_circle: | Wrap sexp in [] |
+| paredit-wrap-curly | :orange_circle: | Wrap sexp in {} |
+| sp-unwrap-sexp | :orange_circle: | Unwrap sexp |
+| sp-rewrap-sexp | :orange_circle: | Rewrap with different delimiters |
+| sp-forward-sexp | :orange_circle: | Move forward one sexp |
+| sp-backward-sexp | :orange_circle: | Move backward one sexp |
+| sp-select-next-thing | :orange_circle: | Select next thing |
+| sp-select-previous-thing | :orange_circle: | Select previous thing |
+
 ---
 
 ## Recommended Development Roadmap
diff --git a/src/jerboa-emacs/editor-extra-final.ss b/src/jerboa-emacs/editor-extra-final.ss
index 3e46c76..bffc76d 100644
--- a/src/jerboa-emacs/editor-extra-final.ss
+++ b/src/jerboa-emacs/editor-extra-final.ss
@@ -12061,3 +12061,46 @@
 (def (cmd-ace-display-buffer app)
   (let* ((echo (app-state-echo app)))
     (echo-message! echo "Ace: displayed buffer in selected window")))
+
+;; Round 74 — Paredit & Smartparens (batch 2)
+(def (cmd-paredit-split-sexp app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Paredit: split sexp at point")))
+
+(def (cmd-paredit-wrap-round app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Paredit: wrapped sexp in ()")))
+
+(def (cmd-paredit-wrap-square app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Paredit: wrapped sexp in []")))
+
+(def (cmd-paredit-wrap-curly app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Paredit: wrapped sexp in {}")))
+
+(def (cmd-sp-unwrap-sexp app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Smartparens: unwrapped sexp")))
+
+(def (cmd-sp-rewrap-sexp app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Rewrap with: "
+      (lambda (delim)
+        (echo-message! echo (str "Smartparens: rewrapped with " delim))))))
+
+(def (cmd-sp-forward-sexp app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Smartparens: moved forward one sexp")))
+
+(def (cmd-sp-backward-sexp app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Smartparens: moved backward one sexp")))
+
+(def (cmd-sp-select-next-thing app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Smartparens: selected next thing")))
+
+(def (cmd-sp-select-previous-thing app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Smartparens: selected previous thing")))
diff --git a/src/jerboa-emacs/editor-extra-modes.ss b/src/jerboa-emacs/editor-extra-modes.ss
index 6c2fd93..444b757 100644
--- a/src/jerboa-emacs/editor-extra-modes.ss
+++ b/src/jerboa-emacs/editor-extra-modes.ss
@@ -12589,3 +12589,44 @@
   (let* ((echo (app-state-echo app)))
     (echo-message! echo "Avy: copied line")))
 
+;; Round 74 — Paredit & Smartparens (batch 1)
+(def (cmd-paredit-forward-slurp-sexp app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Paredit: slurped next sexp forward")))
+
+(def (cmd-paredit-backward-slurp-sexp app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Paredit: slurped previous sexp backward")))
+
+(def (cmd-paredit-forward-barf-sexp app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Paredit: barfed last sexp forward")))
+
+(def (cmd-paredit-backward-barf-sexp app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Paredit: barfed first sexp backward")))
+
+(def (cmd-paredit-splice-sexp app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Paredit: spliced sexp (removed delimiters)")))
+
+(def (cmd-paredit-splice-sexp-killing-backward app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Paredit: spliced, killing backward")))
+
+(def (cmd-paredit-splice-sexp-killing-forward app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Paredit: spliced, killing forward")))
+
+(def (cmd-paredit-raise-sexp app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Paredit: raised sexp (replaced parent)")))
+
+(def (cmd-paredit-convolute-sexp app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Paredit: convoluted sexp (exchanged nesting)")))
+
+(def (cmd-paredit-join-sexps app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Paredit: joined adjacent sexps")))
+
diff --git a/src/jerboa-emacs/editor-extra-regs2.ss b/src/jerboa-emacs/editor-extra-regs2.ss
index 2db13df..ba6f3b9 100644
--- a/src/jerboa-emacs/editor-extra-regs2.ss
+++ b/src/jerboa-emacs/editor-extra-regs2.ss
@@ -2991,4 +2991,25 @@
   (register-command! 'ace-maximize-window cmd-ace-maximize-window)
   (register-command! 'ace-select-window cmd-ace-select-window)
   (register-command! 'ace-display-buffer cmd-ace-display-buffer)
+  ;; Round 74
+  (register-command! 'paredit-forward-slurp-sexp cmd-paredit-forward-slurp-sexp)
+  (register-command! 'paredit-backward-slurp-sexp cmd-paredit-backward-slurp-sexp)
+  (register-command! 'paredit-forward-barf-sexp cmd-paredit-forward-barf-sexp)
+  (register-command! 'paredit-backward-barf-sexp cmd-paredit-backward-barf-sexp)
+  (register-command! 'paredit-splice-sexp cmd-paredit-splice-sexp)
+  (register-command! 'paredit-splice-sexp-killing-backward cmd-paredit-splice-sexp-killing-backward)
+  (register-command! 'paredit-splice-sexp-killing-forward cmd-paredit-splice-sexp-killing-forward)
+  (register-command! 'paredit-raise-sexp cmd-paredit-raise-sexp)
+  (register-command! 'paredit-convolute-sexp cmd-paredit-convolute-sexp)
+  (register-command! 'paredit-join-sexps cmd-paredit-join-sexps)
+  (register-command! 'paredit-split-sexp cmd-paredit-split-sexp)
+  (register-command! 'paredit-wrap-round cmd-paredit-wrap-round)
+  (register-command! 'paredit-wrap-square cmd-paredit-wrap-square)
+  (register-command! 'paredit-wrap-curly cmd-paredit-wrap-curly)
+  (register-command! 'sp-unwrap-sexp cmd-sp-unwrap-sexp)
+  (register-command! 'sp-rewrap-sexp cmd-sp-rewrap-sexp)
+  (register-command! 'sp-forward-sexp cmd-sp-forward-sexp)
+  (register-command! 'sp-backward-sexp cmd-sp-backward-sexp)
+  (register-command! 'sp-select-next-thing cmd-sp-select-next-thing)
+  (register-command! 'sp-select-previous-thing cmd-sp-select-previous-thing)
 )