mirror of
https://github.com/MarekZegare4/MeshCore-Solo.git
synced 2026-07-26 14:58:12 +00:00
feat(keyboard): hold-Enter accent popup; relocate cursor-mode trigger
Replaces the 8 separate Latin-diacritic alt-alphabet pages (Polish, Czech, Slovak, German, French, Spanish, Portuguese, Nordic) with one popup: Hold Enter on a Latin letter that has accented variants (a c d e i l n o r s t u y z) opens a floating horizontal strip of that letter's accents, anchored over its own row so the grid stays visible underneath (LEFT/ RIGHT picks, Enter inserts via a new shared insertGlyph() helper, Cancel dismisses). Holding a letter with no variants is a no-op. Cyrillic/Greek remain full alt-alphabet pages; NodePrefs::keyboard_alt_alphabet shrinks from 11 to 3 values accordingly -- an old saved Polish..Nordic value just clamps to Latin via DataStore.cpp's existing range check, no migration code needed. Freeing Hold-Enter on letter cells required moving cursor-mode's own trigger: UP from the top letter row now enters it instead of wrapping to the special row. To keep that wrap reachable, cursor mode's UP/DOWN (Home/End) continue the wrap once already at that boundary -- UP again lands on the special row, DOWN again back on the letter grid -- reusing the same proportional column mapping the old direct wrap used. Diagnostics' font-coverage sample swaps its 8 per-language lines for one line sampling the new accent table. Docs (message_screen, settings_screen, solo_ui_framework) and release-notes updated to match. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -176,15 +176,26 @@ the board's sensors actually provide. Expand them with `expandMsg()` at send tim
|
||||
Two layouts share every grid: **ABC** (one key per letter) and **T9**
|
||||
(phone-keypad multi-tap — repeated Enter within `KB_T9_TIMEOUT_MS` cycles a
|
||||
cell's letter group, then its digit). `NodePrefs::keyboard_alt_alphabet` adds a
|
||||
non-Latin alphabet's own page to the cycle (Latin → alphabet → Symbols →
|
||||
Latin); each alphabet defines both its ABC grid (`KB_*_CHARS`) and T9 group
|
||||
table (`KB_T9_GROUPS_*`) so the two layouts always offer the same letters.
|
||||
non-Latin script's own page to the cycle (Latin → alphabet → Symbols → Latin);
|
||||
Cyrillic/Greek each define both an ABC grid (`KB_CYRILLIC_CHARS`/
|
||||
`KB_GREEK_CHARS`) and a T9 group table (`KB_T9_GROUPS_CYRILLIC`/`_GREEK`) so
|
||||
the two layouts always offer the same letters. Latin-diacritic letters (Polish,
|
||||
Czech, German, etc.) aren't alt-alphabet pages — they're reached by Hold-Enter
|
||||
on a plain Latin cell instead (see `KB_ACCENT_VARIANTS` below).
|
||||
Shift is one-shot by default (capitalises the next letter, including whichever
|
||||
candidate a T9 multi-tap cycle settles on) or Hold-Enter to toggle caps-lock;
|
||||
Hold-Clear erases the whole field. Hold-Enter elsewhere in the field enters
|
||||
**cursor mode** (LEFT/RIGHT move the insertion point, UP/DOWN jump to
|
||||
start/end) so edits/inserts can target any point in the typed text, not just
|
||||
the end.
|
||||
Hold-Clear erases the whole field. **UP from the top letter row** enters
|
||||
**cursor mode** (LEFT/RIGHT move the insertion point; UP/DOWN jump to
|
||||
start/end, then — pressed again once already at that boundary — continue on
|
||||
to the special row / letter grid, the same destinations the plain grid wrap
|
||||
used to reach directly) so edits/inserts can target any point in the typed
|
||||
text, not just the end; Enter/Cancel exit immediately from anywhere.
|
||||
Hold-Enter on a Latin-page letter cell with accented variants instead opens
|
||||
the **accent popup**: one horizontal row of `KB_ACCENT_VARIANTS[group]`
|
||||
(a UTF-8 string per base letter, same shape as a T9 group string), LEFT/RIGHT
|
||||
to pick, Enter to insert via the shared `insertGlyph()` helper, Cancel to
|
||||
dismiss. Holding a letter with no variants, or any T9/alt-alphabet/symbols
|
||||
cell, is a no-op.
|
||||
|
||||
`FullscreenMsgView::wrapLines()` is a standalone pixel-accurate word-wrapper
|
||||
(O(n), variable-width-font aware) reusable by any multi-line layout; it writes
|
||||
|
||||
Reference in New Issue
Block a user