mirror of
https://github.com/MarekZegare4/MeshCore-Solo.git
synced 2026-07-26 14:58:12 +00:00
feat(keyboard): selectable main/additional script for the on-screen keyboard
Page 0 was hardcoded to Latin -- Cyrillic/Greek could only ever be the second, cycled-to page. Settings > Keyboard's Alphabet row splits into Main (which script the keyboard opens on by default) and Additional (the second one reached via #@/abc), so a Cyrillic/Greek typist can make their own script the default instead of always landing on Latin first. Setting Additional equal to Main collapses back to a 2-page cycle (that script + Symbols), same rule the old Latin-hardcoded design already used implicitly. KeyboardWidget.h: cellStr()/t9GroupStr() now dispatch through scriptCellStr()/scriptT9GroupStr(), treating Latin as an ordinary peer of Cyrillic/Greek instead of a special case; scriptHint() replaces altAlphabetHint() so the #@/abc key's "next page" hint is correct regardless of which script that lands on; the accent popup's gating checks the current page's actual script instead of assuming page 0 is always Latin. Removed the now-dead pageIsAltAlphabet(). NodePrefs gains keyboard_main_alphabet (schema sentinel 0xC0DE001F -> 0xC0DE0020, same append-at-tail/clamp-on-load pattern as every prior schema growth this file uses). Verified via a real build that the new field lands in existing tail padding -- sizeof(NodePrefs) is unchanged at 2712. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -175,13 +175,18 @@ 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 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).
|
||||
cell's letter group, then its digit). Page 0 is no longer hardcoded to Latin:
|
||||
`NodePrefs::keyboard_main_alphabet`/`keyboard_alt_alphabet` (Settings >
|
||||
Keyboard's Main/Additional rows) each pick a script — Latin, Cyrillic, or
|
||||
Greek — for page 0 and page 1 respectively (`KeyboardWidget::mainScript()`/
|
||||
`altScript()`); equal values collapse to a single script + Symbols (2 pages
|
||||
instead of 3, see `hasAltAlphabet()`). `scriptCellStr()`/`scriptT9GroupStr()`
|
||||
dispatch each script to its own ABC grid (`KB_CHARS`/`KB_CYRILLIC_CHARS`/
|
||||
`KB_GREEK_CHARS`) and T9 group table (`KB_T9_GROUPS`/`KB_T9_GROUPS_CYRILLIC`/
|
||||
`_GREEK`) so the two layouts always offer the same letters regardless of which
|
||||
page they're on. Latin-diacritic letters (Polish, Czech, German, etc.) aren't
|
||||
alt-alphabet pages — they're reached by Hold-Enter on whichever page currently
|
||||
shows Latin 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. **UP from the top letter row** enters
|
||||
|
||||
@@ -99,12 +99,13 @@ 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 | 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. |
|
||||
| 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 script page is active (see Main/Additional below), not just Latin. |
|
||||
| Main | Latin / Cyrillic / Greek | Which script the keyboard **opens on by default**. **Latin** (default) matches earlier releases; pick **Cyrillic** or **Greek** here instead to make that script the one you land on every time, with Latin becoming the one reached via cycling (see Additional below) instead of the other way round. |
|
||||
| Additional | Latin / Cyrillic / Greek | The second script added to the same **#@/abc** key's cycle (Main → Additional → Symbols → Main) — no separate key to switch scripts. Setting Additional to the **same** script as Main drops the cycle back to just that script plus Symbols (no second script page at all). **Greek** covers the 24-letter alphabet plus final sigma (`ς`) but not the tonos stress accents used in proper Modern Greek spelling. Every script'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.
|
||||
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. Works on whichever page is currently showing Latin, whether that's Main or Additional.
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user