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
|
||||
|
||||
@@ -23,7 +23,7 @@ Press **Enter** on a contact or channel to open its history, then press **Enter*
|
||||
- **Custom message** — opens the on-screen keyboard
|
||||
- **Q1–Q10** — quick reply templates editable in Settings › Messages
|
||||
|
||||
While typing, **Hold Enter** enters cursor mode (LEFT/RIGHT move the insertion point, UP/DOWN jump to start/end, Enter/Cancel exit) so you can edit or insert in the middle of what you've typed instead of only at the end — see the on-screen keyboard section of the [UI framework guide](../../design/solo_ui_framework.md) for the full key set (Shift, T9 multi-tap, alternate alphabets).
|
||||
While typing, **UP** from the top letter row enters cursor mode (LEFT/RIGHT move the insertion point; UP/DOWN jump to start/end, then continue on to the special row / letter grid if pressed again once already there; Enter/Cancel exit immediately from anywhere) so you can edit or insert in the middle of what you've typed instead of only at the end. **Hold Enter** on a Latin letter with accented variants (e.g. a, e, c, n, o, s, z…) instead opens a one-row popup of that letter's accents — LEFT/RIGHT to pick, Enter to insert, Cancel to dismiss. See the on-screen keyboard section of the [UI framework guide](../../design/solo_ui_framework.md) for the full key set (Shift, T9 multi-tap, Cyrillic/Greek).
|
||||
|
||||
The keyboard supports placeholders that insert live data at send time:
|
||||
|
||||
|
||||
@@ -100,10 +100,12 @@ The **repeater** mode and its flood filters live on their own screen — see **T
|
||||
| Setting | Options | Notes |
|
||||
| -------- | ---------- | -------------------------------------------------------------------------------------------------- |
|
||||
| Layout | ABC / T9 | On-screen keyboard style. **ABC**: an a-b-c…z grid, one key per letter (the original layout). **T9**: phone-keypad multi-tap — each key is labelled with its **digit** and a letter group (e.g. `2abc`); repeated **Enter** presses cycle through the letters and then the digit itself. Applies to whichever alphabet page is active (see Alphabet below), not just Latin. |
|
||||
| Alphabet | Latin / Cyrillic / Greek / Polish / Czech / Slovak / German / French / Spanish / Portuguese / Nordic | Which extra (non-Latin) alphabet, if any, joins the keyboard's page cycle. **Latin** (default): only the Latin letters and Symbols pages, as before. Any other choice adds that alphabet's own page to the same **#@/abc** key's cycle (Latin → alphabet → Symbols → Latin) — no separate key to switch scripts. Each Latin-diacritic language (Polish, Czech, Slovak, German, French, Spanish, Portuguese, Nordic) is its own separate page with that language's full, correct set of non-ASCII letters — e.g. Czech gets `á č ď é ě í ň ó ř š ť ú ů ý ž`, German just `ä ö ü ß`. Nordic covers `å ä æ ö ø`, shared across Danish/Norwegian/Swedish since their alphabets only differ in which of those five each one uses. **Greek** covers the 24-letter alphabet plus final sigma (`ς`) but not the tonos stress accents used in proper Modern Greek spelling. Every alphabet's letters render natively — the display font (a single unified Unicode font used everywhere on-screen) covers all of them, no separate toggle needed. |
|
||||
| Alphabet | Latin / Cyrillic / Greek | Which extra (non-Latin) script, if any, joins the keyboard's page cycle. **Latin** (default): only the Latin letters and Symbols pages, as before. **Cyrillic**/**Greek** add that script's own page to the same **#@/abc** key's cycle (Latin → alphabet → Symbols → Latin) — no separate key to switch scripts. **Greek** covers the 24-letter alphabet plus final sigma (`ς`) but not the tonos stress accents used in proper Modern Greek spelling. Every alphabet's letters render natively — the display font (a single unified Unicode font used everywhere on-screen) covers all of them, no separate toggle needed. |
|
||||
|
||||
Applies to every on-screen text field (messages, waypoint labels, room passwords, preset names). Earlier releases labelled the grid *QWERTY*; the layout has always been alphabetical, so it is now named **ABC**.
|
||||
|
||||
European Latin-diacritic letters (Polish, Czech, Slovak, German, French, Spanish, Portuguese, Nordic, etc.) aren't separate alphabet pages — instead, **Hold Enter** on a plain Latin letter that has accented variants (`a c d e i l n o r s t u y z`) opens a one-row popup of its accents (e.g. holding `a` offers `á à â ã ä å ą`); **LEFT/RIGHT** picks, **Enter** inserts it, **Cancel** dismisses with no change. Holding a letter with no accented variants (e.g. `b`) does nothing.
|
||||
|
||||
---
|
||||
|
||||
### Contacts
|
||||
|
||||
Reference in New Issue
Block a user