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
--- 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 --- 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 "'")))))) --- 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)))))) + --- 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) )