pub struct CommandState { /* private fields */ }Expand description
The commands of a Command palette, its query, and its highlight.
Owned by the view that shows the palette, which observes it so a change renders. The query filters the commands by label and keywords as a fuzzy subsequence, ignoring case, and puts the highlight on the first match; Up and Down move it, and Enter chooses it. Choosing a command, or submitting a query, clears the query for the next time.
Implementations§
Source§impl CommandState
impl CommandState
Sourcepub fn new(
placeholder: impl Into<SharedString>,
window: &mut Window,
cx: &mut Context<'_, Self>,
) -> Self
pub fn new( placeholder: impl Into<SharedString>, window: &mut Window, cx: &mut Context<'_, Self>, ) -> Self
A palette with no commands, whose search field shows placeholder.
Sourcepub fn with_entries(
self,
entries: impl IntoIterator<Item = impl Into<CommandEntry>>,
) -> Self
pub fn with_entries( self, entries: impl IntoIterator<Item = impl Into<CommandEntry>>, ) -> Self
Seeds the commands.
Sourcepub fn with_search_handler(
self,
handler: impl Fn(SharedString, &mut Context<'_, Self>) -> Task<Vec<CommandEntry>> + 'static,
cx: &mut Context<'_, Self>,
) -> Self
pub fn with_search_handler( self, handler: impl Fn(SharedString, &mut Context<'_, Self>) -> Task<Vec<CommandEntry>> + 'static, cx: &mut Context<'_, Self>, ) -> Self
Answers the query with handler in place of the local filter:
for each change, and for the empty query when set, it gets the
query and returns a task with the commands to show. The task can
match on a background thread, fuzzily, or ask a server; a newer
query cancels the task before it. The commands shown stay until
the answer arrives.
use gpui_cn::{CommandEntry, CommandItem, CommandState};
use gpui_kit::{AppContext as _, Context, Window};
fn files(window: &mut Window, cx: &mut Context<CommandState>) -> CommandState {
CommandState::new("Open any file", window, cx).with_search_handler(|query, cx| {
let paths = cx.background_spawn(async move {
// Any search: fuzzy, indexed, or a request.
vec![format!("src/{query}.rs")]
});
cx.spawn(async move |_, _| {
paths
.await
.into_iter()
.map(|path| CommandEntry::from(CommandItem::new(path.clone(), path)))
.collect()
})
}, cx)
}Sourcepub fn is_searching(&self) -> bool
pub fn is_searching(&self) -> bool
Whether a search handler is still answering the query.
Sourcepub fn set_entries(
&mut self,
entries: impl IntoIterator<Item = impl Into<CommandEntry>>,
cx: &mut Context<'_, Self>,
)
pub fn set_entries( &mut self, entries: impl IntoIterator<Item = impl Into<CommandEntry>>, cx: &mut Context<'_, Self>, )
Replaces the commands, as an answer to the query. The highlight stays on the command with the same key when there is one, and a search handler’s answer still on its way is dropped, so it cannot replace these commands.
Sourcepub fn query(&self, cx: &App) -> SharedString
pub fn query(&self, cx: &App) -> SharedString
The search query.
Sourcepub fn set_query(
&mut self,
query: impl Into<SharedString>,
window: &mut Window,
cx: &mut Context<'_, Self>,
)
pub fn set_query( &mut self, query: impl Into<SharedString>, window: &mut Window, cx: &mut Context<'_, Self>, )
Replaces the search query.
Sourcepub fn highlighted(&self) -> Option<SharedString>
pub fn highlighted(&self) -> Option<SharedString>
The key of the command the keyboard or the pointer is on.
Sourcepub fn matched_count(&self) -> usize
pub fn matched_count(&self) -> usize
How many commands match the query.
Trait Implementations§
impl EventEmitter<CommandEvent> for CommandState
Source§impl Focusable for CommandState
The search field’s focus, which holds the keyboard for the palette.
impl Focusable for CommandState
The search field’s focus, which holds the keyboard for the palette.
Source§fn focus_handle(&self, cx: &App) -> FocusHandle
fn focus_handle(&self, cx: &App) -> FocusHandle
Auto Trait Implementations§
impl !RefUnwindSafe for CommandState
impl !Send for CommandState
impl !Sync for CommandState
impl !UnwindSafe for CommandState
impl Freeze for CommandState
impl Unpin for CommandState
impl UnsafeUnpin for CommandState
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> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.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 more