@@ -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,
@@ -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 {
@@ -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();
}
@@ -1,4 +1,5 @@
use crate::components::KernelListItem;
+use crate::setup_editor_session_actions;
use crate::{
kernels::{Kernel, KernelSpecification, RunningKernel},
outputs::{ExecutionStatus, ExecutionView},
@@ -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,