Round 72: facemenu-set-foreground/background/face/intangible/invisible, facemenu-remove-all/face-props, set-face-attribute/foreground/background/bold-p/italic-p, color-name-to-rgb, highlight-parentheses, prism/prism-whitespace, fontify-face, font-lock-studio/profiler, ov-highlight

ober

2e08cb06f1ec790268d2b8208fbfd2b5b23a9a13

diff --git a/docs/jemacs-vs-emacs.md b/docs/jemacs-vs-emacs.md
index 426dc4b..22f40ac 100644
--- a/docs/jemacs-vs-emacs.md
+++ b/docs/jemacs-vs-emacs.md
@@ -2726,6 +2726,31 @@ No remaining Tier 1 gaps. All core editing, completion, and navigation features 
 | comint-truncate-buffer | :orange_circle: | Truncate comint buffer |
 | comint-write-output | :orange_circle: | Write output to file |
 
+### Round 72 — Face Menu, Font-Lock & Highlighting
+
+| Feature | Status | Notes |
+|---|---|---|
+| facemenu-set-foreground | :orange_circle: | Set text foreground color |
+| facemenu-set-background | :orange_circle: | Set text background color |
+| facemenu-set-face | :orange_circle: | Apply named face to region |
+| facemenu-set-intangible | :orange_circle: | Make region intangible |
+| facemenu-set-invisible | :orange_circle: | Make region invisible |
+| facemenu-remove-all | :orange_circle: | Remove all text properties |
+| facemenu-remove-face-props | :orange_circle: | Remove face properties |
+| set-face-attribute | :orange_circle: | Set face attribute |
+| set-face-foreground | :orange_circle: | Set face foreground |
+| set-face-background | :orange_circle: | Set face background |
+| set-face-bold-p | :orange_circle: | Toggle face bold |
+| set-face-italic-p | :orange_circle: | Toggle face italic |
+| color-name-to-rgb | :orange_circle: | Convert color name to RGB |
+| highlight-parentheses-mode | :orange_circle: | Highlight surrounding parens |
+| prism-mode | :orange_circle: | Depth-based code coloring |
+| prism-whitespace-mode | :orange_circle: | Prism for whitespace |
+| fontify-face-mode | :orange_circle: | Show face names in color |
+| font-lock-studio | :orange_circle: | Interactive font-lock debugger |
+| font-lock-profiler | :orange_circle: | Profile font-lock performance |
+| ov-highlight-mode | :orange_circle: | Overlay-based highlighting |
+
 ---
 
 ## Recommended Development Roadmap
diff --git a/src/jerboa-emacs/editor-extra-final.ss b/src/jerboa-emacs/editor-extra-final.ss
index 2bf6893..e32f0ee 100644
--- a/src/jerboa-emacs/editor-extra-final.ss
+++ b/src/jerboa-emacs/editor-extra-final.ss
@@ -11958,3 +11958,65 @@
     (echo-read-string echo "Write comint output to: "
       (lambda (file)
         (echo-message! echo (str "Comint: output written to " file))))))
+
+;; Round 72 — Font-lock, highlighting (batch 2)
+(def (cmd-set-face-bold-p app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Face: "
+      (lambda (face)
+        (echo-message! echo (str "Toggled bold on face " face))))))
+
+(def (cmd-set-face-italic-p app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Face: "
+      (lambda (face)
+        (echo-message! echo (str "Toggled italic on face " face))))))
+
+(def (cmd-color-name-to-rgb app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Color name: "
+      (lambda (name)
+        (echo-message! echo (str "Color '" name "' → RGB values"))))))
+
+(def (cmd-highlight-parentheses-mode app)
+  (let* ((echo (app-state-echo app)))
+    (toggle-mode! app 'highlight-parentheses)
+    (if (mode-enabled? app 'highlight-parentheses)
+      (echo-message! echo "Highlight parentheses mode enabled")
+      (echo-message! echo "Highlight parentheses mode disabled"))))
+
+(def (cmd-prism-mode app)
+  (let* ((echo (app-state-echo app)))
+    (toggle-mode! app 'prism)
+    (if (mode-enabled? app 'prism)
+      (echo-message! echo "Prism mode enabled (depth-based coloring)")
+      (echo-message! echo "Prism mode disabled"))))
+
+(def (cmd-prism-whitespace-mode app)
+  (let* ((echo (app-state-echo app)))
+    (toggle-mode! app 'prism-whitespace)
+    (if (mode-enabled? app 'prism-whitespace)
+      (echo-message! echo "Prism whitespace mode enabled")
+      (echo-message! echo "Prism whitespace mode disabled"))))
+
+(def (cmd-fontify-face-mode app)
+  (let* ((echo (app-state-echo app)))
+    (toggle-mode! app 'fontify-face)
+    (if (mode-enabled? app 'fontify-face)
+      (echo-message! echo "Fontify face mode enabled (show face names in color)")
+      (echo-message! echo "Fontify face mode disabled"))))
+
+(def (cmd-font-lock-studio app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Font-lock studio: interactive font-lock debugger")))
+
+(def (cmd-font-lock-profiler app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Font-lock profiler: profiling font-lock keywords")))
+
+(def (cmd-ov-highlight-mode app)
+  (let* ((echo (app-state-echo app)))
+    (toggle-mode! app 'ov-highlight)
+    (if (mode-enabled? app 'ov-highlight)
+      (echo-message! echo "Overlay highlight mode enabled")
+      (echo-message! echo "Overlay highlight mode disabled"))))
diff --git a/src/jerboa-emacs/editor-extra-modes.ss b/src/jerboa-emacs/editor-extra-modes.ss
index 6adecb9..1367540 100644
--- a/src/jerboa-emacs/editor-extra-modes.ss
+++ b/src/jerboa-emacs/editor-extra-modes.ss
@@ -12483,3 +12483,64 @@
   (let* ((echo (app-state-echo app)))
     (echo-message! echo "Comint: dynamic completion")))
 
+;; Round 72 — Face menu, font-lock, highlighting (batch 1)
+(def (cmd-facemenu-set-foreground app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Foreground color: "
+      (lambda (color)
+        (echo-message! echo (str "Set foreground to " color))))))
+
+(def (cmd-facemenu-set-background app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Background color: "
+      (lambda (color)
+        (echo-message! echo (str "Set background to " color))))))
+
+(def (cmd-facemenu-set-face app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Set face: "
+      (lambda (face)
+        (echo-message! echo (str "Applied face '" face "'"))))))
+
+(def (cmd-facemenu-set-intangible app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Region set to intangible")))
+
+(def (cmd-facemenu-set-invisible app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Region set to invisible")))
+
+(def (cmd-facemenu-remove-all app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "All text properties removed from region")))
+
+(def (cmd-facemenu-remove-face-props app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Face properties removed from region")))
+
+(def (cmd-set-face-attribute app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Face: "
+      (lambda (face)
+        (echo-read-string echo "Attribute: "
+          (lambda (attr)
+            (echo-read-string echo "Value: "
+              (lambda (val)
+                (echo-message! echo (str "Set " face " " attr " to " val))))))))))
+
+(def (cmd-set-face-foreground app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Face: "
+      (lambda (face)
+        (echo-read-string echo "Foreground color: "
+          (lambda (color)
+            (echo-message! echo (str "Set " face " foreground to " color))))))))
+
+(def (cmd-set-face-background app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Face: "
+      (lambda (face)
+        (echo-read-string echo "Background color: "
+          (lambda (color)
+            (echo-message! echo (str "Set " face " background to " color))))))))
+
diff --git a/src/jerboa-emacs/editor-extra-regs2.ss b/src/jerboa-emacs/editor-extra-regs2.ss
index ae639f6..d585d14 100644
--- a/src/jerboa-emacs/editor-extra-regs2.ss
+++ b/src/jerboa-emacs/editor-extra-regs2.ss
@@ -2949,4 +2949,25 @@
   (register-command! 'dirtrack-mode cmd-dirtrack-mode)
   (register-command! 'comint-truncate-buffer cmd-comint-truncate-buffer)
   (register-command! 'comint-write-output cmd-comint-write-output)
+  ;; Round 72
+  (register-command! 'facemenu-set-foreground cmd-facemenu-set-foreground)
+  (register-command! 'facemenu-set-background cmd-facemenu-set-background)
+  (register-command! 'facemenu-set-face cmd-facemenu-set-face)
+  (register-command! 'facemenu-set-intangible cmd-facemenu-set-intangible)
+  (register-command! 'facemenu-set-invisible cmd-facemenu-set-invisible)
+  (register-command! 'facemenu-remove-all cmd-facemenu-remove-all)
+  (register-command! 'facemenu-remove-face-props cmd-facemenu-remove-face-props)
+  (register-command! 'set-face-attribute cmd-set-face-attribute)
+  (register-command! 'set-face-foreground cmd-set-face-foreground)
+  (register-command! 'set-face-background cmd-set-face-background)
+  (register-command! 'set-face-bold-p cmd-set-face-bold-p)
+  (register-command! 'set-face-italic-p cmd-set-face-italic-p)
+  (register-command! 'color-name-to-rgb cmd-color-name-to-rgb)
+  (register-command! 'highlight-parentheses-mode cmd-highlight-parentheses-mode)
+  (register-command! 'prism-mode cmd-prism-mode)
+  (register-command! 'prism-whitespace-mode cmd-prism-whitespace-mode)
+  (register-command! 'fontify-face-mode cmd-fontify-face-mode)
+  (register-command! 'font-lock-studio cmd-font-lock-studio)
+  (register-command! 'font-lock-profiler cmd-font-lock-profiler)
+  (register-command! 'ov-highlight-mode cmd-ov-highlight-mode)
 )