Round 70: yasnippet-new/visit/insert/expand/reload-all/describe-tables, tempel-insert/expand/complete/next/previous, tempo-forward/backward-mark, edit/write/read-abbrevs, inverse-add-global/mode-abbrev, insert/kill-all-abbrevs

ober

3b5cb7ea07573d330a5cbaa3aab6f02679367f68

diff --git a/docs/jemacs-vs-emacs.md b/docs/jemacs-vs-emacs.md
index 35998a6..903883b 100644
--- a/docs/jemacs-vs-emacs.md
+++ b/docs/jemacs-vs-emacs.md
@@ -2677,6 +2677,31 @@ No remaining Tier 1 gaps. All core editing, completion, and navigation features 
 | pp-eval-last-sexp | :orange_circle: | Pretty-print last sexp |
 | pp-macroexpand-last-sexp | :orange_circle: | Pretty-print macro expansion |
 
+### Round 70 — YASnippet, Tempel & Abbreviations
+
+| Feature | Status | Notes |
+|---|---|---|
+| yasnippet-new-snippet | :orange_circle: | Create new snippet |
+| yasnippet-visit-snippet-file | :orange_circle: | Visit snippet source file |
+| yasnippet-insert-snippet | :orange_circle: | Insert snippet by name |
+| yasnippet-expand | :orange_circle: | Expand snippet at point |
+| yasnippet-reload-all | :orange_circle: | Reload all snippet tables |
+| yasnippet-describe-tables | :orange_circle: | Show snippet tables |
+| tempel-insert | :orange_circle: | Insert Tempel template |
+| tempel-expand | :orange_circle: | Expand template at point |
+| tempel-complete | :orange_circle: | Complete template name |
+| tempel-next | :orange_circle: | Next template field |
+| tempel-previous | :orange_circle: | Previous template field |
+| tempo-forward-mark | :orange_circle: | Jump to next tempo mark |
+| tempo-backward-mark | :orange_circle: | Jump to previous tempo mark |
+| edit-abbrevs | :orange_circle: | Edit abbreviation table |
+| write-abbrev-file | :orange_circle: | Write abbrevs to file |
+| read-abbrev-file | :orange_circle: | Read abbrevs from file |
+| inverse-add-global-abbrev | :orange_circle: | Add global abbrev inversely |
+| inverse-add-mode-abbrev | :orange_circle: | Add mode abbrev inversely |
+| insert-abbrevs | :orange_circle: | Insert abbrev table into buffer |
+| kill-all-abbrevs | :orange_circle: | Remove all abbreviations |
+
 ---
 
 ## Recommended Development Roadmap
diff --git a/src/jerboa-emacs/editor-extra-final.ss b/src/jerboa-emacs/editor-extra-final.ss
index 533965e..6fc917b 100644
--- a/src/jerboa-emacs/editor-extra-final.ss
+++ b/src/jerboa-emacs/editor-extra-final.ss
@@ -11858,3 +11858,52 @@
 (def (cmd-pp-macroexpand-last-sexp app)
   (let* ((echo (app-state-echo app)))
     (echo-message! echo "Pretty-printed macroexpansion of last sexp")))
+
+;; Round 70 — Tempel, tempo, abbreviations (batch 2)
+(def (cmd-tempel-previous app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Tempel: moved to previous field")))
+
+(def (cmd-tempo-forward-mark app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Tempo: jumped to next mark")))
+
+(def (cmd-tempo-backward-mark app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Tempo: jumped to previous mark")))
+
+(def (cmd-edit-abbrevs app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Editing abbreviation table")))
+
+(def (cmd-write-abbrev-file app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Write abbrevs to file: "
+      (lambda (file)
+        (echo-message! echo (str "Abbreviations written to " file))))))
+
+(def (cmd-read-abbrev-file app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Read abbrevs from file: "
+      (lambda (file)
+        (echo-message! echo (str "Abbreviations loaded from " file))))))
+
+(def (cmd-inverse-add-global-abbrev app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Global abbrev for word before point: "
+      (lambda (abbr)
+        (echo-message! echo (str "Added global abbreviation '" abbr "'"))))))
+
+(def (cmd-inverse-add-mode-abbrev app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Mode abbrev for word before point: "
+      (lambda (abbr)
+        (echo-message! echo (str "Added mode abbreviation '" abbr "'"))))))
+
+(def (cmd-insert-abbrevs app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Inserted abbreviation table into buffer")))
+
+(def (cmd-kill-all-abbrevs app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "All abbreviations removed")))
diff --git a/src/jerboa-emacs/editor-extra-modes.ss b/src/jerboa-emacs/editor-extra-modes.ss
index f23de20..24835e9 100644
--- a/src/jerboa-emacs/editor-extra-modes.ss
+++ b/src/jerboa-emacs/editor-extra-modes.ss
@@ -12395,3 +12395,50 @@
       (lambda (pkg)
         (echo-message! echo (str "ELP: instrumenting all functions in " pkg))))))
 
+;; Round 70 — Yasnippet, Tempel, abbreviations (batch 1)
+(def (cmd-yasnippet-new-snippet app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "YASnippet: creating new snippet")))
+
+(def (cmd-yasnippet-visit-snippet-file app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Visit snippet: "
+      (lambda (name)
+        (echo-message! echo (str "YASnippet: visiting snippet '" name "'"))))))
+
+(def (cmd-yasnippet-insert-snippet app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Insert snippet: "
+      (lambda (name)
+        (echo-message! echo (str "YASnippet: inserted '" name "'"))))))
+
+(def (cmd-yasnippet-expand app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "YASnippet: expanded snippet at point")))
+
+(def (cmd-yasnippet-reload-all app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "YASnippet: reloaded all snippet tables")))
+
+(def (cmd-yasnippet-describe-tables app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "YASnippet: showing snippet tables")))
+
+(def (cmd-tempel-insert app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Tempel template: "
+      (lambda (name)
+        (echo-message! echo (str "Tempel: inserted template '" name "'"))))))
+
+(def (cmd-tempel-expand app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Tempel: expanded template at point")))
+
+(def (cmd-tempel-complete app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Tempel: completing template")))
+
+(def (cmd-tempel-next app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Tempel: moved to next field")))
+
diff --git a/src/jerboa-emacs/editor-extra-regs2.ss b/src/jerboa-emacs/editor-extra-regs2.ss
index 49af1f9..ae77bc2 100644
--- a/src/jerboa-emacs/editor-extra-regs2.ss
+++ b/src/jerboa-emacs/editor-extra-regs2.ss
@@ -2908,4 +2908,25 @@
   (register-command! 'pp-eval-expression cmd-pp-eval-expression)
   (register-command! 'pp-eval-last-sexp cmd-pp-eval-last-sexp)
   (register-command! 'pp-macroexpand-last-sexp cmd-pp-macroexpand-last-sexp)
+  ;; Round 70
+  (register-command! 'yasnippet-new-snippet cmd-yasnippet-new-snippet)
+  (register-command! 'yasnippet-visit-snippet-file cmd-yasnippet-visit-snippet-file)
+  (register-command! 'yasnippet-insert-snippet cmd-yasnippet-insert-snippet)
+  (register-command! 'yasnippet-expand cmd-yasnippet-expand)
+  (register-command! 'yasnippet-reload-all cmd-yasnippet-reload-all)
+  (register-command! 'yasnippet-describe-tables cmd-yasnippet-describe-tables)
+  (register-command! 'tempel-insert cmd-tempel-insert)
+  (register-command! 'tempel-expand cmd-tempel-expand)
+  (register-command! 'tempel-complete cmd-tempel-complete)
+  (register-command! 'tempel-next cmd-tempel-next)
+  (register-command! 'tempel-previous cmd-tempel-previous)
+  (register-command! 'tempo-forward-mark cmd-tempo-forward-mark)
+  (register-command! 'tempo-backward-mark cmd-tempo-backward-mark)
+  (register-command! 'edit-abbrevs cmd-edit-abbrevs)
+  (register-command! 'write-abbrev-file cmd-write-abbrev-file)
+  (register-command! 'read-abbrev-file cmd-read-abbrev-file)
+  (register-command! 'inverse-add-global-abbrev cmd-inverse-add-global-abbrev)
+  (register-command! 'inverse-add-mode-abbrev cmd-inverse-add-mode-abbrev)
+  (register-command! 'insert-abbrevs cmd-insert-abbrevs)
+  (register-command! 'kill-all-abbrevs cmd-kill-all-abbrevs)
 )