fix(rawcli): raw byte-line autocomplete fires in hex and binary
The digit key handler applied each keystroke as `buf.document = Document(...)`. Assigning the buffer document resets prompt_toolkit's complete_state and never re-fires completion, so the live autocomplete menu never appeared during raw byte entry -- in BOTH hex and binary (only command-name completion worked, since that path already used insert_text). type_digit only ever appends the digit (optionally after an auto-space) or drops it, so the change is always a pure suffix. Apply it with buf.insert_text, which triggers completion exactly like an ordinary keystroke. Verified by driving the real key binding: the completion menu now populates on every digit in hex and binary (before: complete_state None, start_completion never called). Adds a regression test asserting the handler routes through insert_text; updates the rawcli roadmap. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -75,7 +75,6 @@ def install_key_bindings(kb, session) -> None:
|
||||
"""Wire the entry-mode toggle (Ctrl-/ via Ctrl-_, plus Ctrl-t) and per-byte base-aware digit
|
||||
entry onto ``kb``. ``session`` is the :class:`RawSession` whose ``entry_mode`` is toggled/read
|
||||
and whose ``byte_bases`` records each raw byte's base. Never raises on an unknown key name."""
|
||||
from prompt_toolkit.document import Document
|
||||
|
||||
def _toggle(event):
|
||||
session.toggle_entry_mode() # only flips the mode — the next byte you type uses it
|
||||
@@ -93,7 +92,13 @@ def install_key_bindings(kb, session) -> None:
|
||||
buf.insert_text(d)
|
||||
return
|
||||
new_text, session.byte_bases = type_digit(text, session.byte_bases, session.entry_mode, d)
|
||||
buf.document = Document(new_text, len(new_text))
|
||||
# Apply the change as an append via insert_text, NOT `buf.document = …`: assigning the
|
||||
# document resets prompt_toolkit's complete_state and never re-fires completion, which
|
||||
# killed the live autocomplete menu during raw byte entry. type_digit only ever appends
|
||||
# (optionally after an auto-space) or drops, so the delta is always a pure suffix.
|
||||
suffix = new_text[len(text):]
|
||||
if suffix:
|
||||
buf.insert_text(suffix)
|
||||
|
||||
for ch in sorted(_DIGITS[HEX] | _DIGITS[BIN]):
|
||||
_bind(kb, ch, _digit)
|
||||
|
||||
Reference in New Issue
Block a user