-
Nikitos создал
Последний пункт P2, не требующий правок в main.c. Ни буфера обмена, ни предпросмотра композиции IME в движке не было вовсе: SDL_EVENT_TEXT_EDITING не обрабатывался, SDL_SetClipboardText/GetClipboardText не вызывались, в поле ввода не было ни Ctrl+C/V/X/A, ни выделения, а буфер кадра был 256 байт. ДВИЖОК: * r2d_app_clipboard/set_clipboard (SDL3, копию освобождаем сами), текст композиции IME и её начало, r2d_app_set_text_input_area для окна кандидатов; * обработка SDL_EVENT_TEXT_EDITING: незавершённая композиция показывается подчёркнутой и НЕ вставляется — текст придёт TEXT_INPUT; * буферы текста и композиции увеличены 256 → 1024/256; * engine.clipboard(), engine.setClipboard(text), engine.ime(), engine.textInputArea(). ПОЛЕ ВВОДА: * Ctrl+C/X/V/A и классические Shift+Insert/Shift+Delete/Ctrl+Insert; * выделение: Shift+стрелки/Home/End с ЯКОРЕМ, Ctrl+A, вставка и удаление работают с выделением (вставка его заменяет), maxLength соблюдается и при вставке; * окно IME показывается у поля, а не в углу окна; * $.input.ctrlDown()/shiftDown()/altDown() — модификаторы доступны игре. НАЙДЕН И ИСПРАВЛЕН ДЕФЕКТ В САМОМ ВЫДЕЛЕНИИ: при Shift+стрелке якорь не ставился (sel_from оставался -1), то есть выделения не возникало, и Backspace удалял ОДИН символ вместо выделенного куска. Нашлось тестом на точное поведение Backspace с выделением. ЧЕСТНО ПРО ТЕСТ: системного буфера в headless-прогоне нет, поэтому тест подменяет engine.clipboard на стороне JS и проверяет ГОРЯЧИЕ КЛАВИШИ и логику правки, а не платформенный буфер. Это записано в тесте и в widgets.md. ЧЕСТНО ПРО ГРАНИЦЫ: выделение не подсвечивается и мышью не выделяется — только клавиатурой; перетаскивания выделения нет. Заодно убрано ложное утверждение в API.md: текст приходит из TEXT_INPUT «с учётом IME» — это только завершённый ввод; незавершённая композиция теперь описана отдельно. Проверка: tests/agent/highlevel_clipboard_test.py (17 проверок: ввод, Ctrl+A/C/V/X, возврат текста, Backspace с выделением и без, выделение Shift+стрелками, вставка вместо выделения, обрезка по maxLength, engine.ime, модификаторы). Полный набор qjs, агентские тесты, doc_coverage, doc_claims, duplicate_keys, быстрый набор — зелёные.
a8394d66