Round 192: Ediff-ext, Smerge-ext, VC-ext, Diff-ext, Compilation-ext, Highlight-ext commands

ober

e56dbef77975fa66a934577f24851f7306b59efc

diff --git a/docs/jemacs-vs-emacs.md b/docs/jemacs-vs-emacs.md
index 1cff543..501d902 100644
--- a/docs/jemacs-vs-emacs.md
+++ b/docs/jemacs-vs-emacs.md
@@ -4583,6 +4583,31 @@ No remaining Tier 1 gaps. All core editing, completion, and navigation features 
 | ebib-import-file | :orange_circle: | Import file into Ebib |
 | ebib-push-citation | :orange_circle: | Push Ebib citation to buffer |
 
+### Round 192 — Ediff-ext, Smerge-ext, VC-ext, Diff-ext, Compilation-ext, Highlight-ext, Windmove-ext
+
+| Feature | Status | Notes |
+|---|---|---|
+| ediff-backup | :orange_circle: | Compare with backup file |
+| ediff-show-diff-output | :orange_circle: | Show raw diff output |
+| ediff-toggle-multiframe | :orange_circle: | Toggle multiframe display |
+| smerge-diff-base-lower | :orange_circle: | Diff between base and lower |
+| smerge-diff-base-upper | :orange_circle: | Diff between base and upper |
+| vc-annotate-toggle-annotation-visibility | :orange_circle: | Toggle annotation visibility |
+| diff-restrict-view | :orange_circle: | Restrict view to current hunk |
+| diff-ignore-whitespace-hunk | :orange_circle: | Ignore whitespace in hunk |
+| compilation-next-error-function | :orange_circle: | Jump to next compilation error |
+| compilation-set-skip-threshold | :orange_circle: | Set compilation skip threshold |
+| recompile-with-input | :orange_circle: | Recompile with custom command |
+| next-error-select-buffer | :orange_circle: | Select buffer for next-error |
+| highlight-regexp-unique-match | :orange_circle: | Highlight unique regexp matches |
+| highlight-lines-matching-regexp-toggle | :orange_circle: | Toggle line highlight for regexp |
+| unhighlight-regexp-all | :orange_circle: | Remove all regexp highlights |
+| winner-undo-more | :orange_circle: | Undo more window configurations |
+| windmove-display-default-keybindings | :orange_circle: | Set windmove display keybindings |
+| windmove-swap-states-default-keybindings | :orange_circle: | Set windmove swap keybindings |
+| quail-define-rules | :orange_circle: | Define Quail input method rules |
+| prettify-symbols-unprettify-at-point | :orange_circle: | Show unprettified symbol at point |
+
 ### Round 191 — Browse-url-ext, SHR-ext, URL-ext, Calc-ext, Eglot-ext, Electric-ext
 
 | Feature | Status | Notes |
diff --git a/src/jerboa-emacs/editor-extra-final.ss b/src/jerboa-emacs/editor-extra-final.ss
index c58f910..ada92f5 100644
--- a/src/jerboa-emacs/editor-extra-final.ss
+++ b/src/jerboa-emacs/editor-extra-final.ss
@@ -17808,3 +17808,50 @@
     (if (mode-enabled? app 'electric-pair-local)
       (echo-message! echo "Electric pair local mode enabled")
       (echo-message! echo "Electric pair local mode disabled"))))
+
+;; Round 192 — Recompile-ext, Next-error-ext, Highlight-ext, Winner-ext, Windmove-ext, Quail, Prettify-ext
+(def (cmd-recompile-with-input app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Compile command: "
+      (lambda (cmd)
+        (echo-message! echo (str "Recompile: " cmd))))))
+
+(def (cmd-next-error-select-buffer app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Next-error: select buffer for navigation")))
+
+(def (cmd-highlight-regexp-unique-match app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Highlight unique regexp: "
+      (lambda (re)
+        (echo-message! echo (str "Highlighted unique matches for: " re))))))
+
+(def (cmd-highlight-lines-matching-regexp-toggle app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Toggle highlight lines matching: "
+      (lambda (re)
+        (echo-message! echo (str "Toggled line highlight for: " re))))))
+
+(def (cmd-unhighlight-regexp-all app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Unhighlighted all regexp matches")))
+
+(def (cmd-winner-undo-more app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Winner: undid more window configurations")))
+
+(def (cmd-windmove-display-default-keybindings app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Windmove: display default keybindings set")))
+
+(def (cmd-windmove-swap-states-default-keybindings app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Windmove: swap states default keybindings set")))
+
+(def (cmd-quail-define-rules app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Quail: input method rules defined")))
+
+(def (cmd-prettify-symbols-unprettify-at-point app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Prettify: showing unprettified symbol at point")))
diff --git a/src/jerboa-emacs/editor-extra-modes.ss b/src/jerboa-emacs/editor-extra-modes.ss
index 9c13db1..72a0491 100644
--- a/src/jerboa-emacs/editor-extra-modes.ss
+++ b/src/jerboa-emacs/editor-extra-modes.ss
@@ -18433,3 +18433,46 @@
     (echo-read-string echo "Zone idle seconds: "
       (lambda (secs)
         (echo-message! echo (str "Zone: will activate after " secs "s idle"))))))
+
+;; Round 192 — Ediff-ext, Smerge-ext, VC-ext, Diff-ext, Compilation-ext
+(def (cmd-ediff-backup app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Ediff: comparing with backup file")))
+
+(def (cmd-ediff-show-diff-output app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Ediff: showing raw diff output")))
+
+(def (cmd-ediff-toggle-multiframe app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Ediff: toggled multiframe display")))
+
+(def (cmd-smerge-diff-base-lower app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Smerge: showing diff between base and lower")))
+
+(def (cmd-smerge-diff-base-upper app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Smerge: showing diff between base and upper")))
+
+(def (cmd-vc-annotate-toggle-annotation-visibility app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "VC: toggled annotation visibility")))
+
+(def (cmd-diff-restrict-view app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Diff: restricted view to current hunk")))
+
+(def (cmd-diff-ignore-whitespace-hunk app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Diff: ignoring whitespace in current hunk")))
+
+(def (cmd-compilation-next-error-function app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Compilation: jumped to next error")))
+
+(def (cmd-compilation-set-skip-threshold app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Skip threshold (0-2): "
+      (lambda (val)
+        (echo-message! echo (str "Compilation: skip threshold set to " val))))))
diff --git a/src/jerboa-emacs/editor-extra-regs2.ss b/src/jerboa-emacs/editor-extra-regs2.ss
index 91e571f..013b9df 100644
--- a/src/jerboa-emacs/editor-extra-regs2.ss
+++ b/src/jerboa-emacs/editor-extra-regs2.ss
@@ -5465,4 +5465,25 @@
   (register-command! 'eglot-rename-symbol cmd-eglot-rename-symbol)
   (register-command! 'eglot-format-region cmd-eglot-format-region)
   (register-command! 'electric-pair-local-mode cmd-electric-pair-local-mode)
+  ;; Round 192
+  (register-command! 'ediff-backup cmd-ediff-backup)
+  (register-command! 'ediff-show-diff-output cmd-ediff-show-diff-output)
+  (register-command! 'ediff-toggle-multiframe cmd-ediff-toggle-multiframe)
+  (register-command! 'smerge-diff-base-lower cmd-smerge-diff-base-lower)
+  (register-command! 'smerge-diff-base-upper cmd-smerge-diff-base-upper)
+  (register-command! 'vc-annotate-toggle-annotation-visibility cmd-vc-annotate-toggle-annotation-visibility)
+  (register-command! 'diff-restrict-view cmd-diff-restrict-view)
+  (register-command! 'diff-ignore-whitespace-hunk cmd-diff-ignore-whitespace-hunk)
+  (register-command! 'compilation-next-error-function cmd-compilation-next-error-function)
+  (register-command! 'compilation-set-skip-threshold cmd-compilation-set-skip-threshold)
+  (register-command! 'recompile-with-input cmd-recompile-with-input)
+  (register-command! 'next-error-select-buffer cmd-next-error-select-buffer)
+  (register-command! 'highlight-regexp-unique-match cmd-highlight-regexp-unique-match)
+  (register-command! 'highlight-lines-matching-regexp-toggle cmd-highlight-lines-matching-regexp-toggle)
+  (register-command! 'unhighlight-regexp-all cmd-unhighlight-regexp-all)
+  (register-command! 'winner-undo-more cmd-winner-undo-more)
+  (register-command! 'windmove-display-default-keybindings cmd-windmove-display-default-keybindings)
+  (register-command! 'windmove-swap-states-default-keybindings cmd-windmove-swap-states-default-keybindings)
+  (register-command! 'quail-define-rules cmd-quail-define-rules)
+  (register-command! 'prettify-symbols-unprettify-at-point cmd-prettify-symbols-unprettify-at-point)
 )