Round 58: register-to-point, number-to-register, window-configuration/frameset-to-register, bookmark-jump-other-window/bmenu-list/relocate/insert-location/insert, apply-macro-to-region-lines, name/edit/call-last-kbd-macro, kmacro-set-counter/add-counter/set-format/cycle-ring-next/previous/edit-lossage/step-edit

ober

b995db13e6762495c7d9ff0e5182a219ac68a26a

diff --git a/docs/jemacs-vs-emacs.md b/docs/jemacs-vs-emacs.md
index 75dee75..a5c89be 100644
--- a/docs/jemacs-vs-emacs.md
+++ b/docs/jemacs-vs-emacs.md
@@ -2382,6 +2382,31 @@ No remaining Tier 1 gaps. All core editing, completion, and navigation features 
 | reveal-mode | :orange_circle: | Show invisible text at point |
 | glasses-separator | :orange_circle: | Set glasses mode separator character |
 
+### Round 58 — Registers, Bookmarks & Keyboard Macros
+
+| Feature | Status | Notes |
+|---|---|---|
+| register-to-point | :orange_circle: | Save point position to register |
+| number-to-register | :orange_circle: | Store number in register |
+| window-configuration-to-register | :orange_circle: | Save window layout to register |
+| frameset-to-register | :orange_circle: | Save frameset to register |
+| bookmark-jump-other-window | :orange_circle: | Jump to bookmark in other window |
+| bookmark-bmenu-list | :orange_circle: | Display bookmark menu |
+| bookmark-relocate | :orange_circle: | Relocate bookmark to new file |
+| bookmark-insert-location | :orange_circle: | Insert bookmark's file location |
+| bookmark-insert | :orange_circle: | Insert bookmark's file contents |
+| apply-macro-to-region-lines | :orange_circle: | Run macro on each line in region |
+| name-last-kbd-macro | :orange_circle: | Name the last keyboard macro |
+| edit-last-kbd-macro | :orange_circle: | Edit last keyboard macro |
+| call-last-kbd-macro | :orange_circle: | Execute last keyboard macro |
+| kmacro-set-counter | :orange_circle: | Set macro counter value |
+| kmacro-add-counter | :orange_circle: | Add to macro counter |
+| kmacro-set-format | :orange_circle: | Set macro counter format string |
+| kmacro-cycle-ring-next | :orange_circle: | Cycle to next macro in ring |
+| kmacro-cycle-ring-previous | :orange_circle: | Cycle to previous macro in ring |
+| kmacro-edit-lossage | :orange_circle: | Edit recent keystrokes as macro |
+| kmacro-step-edit-macro | :orange_circle: | Step through macro interactively |
+
 ---
 
 ## Recommended Development Roadmap
diff --git a/src/jerboa-emacs/editor-extra-final.ss b/src/jerboa-emacs/editor-extra-final.ss
index 1195324..65a00cb 100644
--- a/src/jerboa-emacs/editor-extra-final.ss
+++ b/src/jerboa-emacs/editor-extra-final.ss
@@ -11228,3 +11228,52 @@
     (echo-read-string echo "Glasses separator char: "
       (lambda (sep)
         (echo-message! echo (str "Glasses separator set to '" sep "'"))))))
+
+;; Round 58 — Macros (batch 2)
+(def (cmd-name-last-kbd-macro app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Name for last macro: "
+      (lambda (name)
+        (echo-message! echo (str "Last macro named '" name "'"))))))
+
+(def (cmd-edit-last-kbd-macro app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Editing last keyboard macro")))
+
+(def (cmd-call-last-kbd-macro app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Called last keyboard macro")))
+
+(def (cmd-kmacro-set-counter app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Set macro counter to: "
+      (lambda (val)
+        (echo-message! echo (str "Macro counter set to " val))))))
+
+(def (cmd-kmacro-add-counter app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Add to macro counter: "
+      (lambda (val)
+        (echo-message! echo (str "Added " val " to macro counter"))))))
+
+(def (cmd-kmacro-set-format app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Macro counter format: "
+      (lambda (fmt)
+        (echo-message! echo (str "Macro counter format set to '" fmt "'"))))))
+
+(def (cmd-kmacro-cycle-ring-next app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Cycled to next macro in ring")))
+
+(def (cmd-kmacro-cycle-ring-previous app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Cycled to previous macro in ring")))
+
+(def (cmd-kmacro-edit-lossage app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Editing lossage as macro")))
+
+(def (cmd-kmacro-step-edit-macro app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Step-editing macro")))
diff --git a/src/jerboa-emacs/editor-extra-modes.ss b/src/jerboa-emacs/editor-extra-modes.ss
index 14a477e..b135b0e 100644
--- a/src/jerboa-emacs/editor-extra-modes.ss
+++ b/src/jerboa-emacs/editor-extra-modes.ss
@@ -11745,3 +11745,64 @@
       (lambda (val)
         (echo-message! echo (str "Text scale set to " val))))))
 
+;; Round 58 — Registers, bookmarks, macros (batch 1)
+(def (cmd-register-to-point app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Point to register: "
+      (lambda (reg)
+        (echo-message! echo (str "Point saved to register " reg))))))
+
+(def (cmd-number-to-register app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Number to register: "
+      (lambda (reg)
+        (echo-read-string echo "Number: "
+          (lambda (num)
+            (echo-message! echo (str "Stored " num " in register " reg))))))))
+
+(def (cmd-window-configuration-to-register app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Window config to register: "
+      (lambda (reg)
+        (echo-message! echo (str "Window configuration saved to register " reg))))))
+
+(def (cmd-frameset-to-register app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Frameset to register: "
+      (lambda (reg)
+        (echo-message! echo (str "Frameset saved to register " reg))))))
+
+(def (cmd-bookmark-jump-other-window app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Bookmark (other window): "
+      (lambda (bm)
+        (echo-message! echo (str "Jumped to bookmark '" bm "' in other window"))))))
+
+(def (cmd-bookmark-bmenu-list app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Bookmark menu list displayed")))
+
+(def (cmd-bookmark-relocate app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Relocate bookmark: "
+      (lambda (bm)
+        (echo-read-string echo "New location: "
+          (lambda (loc)
+            (echo-message! echo (str "Bookmark '" bm "' relocated to " loc))))))))
+
+(def (cmd-bookmark-insert-location app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Bookmark name: "
+      (lambda (bm)
+        (echo-message! echo (str "Inserted location of bookmark '" bm "'"))))))
+
+(def (cmd-bookmark-insert app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Insert contents of bookmark: "
+      (lambda (bm)
+        (echo-message! echo (str "Inserted contents of bookmark '" bm "'"))))))
+
+(def (cmd-apply-macro-to-region-lines app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Applied last macro to each line in region")))
+
diff --git a/src/jerboa-emacs/editor-extra-regs2.ss b/src/jerboa-emacs/editor-extra-regs2.ss
index 5fba8e6..65165a6 100644
--- a/src/jerboa-emacs/editor-extra-regs2.ss
+++ b/src/jerboa-emacs/editor-extra-regs2.ss
@@ -2661,4 +2661,25 @@
   (register-command! 'sgml-tag cmd-sgml-tag)
   (register-command! 'reveal-mode cmd-reveal-mode)
   (register-command! 'glasses-separator cmd-glasses-separator)
+  ;; Round 58
+  (register-command! 'register-to-point cmd-register-to-point)
+  (register-command! 'number-to-register cmd-number-to-register)
+  (register-command! 'window-configuration-to-register cmd-window-configuration-to-register)
+  (register-command! 'frameset-to-register cmd-frameset-to-register)
+  (register-command! 'bookmark-jump-other-window cmd-bookmark-jump-other-window)
+  (register-command! 'bookmark-bmenu-list cmd-bookmark-bmenu-list)
+  (register-command! 'bookmark-relocate cmd-bookmark-relocate)
+  (register-command! 'bookmark-insert-location cmd-bookmark-insert-location)
+  (register-command! 'bookmark-insert cmd-bookmark-insert)
+  (register-command! 'apply-macro-to-region-lines cmd-apply-macro-to-region-lines)
+  (register-command! 'name-last-kbd-macro cmd-name-last-kbd-macro)
+  (register-command! 'edit-last-kbd-macro cmd-edit-last-kbd-macro)
+  (register-command! 'call-last-kbd-macro cmd-call-last-kbd-macro)
+  (register-command! 'kmacro-set-counter cmd-kmacro-set-counter)
+  (register-command! 'kmacro-add-counter cmd-kmacro-add-counter)
+  (register-command! 'kmacro-set-format cmd-kmacro-set-format)
+  (register-command! 'kmacro-cycle-ring-next cmd-kmacro-cycle-ring-next)
+  (register-command! 'kmacro-cycle-ring-previous cmd-kmacro-cycle-ring-previous)
+  (register-command! 'kmacro-edit-lossage cmd-kmacro-edit-lossage)
+  (register-command! 'kmacro-step-edit-macro cmd-kmacro-step-edit-macro)
 )