Discover available python environments with Jupyter kernel support (#20467)
 Closes #18291 Closes #16757 Closes #15563 Release Notes: - Added support for kernelspecs based on python environments
This commit is contained in:
parent
6152230152
commit
97b542b22a
6 changed files with 269 additions and 148 deletions
|
@ -4,8 +4,10 @@ use crate::KERNEL_DOCS_URL;
|
|||
|
||||
use gpui::DismissEvent;
|
||||
|
||||
use gpui::FontWeight;
|
||||
use picker::Picker;
|
||||
use picker::PickerDelegate;
|
||||
use project::WorktreeId;
|
||||
|
||||
use std::sync::Arc;
|
||||
use ui::ListItemSpacing;
|
||||
|
@ -22,7 +24,7 @@ pub struct KernelSelector<T: PopoverTrigger> {
|
|||
on_select: OnSelect,
|
||||
trigger: T,
|
||||
info_text: Option<SharedString>,
|
||||
current_kernelspec: Option<KernelSpecification>,
|
||||
worktree_id: WorktreeId,
|
||||
}
|
||||
|
||||
pub struct KernelPickerDelegate {
|
||||
|
@ -33,17 +35,13 @@ pub struct KernelPickerDelegate {
|
|||
}
|
||||
|
||||
impl<T: PopoverTrigger> KernelSelector<T> {
|
||||
pub fn new(
|
||||
on_select: OnSelect,
|
||||
current_kernelspec: Option<KernelSpecification>,
|
||||
trigger: T,
|
||||
) -> Self {
|
||||
pub fn new(on_select: OnSelect, worktree_id: WorktreeId, trigger: T) -> Self {
|
||||
KernelSelector {
|
||||
on_select,
|
||||
handle: None,
|
||||
trigger,
|
||||
info_text: None,
|
||||
current_kernelspec,
|
||||
worktree_id,
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -130,24 +128,34 @@ impl PickerDelegate for KernelPickerDelegate {
|
|||
.spacing(ListItemSpacing::Sparse)
|
||||
.selected(selected)
|
||||
.child(
|
||||
h_flex().w_full().justify_between().min_w(px(200.)).child(
|
||||
h_flex()
|
||||
.gap_1p5()
|
||||
.child(Label::new(kernelspec.name()))
|
||||
.child(
|
||||
Label::new(kernelspec.type_name())
|
||||
.size(LabelSize::XSmall)
|
||||
.color(Color::Muted),
|
||||
),
|
||||
),
|
||||
v_flex()
|
||||
.min_w(px(600.))
|
||||
.w_full()
|
||||
.gap_0p5()
|
||||
.child(
|
||||
h_flex()
|
||||
.w_full()
|
||||
.gap_1()
|
||||
.child(Label::new(kernelspec.name()).weight(FontWeight::MEDIUM))
|
||||
.child(
|
||||
Label::new(kernelspec.language())
|
||||
.size(LabelSize::Small)
|
||||
.color(Color::Muted),
|
||||
),
|
||||
)
|
||||
.child(
|
||||
Label::new(kernelspec.path())
|
||||
.size(LabelSize::XSmall)
|
||||
.color(Color::Muted),
|
||||
),
|
||||
)
|
||||
.end_slot(div().when(is_selected, |this| {
|
||||
this.child(
|
||||
.when(is_selected, |item| {
|
||||
item.end_slot(
|
||||
Icon::new(IconName::Check)
|
||||
.color(Color::Accent)
|
||||
.size(IconSize::Small),
|
||||
)
|
||||
})),
|
||||
}),
|
||||
)
|
||||
}
|
||||
|
||||
|
@ -175,10 +183,13 @@ impl PickerDelegate for KernelPickerDelegate {
|
|||
impl<T: PopoverTrigger> RenderOnce for KernelSelector<T> {
|
||||
fn render(self, cx: &mut WindowContext) -> impl IntoElement {
|
||||
let store = ReplStore::global(cx).read(cx);
|
||||
let all_kernels: Vec<KernelSpecification> =
|
||||
store.kernel_specifications().cloned().collect();
|
||||
|
||||
let selected_kernelspec = self.current_kernelspec;
|
||||
let all_kernels: Vec<KernelSpecification> = store
|
||||
.kernel_specifications_for_worktree(self.worktree_id)
|
||||
.cloned()
|
||||
.collect();
|
||||
|
||||
let selected_kernelspec = store.active_kernelspec(self.worktree_id, None, cx);
|
||||
|
||||
let delegate = KernelPickerDelegate {
|
||||
on_select: self.on_select,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue