Round 123: Add 20 Profiler, Mail, Charset, Image, Frame commands

ober

e574c6c17df6732a8ea7b36cc94eb1a75eb3ad0d

diff --git a/docs/jemacs-vs-emacs.md b/docs/jemacs-vs-emacs.md
index b075daf..0b8b0e3 100644
--- a/docs/jemacs-vs-emacs.md
+++ b/docs/jemacs-vs-emacs.md
@@ -4045,6 +4045,33 @@ No remaining Tier 1 gaps. All core editing, completion, and navigation features 
 
 ---
 
+### Round 123 — Profiler, Mail, Charset, Image, Frame
+
+| Command | Status | Description |
+|---------|--------|-------------|
+| profiler-reset | :orange_circle: | Reset profiler data |
+| proced-mark-all | :orange_circle: | Mark all processes |
+| zones-mode | :orange_circle: | Toggle zones mode |
+| global-auto-composition-mode | :orange_circle: | Toggle global auto-composition |
+| list-charset-chars | :orange_circle: | List characters in charset |
+| list-character-sets | :orange_circle: | List available character sets |
+| mail-cc | :orange_circle: | Set mail CC field |
+| mail-bcc | :orange_circle: | Set mail BCC field |
+| mail-subject | :orange_circle: | Set mail subject |
+| mail-to | :orange_circle: | Set mail To field |
+| mail-text | :orange_circle: | Move to mail text body |
+| mail-signature | :orange_circle: | Insert mail signature |
+| browse-url-of-file | :orange_circle: | Open file in browser |
+| eww-browse-with-external-browser | :orange_circle: | Open URL in external browser |
+| image-mode-fit-frame | :orange_circle: | Fit image to frame |
+| image-transform-reset | :orange_circle: | Reset image transform |
+| view-emacs-todo | :orange_circle: | View Emacs TODO list |
+| view-external-packages | :orange_circle: | View external packages |
+| package-install-selected-packages | :orange_circle: | Install selected packages |
+| select-frame-by-name | :orange_circle: | Select frame by name |
+
+---
+
 ## Recommended Development Roadmap
 
 > *Reprioritized based on the user's actual Emacs workflow*
diff --git a/src/jerboa-emacs/editor-extra-final.ss b/src/jerboa-emacs/editor-extra-final.ss
index b71ce46..3ac78ed 100644
--- a/src/jerboa-emacs/editor-extra-final.ss
+++ b/src/jerboa-emacs/editor-extra-final.ss
@@ -14426,3 +14426,47 @@
 (def (cmd-crux-top-join-line app)
   (let* ((echo (app-state-echo app)))
     (echo-message! echo "Crux: joined line with previous")))
+
+;;; Round 123 — Profiler, Mail, Charset, Image, Frame (batch 2)
+
+(def (cmd-mail-text app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Mail: moved to text body")))
+
+(def (cmd-mail-signature app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Mail: inserted signature")))
+
+(def (cmd-browse-url-of-file app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Browse: opening current file in browser")))
+
+(def (cmd-eww-browse-with-external-browser app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "EWW: opening URL in external browser")))
+
+(def (cmd-image-mode-fit-frame app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Image: fit to frame")))
+
+(def (cmd-image-transform-reset app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Image: transform reset")))
+
+(def (cmd-view-emacs-todo app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Viewing Emacs TODO list")))
+
+(def (cmd-view-external-packages app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Viewing external packages")))
+
+(def (cmd-package-install-selected-packages app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Package: installing selected packages")))
+
+(def (cmd-select-frame-by-name app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Frame name: "
+      (lambda (name)
+        (echo-message! echo (str "Selected frame: " name))))))
diff --git a/src/jerboa-emacs/editor-extra-modes.ss b/src/jerboa-emacs/editor-extra-modes.ss
index 21238e0..33f6861 100644
--- a/src/jerboa-emacs/editor-extra-modes.ss
+++ b/src/jerboa-emacs/editor-extra-modes.ss
@@ -15023,3 +15023,61 @@
 (def (cmd-bookmark-bmenu-save app)
   (let* ((echo (app-state-echo app)))
     (echo-message! echo "Bookmark: saved bookmark list")))
+
+;;; Round 123 — Profiler, Mail, Charset, Image, Frame (batch 1)
+
+(def (cmd-profiler-reset app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Profiler: reset")))
+
+(def (cmd-proced-mark-all app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Proced: marked all processes")))
+
+(def (cmd-zones-mode app)
+  (let* ((echo (app-state-echo app)))
+    (toggle-mode! app 'zones)
+    (if (mode-enabled? app 'zones)
+      (echo-message! echo "Zones mode enabled")
+      (echo-message! echo "Zones mode disabled"))))
+
+(def (cmd-global-auto-composition-mode app)
+  (let* ((echo (app-state-echo app)))
+    (toggle-mode! app 'global-auto-composition)
+    (if (mode-enabled? app 'global-auto-composition)
+      (echo-message! echo "Global Auto-Composition mode enabled")
+      (echo-message! echo "Global Auto-Composition mode disabled"))))
+
+(def (cmd-list-charset-chars app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Charset: "
+      (lambda (charset)
+        (echo-message! echo (str "Displaying characters for charset: " charset))))))
+
+(def (cmd-list-character-sets app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Displaying list of character sets")))
+
+(def (cmd-mail-cc app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "CC: "
+      (lambda (addr)
+        (echo-message! echo (str "Mail CC: " addr))))))
+
+(def (cmd-mail-bcc app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "BCC: "
+      (lambda (addr)
+        (echo-message! echo (str "Mail BCC: " addr))))))
+
+(def (cmd-mail-subject app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Subject: "
+      (lambda (subj)
+        (echo-message! echo (str "Mail Subject: " subj))))))
+
+(def (cmd-mail-to app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "To: "
+      (lambda (addr)
+        (echo-message! echo (str "Mail To: " addr))))))
diff --git a/src/jerboa-emacs/editor-extra-regs2.ss b/src/jerboa-emacs/editor-extra-regs2.ss
index c0d051a..61ee21c 100644
--- a/src/jerboa-emacs/editor-extra-regs2.ss
+++ b/src/jerboa-emacs/editor-extra-regs2.ss
@@ -4016,4 +4016,25 @@
   (register-command! 'crux-smart-open-line cmd-crux-smart-open-line)
   (register-command! 'crux-smart-open-line-above cmd-crux-smart-open-line-above)
   (register-command! 'crux-top-join-line cmd-crux-top-join-line)
+  ;; Round 123 — Profiler, Mail, Charset, Image, Frame
+  (register-command! 'profiler-reset cmd-profiler-reset)
+  (register-command! 'proced-mark-all cmd-proced-mark-all)
+  (register-command! 'zones-mode cmd-zones-mode)
+  (register-command! 'global-auto-composition-mode cmd-global-auto-composition-mode)
+  (register-command! 'list-charset-chars cmd-list-charset-chars)
+  (register-command! 'list-character-sets cmd-list-character-sets)
+  (register-command! 'mail-cc cmd-mail-cc)
+  (register-command! 'mail-bcc cmd-mail-bcc)
+  (register-command! 'mail-subject cmd-mail-subject)
+  (register-command! 'mail-to cmd-mail-to)
+  (register-command! 'mail-text cmd-mail-text)
+  (register-command! 'mail-signature cmd-mail-signature)
+  (register-command! 'browse-url-of-file cmd-browse-url-of-file)
+  (register-command! 'eww-browse-with-external-browser cmd-eww-browse-with-external-browser)
+  (register-command! 'image-mode-fit-frame cmd-image-mode-fit-frame)
+  (register-command! 'image-transform-reset cmd-image-transform-reset)
+  (register-command! 'view-emacs-todo cmd-view-emacs-todo)
+  (register-command! 'view-external-packages cmd-view-external-packages)
+  (register-command! 'package-install-selected-packages cmd-package-install-selected-packages)
+  (register-command! 'select-frame-by-name cmd-select-frame-by-name)
 )