Skip to content

enhancement: improve text cursor navigation (visible caret, jump to start/end) #43

Description

@nextestudios

Summary

Build on the existing caret support (VirtualKeyboard.MoveCaret, LB/RB, ◀▶ keys): a clearly visible caret, jump to start/end, and preserved text state.

Motivation

Editing the middle of a name (Control|FS) must be easy without closing the keyboard.

Requirements

  • Visible, animated-free caret in the text field; caret position announced to Narrator.
  • Jump to start/end (e.g. LT/RT while the keyboard is open).
  • Cursor moves never alter the text or the current page/shift state.

Controller UX

LB/RB or ◀/▶ move one character (repeat when held via #42); LT/RT jump to start/end.

Technical Notes

VirtualKeyboard already tracks Caret; add start/end operations and rendering in ModalView.

Acceptance Criteria

  • Typing in the middle of existing text inserts at the caret.
  • Jumping to start/end works on long text.

Testing

Unit tests for new branches and for every bug reproduced before a fix (no trivial variations, see AGENTS.md).

Dependencies


Priority: high · Milestone: 3 · Virtual Keyboard UX

Activity

  1. added
    moscow: mustMoSCoW: required for 1.0
    and removed
    priority: highImportant for the controller-first experience
    on Sep 27, 2026
  2. nextestudios commented on Sep 27, 2026

    @nextestudios
    OwnerAuthor

    Implemented in #118: a visible steady caret, LT/RT (and Home/End) jump to start/end, and cursor moves that keep text, page and Shift. Unit tests cover the acceptance criteria (typing in the middle inserts at the caret, start/end on long text).

    What's left is a manual check: Narrator should speak the caret position. The field's accessible name includes it, and cursor-only moves raise a UIA notification, but CI can't confirm what Narrator actually says. The check is in docs/TESTING.md; please close this issue once it passes on Windows.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions