Replace the physical ekp-region renderer with ekp-buffer text-property projection backed by shared semantic layout plans and stable live-edit transactions. Optimize the C-backed resize hot path, and add deterministic performance, ERT, GUI, fuzz, release, and documentation coverage for task017 through task032. BREAKING CHANGE: require ekp-buffer instead of ekp-region and rename module-owned ekp-region-* settings to ekp-buffer-*.
2.6 KiB
2.6 KiB
Issue: Native Soft Wrap 2026-07-29
issue015 [ ] Narrow split windows truncate live text
- Status: Implemented and independently verified; user confirmation remains required.
- Summary: With
ekp-auto-justify-modeenabled in a narrow side-by-side window, typing past the right edge horizontally scrolls the line and displays a$truncation indicator instead of naturally soft-wrapping. - Environment: Graphical Emacs 30.2; side-by-side windows; native progressive live layout.
- Repro:
- Split a graphical frame side by side until the editing window is narrower than 50 columns.
- Enable
ekp-auto-justify-mode. - Type a hard line beyond the right edge.
- Observe horizontal scrolling and the left
$indicator.
- Expected vs Actual:
- Expected: the active hard line follows native soft wrapping, point moves onto a new visual row, and EKP may align only the row just left.
- Actual: no visual row is created, so native-row publication cannot begin.
- Root Cause: Emacs 30.2 defaults
truncate-partial-width-windowsto50. In narrower side-by-side windows that setting overridestruncate-lines=niland enables truncation. The auto mode declared native soft wrap as an algorithmic precondition but did not own the corresponding display variables. - Required Outcome: While the mode is enabled, force native soft wrapping in full-width and partial-width windows. On disable or major-mode change, restore both the prior values and whether each value was buffer-local.
- Fix:
task027snapshots both truncation variables and their buffer-local ownership before enabling native wrapping. Normal disable, major-mode teardown, and failed activation restore that state exactly; activation errors remain visible after cleanup instead of leaving a half-enabled mode. - Verification: The lifecycle regressions pass 3/3; buffer ERT passes
77/77; default, seed-
20260729, and isolated ERT pass 166/166; C/Elisp fuzz passes 300/300. Warning-as-error compilation, checkdoc, pinned package-lint, release, dictionary, pinned-source, and static gates pass. Retained dynamic evidence in/private/tmp/ekp-soft-wrap-final-pass-PIUigYshows per-character typing naturally advancing from one to two visual rows in a 44-column split, withhscroll=0, exact source text, zero overlays, and zero live replacing breaks. - User Confirmation: Pending after delivery.
- Resolved At: Unresolved.
- Resolved By: Implementation complete; issue stays open until user-visible confirmation.
- Commit: Pending.