Commit Graph

4 Commits

Author SHA1 Message Date
1cbb367b1f Hide the editor caret while another input has focus
The caret was drawn unconditionally, so it kept showing in the main edit
window while key focus sat in the find bar's search input — reading as
if the editor still had focus. drawWrappedText now takes the field's
focus state and draws the caret only when the field is focused
(editorElem.Focused follows FocusedElementID, which is find_bar while
the find bar is open); the caret returns when focus comes back on close.

e2e: the editor TextField reports unfocused while the find bar is open
and focused again after close.
2026-08-20 12:52:31 -04:00
5716d208b8 Highlight search matches in the text view
- ui: TextField gains MatchRanges (window-relative byte ranges) +
  CurrentMatch; drawWrappedText draws a per-glyph highlight pass (same
  tiling as the selection, so wrapped lines are covered): all matches in
  translucent yellow, the selection in blue as before, and the current
  match in stronger orange on top so it stands out.
- editor: EditorLayout windows the absolute FindState matches into the
  visible content (binary search on the sorted ranges, clamp to the
  window) and stamps them on the editor TextField.
- e2e: poll the captured frames until the highlight data lands; assert
  all matches are windowed, each highlights a "needle", and
  CurrentMatch follows FindNext.
2026-08-20 06:29:09 -04:00
153f555a23 Shrink the text area while the find bar is open
The find bar (32..72) used to be drawn over the top of the text area,
covering the first visible line. EditorLayout now lowers the text area
top by FindBarHeight (new shared constant) while the find bar is visible;
it snaps back on close. e2e: assert the editor region top moves to
32+FindBarHeight while open.
2026-08-20 05:19:58 -04:00
78d240eedb Add in-file search (find bar)
- pool: SearchTask + FindSubstring (case-insensitive substring scan with
  query generation for stale-result dropping)
- editor: FindState on EditorState; find bar handlers (ToggleFind/FindNext/
  FindPrev/FindClose); worker-pool scan of the in-memory content; edit-aware
  offset remapping (shift after, drop overlapping); next/prev with
  wrap-around, selection + scroll to match; main-owned find_bar input
  forwarded via FindQueryChan (browser search_bar precedent)
- ui: find-bar layout below the margin-free top bar; search icon on the top
  bar right; new search/close/chevron_up/chevron_down icons
- logic: findQueryChan, TypeSearch result handling, findReset on open
- frame: FindQuery field (main syncs the widget text like Query)
- tests: pool scan tests, find-state unit tests (remap, nav, gen gate,
  focus), e2e find bar + navigation + edit-survival on real files
- docs: spec/architecture/development_plan updated (search implemented,
  channel/task tables)
2026-08-20 00:02:54 -04:00