pub struct AutocompleteController { /* private fields */ }Expand description
Owns the popup lifecycle and the (debounced via generation tokens)
query plumbing. The host calls sync(host) after every edit; the
controller decides whether to open, refresh, or close the popup.
Implementations§
Source§impl AutocompleteController
impl AutocompleteController
pub fn new( suggestions: Arc<dyn SuggestionSource>, mode: AutocompleteMode, ) -> Self
Sourcepub fn with_trigger_opts(self, opts: TriggerOptions) -> Self
pub fn with_trigger_opts(self, opts: TriggerOptions) -> Self
Override the trigger-detection options. Used by the search-box controller to disable the column-0 header disambiguation rule (Markdown headers don’t exist in a search input).
Sourcepub fn with_debounce(self, debounce: Duration) -> Self
pub fn with_debounce(self, debounce: Duration) -> Self
Override the per-refinement debounce window. Tests pass
Duration::ZERO so query results land promptly inside drain_results.
Sourcepub fn set_redraw_callback(&mut self, cb: RedrawCallback)
pub fn set_redraw_callback(&mut self, cb: RedrawCallback)
Register a redraw callback. Without one, the popup state updates
on background threads but the render loop has no signal to
wake. Idempotent — safe to call from a host’s first
handle_input to lazily bind once the host has a way to
trigger redraws.
Sourcepub fn is_open(&self) -> bool
pub fn is_open(&self) -> bool
Whether the popup is currently interactive — held state AND at
least one visible suggestion. Returns false while a query is
in flight (state exists but items not yet arrived) or when a
query returned no matches: in both cases the popup is not drawn
and must not intercept key events, so Esc/Up/Down/Tab fall
through to the host (modal Esc closes the modal, list Up/Down
navigates files, etc).
Sourcepub fn state(&self) -> Option<&AutocompleteState>
pub fn state(&self) -> Option<&AutocompleteState>
Borrow the popup state for read-only inspection (rendering,
query introspection, tests). Returns None whenever the popup
is not active.
Sourcepub fn state_mut(&mut self) -> Option<&mut AutocompleteState>
pub fn state_mut(&mut self) -> Option<&mut AutocompleteState>
Borrow the popup state mutably. The only legitimate
caller-side use today is the host’s render path, which
re-anchors state.anchor from the freshly rendered caret
position so the popup follows the cursor without a one-frame
lag. Mutating items / highlighted / scroll_offset from
outside the controller will desync the popup; use the
dedicated sync / refresh_if_open / handle_key entry
points for those.
Sourcepub fn close(&mut self)
pub fn close(&mut self)
Close the popup immediately. Safe to call when already closed.
Use whenever focus moves away from the host or the host
triggers a buffer-replacement that invalidates the trigger
context (e.g. set_text).
Also aborts any in-flight query task — without this, pressing Esc during the 80ms debounce window leaks a spawned tokio task that continues to the SQLite hit and posts a result discarded later via generation mismatch.
Sourcepub fn handle_key<H: AutocompleteHost>(
&mut self,
key: KeyEvent,
host: &H,
) -> HandleKeyOutcome
pub fn handle_key<H: AutocompleteHost>( &mut self, key: KeyEvent, host: &H, ) -> HandleKeyOutcome
Route a key event through the popup when one is open. Returns a
HandleKeyOutcome so the host can decide whether to apply an
accept, fall through to its own key handling, etc. The controller
never mutates the host’s buffer directly — on accept it returns an
AcceptAction describing the replacement.
Sourcepub fn sync<H: AutocompleteHost>(&mut self, host: &H)
pub fn sync<H: AutocompleteHost>(&mut self, host: &H)
Inspect the host’s current buffer + cursor and reconcile the popup state. Call this after a text edit (insert / delete / paste / any change that modifies the buffer). Will open a fresh popup when the cursor lands inside a trigger context, refresh an open popup’s range/query/anchor, or close the popup when the trigger is gone.
Sourcepub fn refresh_if_open<H: AutocompleteHost>(&mut self, host: &H)
pub fn refresh_if_open<H: AutocompleteHost>(&mut self, host: &H)
Refresh the popup state for a cursor-only event (arrow keys, click, Home/End, etc). If the popup is closed, this is a no-op — cursor movement never opens a new popup. If the popup is open, it follows the cursor: query, range, and anchor update; the popup closes when the cursor leaves the trigger range.
Sourcepub fn poll_results(&mut self)
pub fn poll_results(&mut self)
Drain pending query responses and apply the latest one whose generation matches the controller’s current generation. Older responses (stale) are discarded.
Auto Trait Implementations§
impl !RefUnwindSafe for AutocompleteController
impl !UnwindSafe for AutocompleteController
impl Freeze for AutocompleteController
impl Send for AutocompleteController
impl Sync for AutocompleteController
impl Unpin for AutocompleteController
impl UnsafeUnpin for AutocompleteController
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<D> OwoColorize for D
impl<D> OwoColorize for D
Source§fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
C: Color,
fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
C: Color,
Source§fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
C: Color,
fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
C: Color,
Source§fn black(&self) -> FgColorDisplay<'_, Black, Self>
fn black(&self) -> FgColorDisplay<'_, Black, Self>
Source§fn on_black(&self) -> BgColorDisplay<'_, Black, Self>
fn on_black(&self) -> BgColorDisplay<'_, Black, Self>
Source§fn red(&self) -> FgColorDisplay<'_, Red, Self>
fn red(&self) -> FgColorDisplay<'_, Red, Self>
Source§fn on_red(&self) -> BgColorDisplay<'_, Red, Self>
fn on_red(&self) -> BgColorDisplay<'_, Red, Self>
Source§fn green(&self) -> FgColorDisplay<'_, Green, Self>
fn green(&self) -> FgColorDisplay<'_, Green, Self>
Source§fn on_green(&self) -> BgColorDisplay<'_, Green, Self>
fn on_green(&self) -> BgColorDisplay<'_, Green, Self>
Source§fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>
fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>
Source§fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>
fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>
Source§fn blue(&self) -> FgColorDisplay<'_, Blue, Self>
fn blue(&self) -> FgColorDisplay<'_, Blue, Self>
Source§fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>
fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>
Source§fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>
fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>
Source§fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>
fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>
Source§fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>
fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>
Source§fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>
fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>
Source§fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>
fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>
Source§fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>
fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>
Source§fn white(&self) -> FgColorDisplay<'_, White, Self>
fn white(&self) -> FgColorDisplay<'_, White, Self>
Source§fn on_white(&self) -> BgColorDisplay<'_, White, Self>
fn on_white(&self) -> BgColorDisplay<'_, White, Self>
Source§fn default_color(&self) -> FgColorDisplay<'_, Default, Self>
fn default_color(&self) -> FgColorDisplay<'_, Default, Self>
Source§fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>
fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>
Source§fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>
fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>
Source§fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>
fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>
Source§fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>
fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>
Source§fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>
fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>
Source§fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>
fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>
Source§fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>
fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>
Source§fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>
fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>
Source§fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>
fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>
Source§fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>
fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>
Source§fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>
fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>
Source§fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
Source§fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
Source§fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
Source§fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
Source§fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>
fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>
Source§fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>
fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>
Source§fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>
fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>
Source§fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>
fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>
Source§fn bold(&self) -> BoldDisplay<'_, Self>
fn bold(&self) -> BoldDisplay<'_, Self>
Source§fn dimmed(&self) -> DimDisplay<'_, Self>
fn dimmed(&self) -> DimDisplay<'_, Self>
Source§fn italic(&self) -> ItalicDisplay<'_, Self>
fn italic(&self) -> ItalicDisplay<'_, Self>
Source§fn underline(&self) -> UnderlineDisplay<'_, Self>
fn underline(&self) -> UnderlineDisplay<'_, Self>
Source§fn blink(&self) -> BlinkDisplay<'_, Self>
fn blink(&self) -> BlinkDisplay<'_, Self>
Source§fn blink_fast(&self) -> BlinkFastDisplay<'_, Self>
fn blink_fast(&self) -> BlinkFastDisplay<'_, Self>
Source§fn reversed(&self) -> ReversedDisplay<'_, Self>
fn reversed(&self) -> ReversedDisplay<'_, Self>
Source§fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>
fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>
Source§fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
OwoColorize::fg or
a color-specific method, such as OwoColorize::green, Read moreSource§fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
OwoColorize::bg or
a color-specific method, such as OwoColorize::on_yellow, Read more