Move the keyboard selector by position and remember the hidden arrow - #93
Merged
Merged
Conversation
Issue #92: moving between the letter rows and the action row shifted the selector two keys, because both keyboards kept the column index across rows of different widths on a centred grid. KeyboardLayouts.ColumnAcross now picks the key underneath. The same report asked for arrow keys: a shared KeyboardEntry gives the entry a caret, and left/right on the action row move it, so a typo in the middle of an address no longer means retyping everything after it. The action row is 16 keys, so a key is 100px wide (1736px, the width the 14-key row had at 116). Issue #91: two pointers, one on top of the other, at launch. The page script re-installs its arrow on every visibilitychange and install() set it visible unconditionally, so on a set where the app draws the pointer itself the arrow came back under the dot. hide() is remembered now, install() honours it, and show() is the one way back; both cursor classes ask for the arrow by name when switching to the page-drawn pointer, and the NUI reinstall sends install and hide in one evaluation. tools/keyboard and tools/pointer hold both fixes off-device; the pointer harness fails on the previous PageScript.cs at its third check. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes for issue #92 and issue #91, both from the 2025-set reporter, both with a fault behind them and both in
src/common, so all six packages get them.#92 — the selector jumps two keys between rows, and arrow keys
Both keyboards moved between rows by keeping the column index and clamping it. The rows are centred and the action row is four keys wider than the letter rows, so the same index is two keys to the left on the way down and two to the right on the way up — the reporter's exact numbers.
KeyboardLayouts.ColumnAcrossnow moves by position (in key units, so the two keyboards agree) and lands on the key underneath.The arrow keys he asked for are a caret in the entry, which was append-only.
KeyboardEntryholds text plus caret for both keyboards;←/→on the action row move it, and typing,.com,spaceandbackact at the caret. The keys are namedleft/rightin the grid because</>are characters on the symbol page. The action row is 16 keys, so a key is 100px (1736px total, what the 14-key row measured at 116).#91 — two pointers, one on top of the other, at launch
The page script re-runs
install()on everyvisibilitychange(it exists for single-page navigations wiping the overlay), andinstall()set the arrowdisplay:blockunconditionally with no memory ofhide().visibilitychangealso fires when the app comes to the front at launch, so on NUI — where the app draws the pointer itself — the page's arrow came back under the dot at the same fraction. Nowhide()is remembered,install()honours it,show()is the only way back, both cursor classes ask for the arrow by name when switching to the page-drawn pointer (which on ElmSharp had never reliably worked), and the NUI reinstall sends install and hide in one evaluation.Checks
./build.sh all: five packages, 0 warnings;OverscanProbecompiles.tools/keyboard/run.sh(new): grid shape, position-based row moves both ways and at the edges, the caret.tools/pointer/run.sh(new): the shipping script in desktop chromium — fresh install shows, hide survives visibilitychange / re-install / move / a wiped overlay / the whole script re-run, show brings it back. Fails on the previousPageScript.csat the third check.tools/cdpharness/run.sh: still PASS (the FRAME half was not touched, but the file was).docs/INTERNALS.mdhas the two new sections and the 2025-sets state;CLAUDE.mdlists the two harnesses.🤖 Generated with Claude Code