ekp/.phrase/phases/phase-kp-overhaul-20260726/issue_native_soft_wrap_20260729.md
Kinneyzhang 83352c4571 feat!: add source-clean live buffer layout
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-*.
2026-07-30 01:07:25 +08:00

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-mode enabled 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:
    1. Split a graphical frame side by side until the editing window is narrower than 50 columns.
    2. Enable ekp-auto-justify-mode.
    3. Type a hard line beyond the right edge.
    4. 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-windows to 50. In narrower side-by-side windows that setting overrides truncate-lines=nil and 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: task027 snapshots 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-PIUigY shows per-character typing naturally advancing from one to two visual rows in a 44-column split, with hscroll=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.