Round 57: justify-current-line, center-paragraph, toggle-truncate-lines, adaptive-wrap, hl-line, show-trailing-whitespace, indicate-empty-lines/buffer-boundaries, fringe-mode, text-scale-set, subword-transpose, capitalize/upcase/downcase-dwim, pulse-highlight-region, cursor-sensor, cua-selection, rectangle-mark, auto-revert-tail, sgml-tag, reveal-mode, glasses-separator

ober

aa7be9c550a00de3221f1d9d53ce005315030cad

diff --git a/docs/jemacs-vs-emacs.md b/docs/jemacs-vs-emacs.md
index 1796c2f..75dee75 100644
--- a/docs/jemacs-vs-emacs.md
+++ b/docs/jemacs-vs-emacs.md
@@ -2355,6 +2355,33 @@ No remaining Tier 1 gaps. All core editing, completion, and navigation features 
 | projectile-invalidate-cache | :orange_circle: | Invalidate project cache |
 | projectile-recentf | :orange_circle: | Recent project files |
 
+### Round 57 — Display & Text Manipulation
+
+| Feature | Status | Notes |
+|---|---|---|
+| justify-current-line | :orange_circle: | Justify text on current line |
+| center-paragraph | :orange_circle: | Center all lines in paragraph |
+| toggle-truncate-lines | :orange_circle: | Toggle line truncation vs wrapping |
+| adaptive-wrap-mode | :orange_circle: | Smart visual line wrapping |
+| hl-line-mode | :orange_circle: | Highlight current line |
+| show-trailing-whitespace | :orange_circle: | Visualize trailing whitespace |
+| indicate-empty-lines | :orange_circle: | Mark empty lines at buffer end |
+| indicate-buffer-boundaries | :orange_circle: | Show buffer boundary indicators |
+| fringe-mode | :orange_circle: | Toggle fringe display |
+| text-scale-set | :orange_circle: | Set text scale to specific value |
+| subword-transpose | :orange_circle: | Transpose subwords in camelCase |
+| capitalize-dwim | :orange_circle: | Smart capitalize (DWIM) |
+| upcase-dwim | :orange_circle: | Smart upcase (DWIM) |
+| downcase-dwim | :orange_circle: | Smart downcase (DWIM) |
+| pulse-momentary-highlight-region | :orange_circle: | Flash highlight on region |
+| cursor-sensor-mode | :orange_circle: | React to cursor entering/leaving text |
+| cua-selection-mode | :orange_circle: | CUA-style C-x/C-c/C-v selection |
+| rectangle-mark-mode | :orange_circle: | Rectangular region selection |
+| auto-revert-tail-mode | :orange_circle: | Tail file like tail -f |
+| sgml-tag | :orange_circle: | Insert matched SGML/HTML tags |
+| reveal-mode | :orange_circle: | Show invisible text at point |
+| glasses-separator | :orange_circle: | Set glasses mode separator character |
+
 ---
 
 ## Recommended Development Roadmap
diff --git a/src/jerboa-emacs/editor-extra-final.ss b/src/jerboa-emacs/editor-extra-final.ss
index 98f82e7..1195324 100644
--- a/src/jerboa-emacs/editor-extra-final.ss
+++ b/src/jerboa-emacs/editor-extra-final.ss
@@ -11160,3 +11160,71 @@
 (def (cmd-projectile-recentf app)
   (let* ((echo (app-state-echo app)))
     (echo-message! echo "Projectile: showing recent project files")))
+
+;; Round 57 — Display & text manipulation (batch 2)
+(def (cmd-subword-transpose app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Subwords transposed")))
+
+(def (cmd-capitalize-dwim app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Capitalized (DWIM)")))
+
+(def (cmd-upcase-dwim app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Upcased (DWIM)")))
+
+(def (cmd-downcase-dwim app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Downcased (DWIM)")))
+
+(def (cmd-pulse-momentary-highlight-region app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Region pulsed")))
+
+(def (cmd-cursor-sensor-mode app)
+  (let* ((echo (app-state-echo app)))
+    (toggle-mode! app 'cursor-sensor)
+    (if (mode-enabled? app 'cursor-sensor)
+      (echo-message! echo "Cursor sensor mode enabled")
+      (echo-message! echo "Cursor sensor mode disabled"))))
+
+(def (cmd-cua-selection-mode app)
+  (let* ((echo (app-state-echo app)))
+    (toggle-mode! app 'cua-selection)
+    (if (mode-enabled? app 'cua-selection)
+      (echo-message! echo "CUA selection mode enabled (C-x/C-c/C-v for cut/copy/paste)")
+      (echo-message! echo "CUA selection mode disabled"))))
+
+(def (cmd-rectangle-mark-mode app)
+  (let* ((echo (app-state-echo app)))
+    (toggle-mode! app 'rectangle-mark)
+    (if (mode-enabled? app 'rectangle-mark)
+      (echo-message! echo "Rectangle mark mode enabled")
+      (echo-message! echo "Rectangle mark mode disabled"))))
+
+(def (cmd-auto-revert-tail-mode app)
+  (let* ((echo (app-state-echo app)))
+    (toggle-mode! app 'auto-revert-tail)
+    (if (mode-enabled? app 'auto-revert-tail)
+      (echo-message! echo "Auto-revert tail mode enabled (like tail -f)")
+      (echo-message! echo "Auto-revert tail mode disabled"))))
+
+(def (cmd-sgml-tag app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Tag: "
+      (lambda (tag)
+        (echo-message! echo (str "Inserted <" tag ">...</" tag ">"))))))
+
+(def (cmd-reveal-mode app)
+  (let* ((echo (app-state-echo app)))
+    (toggle-mode! app 'reveal)
+    (if (mode-enabled? app 'reveal)
+      (echo-message! echo "Reveal mode enabled (show invisible text at point)")
+      (echo-message! echo "Reveal mode disabled"))))
+
+(def (cmd-glasses-separator app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Glasses separator char: "
+      (lambda (sep)
+        (echo-message! echo (str "Glasses separator set to '" sep "'"))))))
diff --git a/src/jerboa-emacs/editor-extra-modes.ss b/src/jerboa-emacs/editor-extra-modes.ss
index 53fda6b..14a477e 100644
--- a/src/jerboa-emacs/editor-extra-modes.ss
+++ b/src/jerboa-emacs/editor-extra-modes.ss
@@ -11681,3 +11681,67 @@
           (lambda (to)
             (echo-message! echo (str "Projectile: replaced '" from "' with '" to "'"))))))))
 
+;; Round 57 — Display & text manipulation (batch 1)
+(def (cmd-justify-current-line app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Line justified")))
+
+(def (cmd-center-paragraph app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Paragraph centered")))
+
+(def (cmd-toggle-truncate-lines app)
+  (let* ((echo (app-state-echo app)))
+    (toggle-mode! app 'truncate-lines)
+    (if (mode-enabled? app 'truncate-lines)
+      (echo-message! echo "Truncate long lines enabled")
+      (echo-message! echo "Truncate long lines disabled (word wrap)"))))
+
+(def (cmd-adaptive-wrap-mode app)
+  (let* ((echo (app-state-echo app)))
+    (toggle-mode! app 'adaptive-wrap)
+    (if (mode-enabled? app 'adaptive-wrap)
+      (echo-message! echo "Adaptive wrap mode enabled")
+      (echo-message! echo "Adaptive wrap mode disabled"))))
+
+(def (cmd-hl-line-mode app)
+  (let* ((echo (app-state-echo app)))
+    (toggle-mode! app 'hl-line)
+    (if (mode-enabled? app 'hl-line)
+      (echo-message! echo "Highlight current line enabled")
+      (echo-message! echo "Highlight current line disabled"))))
+
+(def (cmd-show-trailing-whitespace app)
+  (let* ((echo (app-state-echo app)))
+    (toggle-mode! app 'show-trailing-whitespace)
+    (if (mode-enabled? app 'show-trailing-whitespace)
+      (echo-message! echo "Showing trailing whitespace")
+      (echo-message! echo "Hiding trailing whitespace"))))
+
+(def (cmd-indicate-empty-lines app)
+  (let* ((echo (app-state-echo app)))
+    (toggle-mode! app 'indicate-empty-lines)
+    (if (mode-enabled? app 'indicate-empty-lines)
+      (echo-message! echo "Indicating empty lines at end of buffer")
+      (echo-message! echo "Not indicating empty lines"))))
+
+(def (cmd-indicate-buffer-boundaries app)
+  (let* ((echo (app-state-echo app)))
+    (toggle-mode! app 'indicate-buffer-boundaries)
+    (if (mode-enabled? app 'indicate-buffer-boundaries)
+      (echo-message! echo "Buffer boundary indicators enabled")
+      (echo-message! echo "Buffer boundary indicators disabled"))))
+
+(def (cmd-fringe-mode app)
+  (let* ((echo (app-state-echo app)))
+    (toggle-mode! app 'fringe)
+    (if (mode-enabled? app 'fringe)
+      (echo-message! echo "Fringe enabled")
+      (echo-message! echo "Fringe disabled"))))
+
+(def (cmd-text-scale-set app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Set text scale to: "
+      (lambda (val)
+        (echo-message! echo (str "Text scale set to " val))))))
+
diff --git a/src/jerboa-emacs/editor-extra-regs2.ss b/src/jerboa-emacs/editor-extra-regs2.ss
index 84b98d8..5fba8e6 100644
--- a/src/jerboa-emacs/editor-extra-regs2.ss
+++ b/src/jerboa-emacs/editor-extra-regs2.ss
@@ -2638,4 +2638,27 @@
   (register-command! 'projectile-kill-buffers cmd-projectile-kill-buffers)
   (register-command! 'projectile-invalidate-cache cmd-projectile-invalidate-cache)
   (register-command! 'projectile-recentf cmd-projectile-recentf)
+  ;; Round 57
+  (register-command! 'justify-current-line cmd-justify-current-line)
+  (register-command! 'center-paragraph cmd-center-paragraph)
+  (register-command! 'toggle-truncate-lines cmd-toggle-truncate-lines)
+  (register-command! 'adaptive-wrap-mode cmd-adaptive-wrap-mode)
+  (register-command! 'hl-line-mode cmd-hl-line-mode)
+  (register-command! 'show-trailing-whitespace cmd-show-trailing-whitespace)
+  (register-command! 'indicate-empty-lines cmd-indicate-empty-lines)
+  (register-command! 'indicate-buffer-boundaries cmd-indicate-buffer-boundaries)
+  (register-command! 'fringe-mode cmd-fringe-mode)
+  (register-command! 'text-scale-set cmd-text-scale-set)
+  (register-command! 'subword-transpose cmd-subword-transpose)
+  (register-command! 'capitalize-dwim cmd-capitalize-dwim)
+  (register-command! 'upcase-dwim cmd-upcase-dwim)
+  (register-command! 'downcase-dwim cmd-downcase-dwim)
+  (register-command! 'pulse-momentary-highlight-region cmd-pulse-momentary-highlight-region)
+  (register-command! 'cursor-sensor-mode cmd-cursor-sensor-mode)
+  (register-command! 'cua-selection-mode cmd-cua-selection-mode)
+  (register-command! 'rectangle-mark-mode cmd-rectangle-mark-mode)
+  (register-command! 'auto-revert-tail-mode cmd-auto-revert-tail-mode)
+  (register-command! 'sgml-tag cmd-sgml-tag)
+  (register-command! 'reveal-mode cmd-reveal-mode)
+  (register-command! 'glasses-separator cmd-glasses-separator)
 )