Interface NotebookController

A notebook controller represents an entity that can execute notebook cells. This is often referred to as a kernel.

There can be multiple controllers and the editor will let users choose which controller to use for a certain notebook. The notebookType-property defines for what kind of notebooks a controller is for and the updateNotebookAffinity-function allows controllers to set a preference for specific notebook documents. When a controller has been selected its onDidChangeSelectedNotebooks-event fires.

When a cell is being run the editor will invoke the executeHandler and a controller is expected to create and finalize a notebook cell execution. However, controllers are also free to create executions by themselves.

interface NotebookController {
    description?: string;
    detail?: string;
    executeHandler: ((cells, notebook, controller) => void | Thenable<void>);
    id: string;
    interruptHandler?: ((notebook) => void | Thenable<void>);
    label: string;
    notebookType: string;
    onDidChangeSelectedNotebooks: Event<{
        notebook: NotebookDocument;
        selected: boolean;
    }>;
    onDidReceiveMessage: Event<{
        editor: NotebookEditor;
        message: unknown;
    }>;
    rendererScripts: NotebookRendererScript[];
    supportedLanguages?: string[];
    supportsExecutionOrder?: boolean;
    asWebviewUri(localResource): Uri;
    createNotebookCellExecution(cell): NotebookCellExecution;
    dispose(): void;
    postMessage(message, editor?): Thenable<boolean>;
    updateNotebookAffinity(notebook, affinity): void;
}

Properties

description?: string

The human-readable description which is rendered less prominent.

detail?: string

The human-readable detail which is rendered less prominent.

executeHandler: ((cells, notebook, controller) => void | Thenable<void>)

The execute handler is invoked when the run gestures in the UI are selected, e.g Run Cell, Run All, Run Selection etc. The execute handler is responsible for creating and managing execution-objects.

Type declaration

id: string

The identifier of this notebook controller.

Note that controllers are remembered by their identifier and that extensions should use stable identifiers across sessions.

interruptHandler?: ((notebook) => void | Thenable<void>)

Optional interrupt handler.

By default cell execution is canceled via tokens. Cancellation tokens require that a controller can keep track of its execution so that it can cancel a specific execution at a later point. Not all scenarios allow for that, eg. REPL-style controllers often work by interrupting whatever is currently running. For those cases the interrupt handler exists - it can be thought of as the equivalent of SIGINT or Control+C in terminals.

Note that supporting cancellation tokens is preferred and that interrupt handlers should only be used when tokens cannot be supported.

Type declaration

label: string

The human-readable label of this notebook controller.

notebookType: string

The notebook type this controller is for.

onDidChangeSelectedNotebooks: Event<{
    notebook: NotebookDocument;
    selected: boolean;
}>

An event that fires whenever a controller has been selected or un-selected for a notebook document.

There can be multiple controllers for a notebook and in that case a controllers needs to be selected. This is a user gesture and happens either explicitly or implicitly when interacting with a notebook for which a controller was suggested. When possible, the editor suggests a controller that is most likely to be selected.

Note that controller selection is persisted (by the controllers id) and restored as soon as a controller is re-created or as a notebook is workspace.onDidOpenNotebookDocument opened.

Type declaration

onDidReceiveMessage: Event<{
    editor: NotebookEditor;
    message: unknown;
}>

An event that fires when a renderer script has send a message to the controller.

Type declaration

rendererScripts: NotebookRendererScript[]
supportedLanguages?: string[]

An array of language identifiers that are supported by this controller. Any language identifier from languages.getLanguages getLanguages is possible. When falsy all languages are supported.

Samples:

// support JavaScript and TypeScript
myController.supportedLanguages = ['javascript', 'typescript']

// support all languages
myController.supportedLanguages = undefined; // falsy
myController.supportedLanguages = []; // falsy
supportsExecutionOrder?: boolean

Whether this controller supports execution order so that the editor can render placeholders for them.

Methods

  • Create a cell execution task.

    Note that there can only be one execution per cell at a time and that an error is thrown if a cell execution is created while another is still active.

    This should be used in response to the execution handler being called or when cell execution has been started else, e.g when a cell was already executing or when cell execution was triggered from another source.

    Parameters

    • cell: NotebookCell

      The notebook cell for which to create the execution.

    Returns NotebookCellExecution

    A notebook cell execution.

  • Send a message to the renderer of notebook editors.

    Note that only editors showing documents that are bound to this controller are receiving the message.

    Parameters

    • message: unknown

      The message to send.

    • Optional editor: NotebookEditor

      A specific editor to send the message to. When undefined all applicable editors are receiving the message.

    Returns Thenable<boolean>

    A promise that resolves to a boolean indicating if the message has been send or not.