Files
eco/tests
lemke_handClaude Sonnet 5 d0606e2b89 ipymagic: terminal Tab-completion overlay (Option A), and a real path bug
Adds the terminal-native picker: typing the trigger and pressing Tab pops
IPython's own completion menu (same widget, works in a real terminal or a
notebook -- ipykernel's completion goes through the same IPCompleter
matcher pipeline) instead of the Qt modal. Two triggers:

  "..."   component mode: Recent, Recommended (FrequencyCounts-ranked),
          then a live substring-filterable walk of the namespace tree.
  "...h"  command mode (mnemonic: history): Recent/Recommended prior
          *commands* (eco.logs.recent_commands/frequent_commands) -- no
          namespace section, nothing to browse there.

Selecting an entry only ever inserts text at the cursor -- it never
executes, in either mode -- so the rest of the line can still be composed/
edited before submitting. This composes with the existing Qt-modal `...`
mechanism rather than conflicting with it: accepting a completion replaces
`...` in the buffer before the line is ever submitted, so if you don't use
Tab and just hit Enter, the AST-transform fallback still applies to
whatever literal `...` is left.

Real bug found while building this and wiring it through a live
IPCompleter (not just unit tests): eco.widgets.component_selector's
ComponentNode.name (and so pick_component_modal's return value) is
relative to `root` (confirmed against Alias.get_full_name(base=...), which
stops at base) -- not a standalone, globally-evaluable expression the way
this module had assumed everywhere. Both the Qt-modal path (_EllipsisPicker)
and this new completer were splicing that relative fragment in directly,
silently dropping the root's own name from the printed/inserted code.
Fixed with _full_path(root, relative_path), which reattaches the name
`root` is actually bound to (its own `.name`, matching this codebase's
`import eco.bernina as bernina` convention) -- verified against a real
IPCompleter.complete() call, not just the mocked unit tests, which is
exactly what surfaced the bug in the first place (a hand-fed "already
correct" path in the earlier Qt smoke test had been masking it).

Also fixed the smoke-test script that had encoded the same wrong
assumption, for anyone re-running it later.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-12 17:05:59 +02:00
..
2026-08-30 22:50:56 +02:00
2026-08-21 15:10:25 +02:00
2026-09-11 15:29:43 +02:00
2026-09-07 16:54:05 +02:00
2026-09-07 16:54:05 +02:00
2026-09-09 23:39:12 +02:00
2026-09-06 16:34:29 +02:00
2026-08-21 15:10:25 +02:00
2026-08-21 15:10:25 +02:00
2026-09-11 16:04:34 +02:00
2026-08-28 14:25:39 +02:00
2026-08-21 15:10:25 +02:00
2026-09-06 21:05:04 +02:00
2026-09-11 16:04:34 +02:00
2026-09-06 16:34:29 +02:00
2026-08-21 15:10:25 +02:00
2026-08-21 15:10:25 +02:00
2026-08-21 15:10:25 +02:00
2026-09-07 17:11:28 +02:00
2026-08-21 15:10:25 +02:00
2026-08-21 15:10:25 +02:00
2026-08-30 22:50:56 +02:00
2026-08-21 15:10:25 +02:00
2026-09-06 16:34:29 +02:00
2026-09-11 16:04:34 +02:00
2026-09-11 16:04:34 +02:00
2026-09-06 16:34:29 +02:00