дзеркало
https://github.com/l0ng-ai/openidea.git
синхронізовано 2026-11-08 19:02:17 +02:00
Opens .ipynb files in a native notebook editor, in a project or LightEdit. - crates/ide-notebook: lossless nbformat documents (unchanged notebooks save byte-for-byte, unknown fields kept, external changes detected) and owned local kernels over ZMQ via kernelspec — the selected Python environment only needs ipykernel, no Jupyter server. - ide-host owns notebook documents per project incarnation and admits one execution batch at a time; outputs stream over IPC channels and kernel status is an IdeEvent. - src/features/notebook: virtualized Python/Markdown cells, insert/delete/move/change type, Run Cell / Run All (Shift+Enter), interrupt, restart, interpreter selection from ide-sdk discovery, shared split views. Raw/unknown cells stay read-only. - Custom editor kinds take part in dirty state, save/save all, undo/redo and Save/Don't Save/Cancel; closing editors from other features awaits that decision. - Outputs: text, tracebacks, PNG/JPEG and sanitized SVG inline; HTML sanitized in a sandboxed iframe without allow-same-origin; JavaScript output is shown as inert source. - Explicit launches (opening a notebook from the OS) win over session restoration. Closes #131 Co-authored-by: dvictor357 <[email protected]>
89 рядки
2.9 KiB
Rust
89 рядки
2.9 KiB
Rust
//! Thin desktop adapters for the shared native notebook service.
|
|
use crate::state::AppState;
|
|
use ide_core::{IdeResult, RequestId};
|
|
use ide_host::ops::notebook::{self, NotebookOutputEvent};
|
|
use ide_notebook::{NotebookEdit, NotebookSnapshot};
|
|
use tauri::ipc::Channel;
|
|
use tauri::{State, Window};
|
|
|
|
#[tauri::command]
|
|
#[specta::specta]
|
|
pub async fn notebook_open(window: Window, state: State<'_, AppState>, path: String) -> IdeResult<NotebookSnapshot> {
|
|
notebook::open(&state.host, window.label(), path).await
|
|
}
|
|
|
|
#[tauri::command]
|
|
#[specta::specta]
|
|
pub fn notebook_get(window: Window, state: State<'_, AppState>, id: String) -> IdeResult<NotebookSnapshot> {
|
|
notebook::get(&state.host, window.label(), id)
|
|
}
|
|
|
|
#[tauri::command]
|
|
#[specta::specta]
|
|
pub async fn notebook_edit(
|
|
window: Window,
|
|
state: State<'_, AppState>,
|
|
id: String,
|
|
version: u32,
|
|
edit: NotebookEdit,
|
|
) -> IdeResult<NotebookSnapshot> {
|
|
notebook::edit(&state.host, window.label(), id, version, edit).await
|
|
}
|
|
|
|
#[tauri::command]
|
|
#[specta::specta]
|
|
pub async fn notebook_save(window: Window, state: State<'_, AppState>, id: String) -> IdeResult<NotebookSnapshot> {
|
|
notebook::save(&state.host, window.label(), id).await
|
|
}
|
|
|
|
#[tauri::command]
|
|
#[specta::specta]
|
|
pub async fn notebook_reload(window: Window, state: State<'_, AppState>, id: String) -> IdeResult<NotebookSnapshot> {
|
|
notebook::reload(&state.host, window.label(), id).await
|
|
}
|
|
|
|
#[tauri::command]
|
|
#[specta::specta]
|
|
pub async fn notebook_undo(window: Window, state: State<'_, AppState>, id: String) -> IdeResult<NotebookSnapshot> {
|
|
notebook::undo(&state.host, window.label(), id).await
|
|
}
|
|
|
|
#[tauri::command]
|
|
#[specta::specta]
|
|
pub async fn notebook_redo(window: Window, state: State<'_, AppState>, id: String) -> IdeResult<NotebookSnapshot> {
|
|
notebook::redo(&state.host, window.label(), id).await
|
|
}
|
|
|
|
#[tauri::command]
|
|
#[specta::specta]
|
|
pub async fn notebook_close(window: Window, state: State<'_, AppState>, id: String) -> IdeResult<()> {
|
|
notebook::close(&state.host, window.label(), id).await
|
|
}
|
|
|
|
#[tauri::command]
|
|
#[specta::specta]
|
|
pub async fn notebook_interrupt(window: Window, state: State<'_, AppState>, id: String) -> IdeResult<()> {
|
|
notebook::interrupt(&state.host, window.label(), id).await
|
|
}
|
|
|
|
#[tauri::command]
|
|
#[specta::specta]
|
|
pub async fn notebook_restart(window: Window, state: State<'_, AppState>, id: String) -> IdeResult<NotebookSnapshot> {
|
|
notebook::restart(&state.host, window.label(), id).await
|
|
}
|
|
|
|
#[tauri::command]
|
|
#[specta::specta]
|
|
#[allow(clippy::too_many_arguments)]
|
|
pub async fn notebook_execute(
|
|
window: Window,
|
|
state: State<'_, AppState>,
|
|
id: String,
|
|
cells: Vec<String>,
|
|
python: Option<String>,
|
|
request: RequestId,
|
|
on_output: Channel<NotebookOutputEvent>,
|
|
) -> IdeResult<NotebookSnapshot> {
|
|
notebook::execute(&state.host, window.label(), id, cells, python, request, super::sender(on_output)).await
|
|
}
|