Skip to content

Commit

Permalink
Register repl actions with editor after session started (#20396)
Browse files Browse the repository at this point in the history
Makes repl actions that are specific to running kernels only come up
after a session has been started at least once for the editor.

Release Notes:

- Only show session oriented `repl::` actions for editors after a
session has been created
  • Loading branch information
rgbkrk authored Nov 8, 2024
1 parent edb89d8 commit 706c385
Show file tree
Hide file tree
Showing 3 changed files with 66 additions and 53 deletions.
58 changes: 57 additions & 1 deletion crates/repl/src/repl_editor.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,9 @@ use language::{BufferSnapshot, Language, LanguageName, Point};

use crate::repl_store::ReplStore;
use crate::session::SessionEvent;
use crate::{KernelSpecification, Session};
use crate::{
ClearOutputs, Interrupt, JupyterSettings, KernelSpecification, Restart, Session, Shutdown,
};

pub fn assign_kernelspec(
kernel_specification: KernelSpecification,
Expand Down Expand Up @@ -240,6 +242,60 @@ pub fn restart(editor: WeakView<Editor>, cx: &mut WindowContext) {
});
}

pub fn setup_editor_session_actions(editor: &mut Editor, editor_handle: WeakView<Editor>) {
editor
.register_action({
let editor_handle = editor_handle.clone();
move |_: &ClearOutputs, cx| {
if !JupyterSettings::enabled(cx) {
return;
}

crate::clear_outputs(editor_handle.clone(), cx);
}
})
.detach();

editor
.register_action({
let editor_handle = editor_handle.clone();
move |_: &Interrupt, cx| {
if !JupyterSettings::enabled(cx) {
return;
}

crate::interrupt(editor_handle.clone(), cx);
}
})
.detach();

editor
.register_action({
let editor_handle = editor_handle.clone();
move |_: &Shutdown, cx| {
if !JupyterSettings::enabled(cx) {
return;
}

crate::shutdown(editor_handle.clone(), cx);
}
})
.detach();

editor
.register_action({
let editor_handle = editor_handle.clone();
move |_: &Restart, cx| {
if !JupyterSettings::enabled(cx) {
return;
}

crate::restart(editor_handle.clone(), cx);
}
})
.detach();
}

fn cell_range(buffer: &BufferSnapshot, start_row: u32, end_row: u32) -> Range<Point> {
let mut snippet_end_row = end_row;
while buffer.is_line_blank(snippet_end_row) && snippet_end_row > start_row {
Expand Down
52 changes: 0 additions & 52 deletions crates/repl/src/repl_sessions_ui.rs
Original file line number Diff line number Diff line change
Expand Up @@ -97,58 +97,6 @@ pub fn init(cx: &mut AppContext) {
}
})
.detach();

editor
.register_action({
let editor_handle = editor_handle.clone();
move |_: &ClearOutputs, cx| {
if !JupyterSettings::enabled(cx) {
return;
}

crate::clear_outputs(editor_handle.clone(), cx);
}
})
.detach();

editor
.register_action({
let editor_handle = editor_handle.clone();
move |_: &Interrupt, cx| {
if !JupyterSettings::enabled(cx) {
return;
}

crate::interrupt(editor_handle.clone(), cx);
}
})
.detach();

editor
.register_action({
let editor_handle = editor_handle.clone();
move |_: &Shutdown, cx| {
if !JupyterSettings::enabled(cx) {
return;
}

crate::shutdown(editor_handle.clone(), cx);
}
})
.detach();

editor
.register_action({
let editor_handle = editor_handle.clone();
move |_: &Restart, cx| {
if !JupyterSettings::enabled(cx) {
return;
}

crate::restart(editor_handle.clone(), cx);
}
})
.detach();
})
.detach();
}
Expand Down
9 changes: 9 additions & 0 deletions crates/repl/src/session.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
use crate::components::KernelListItem;
use crate::setup_editor_session_actions;
use crate::{
kernels::{Kernel, KernelSpecification, RunningKernel},
outputs::{ExecutionStatus, ExecutionView},
Expand Down Expand Up @@ -207,6 +208,14 @@ impl Session {
None => Subscription::new(|| {}),
};

let editor_handle = editor.clone();

editor
.update(cx, |editor, _cx| {
setup_editor_session_actions(editor, editor_handle);
})
.ok();

let mut session = Self {
fs,
editor,
Expand Down

0 comments on commit 706c385

Please sign in to comment.