EditBox caret keys, selection and focus blink follow 1.12.1 (#750)

Several EditBox keys differed from 1.12.1:
- Up/Down did nothing in a multi-line box;
- Home/End went to the text's ends;
- `HighlightText` and Ctrl+A moved the caret;
- focus did not restart the blink;
- a non-digit kept a numeric box's selection;
- Option+Up could not recall chat history on a Mac.

In 1.12.1, Up/Down move a wrapped row, keeping the letter column (`0x77cb20`), or recall history in a single-line box with any modifier but Shift. Home/End stop at a newline (`0x77c980`, `0x77c9f0`). `HighlightText` writes only the selection (`0x77cca0`), and Shift extends by `0x77cd10`. Focus restarts the blink (`0x77dd68`), and Insert deletes the selection before its digit test (`0x77bf41`).

benilla now does each. Down onto the last row lands at the end, and history stays shell-style, both deviations.

Tests cover each key, in the engine and the stock mail and ticket boxes.

Fixes #735
Fixes #736
Fixes #737
Fixes #738
Fixes #745
Fixes #747

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Sam Sung
2026-10-01 10:56:03 +07:00
committed by GitHub
co-authored by Claude Opus 5.5
parent be9e3d8aac
commit f22ec0016c
17 changed files with 1269 additions and 214 deletions
+1 -1
View File
@@ -1058,7 +1058,7 @@ impl UiScript {
/// Whether the focused EditBox is in alt-arrow mode (XML `ignoreArrows`, Lua
/// `SetAltArrowKeyMode`, `[editbox+0x318] & 0x10`): without ALT the reference declines the four
/// arrows (`0x77b1c4`), so they reach the world's bindings and turn the player while chat has
/// focus. The gate is on the key, not the [`EditAction`]: HOME and END also move to an edge.
/// focus. The gate is on the key, not the [`EditAction`]: HOME and END also move the caret.
pub fn editbox_alt_arrow_mode(&self) -> bool {
let model = self.model_ref();
model.focused_editbox.is_some_and(|h| {