Run and Add Cell keybinding support (#3896)

- As part of this, fixed bug in the insertCell API where it didn't add to the end / failed if no cells existed
This commit is contained in:
Kevin Cunnane
2019-02-04 14:02:15 -08:00
committed by GitHub
parent 15929e8cf2
commit 2fce771214
12 changed files with 185 additions and 34 deletions

View File

@@ -85,7 +85,7 @@ export class NotebookEditorEdit {
insertCell(value: Partial<sqlops.nb.ICellContents>, location?: number): void {
if (location === null || location === undefined) {
// If not specified, assume adding to end of list
location = this._document.cells.length - 1;
location = this._document.cells.length;
}
this._pushEdit(new CellRange(location, location), value, true);
}
@@ -153,7 +153,8 @@ export class ExtHostNotebookEditor implements sqlops.nb.NotebookEditor, IDisposa
}
public runCell(cell: sqlops.nb.NotebookCell): Thenable<boolean> {
return this._proxy.$runCell(this._id, cell.uri);
let uri = cell ? cell.uri : undefined;
return this._proxy.$runCell(this._id, uri);
}
public edit(callback: (editBuilder: sqlops.nb.NotebookEditorEdit) => void, options?: { undoStopBefore: boolean; undoStopAfter: boolean; }): Thenable<boolean> {

View File

@@ -5,7 +5,6 @@
'use strict';
import * as sqlops from 'sqlops';
import * as util from 'util';
import { extHostNamedCustomer } from 'vs/workbench/api/electron-browser/extHostCustomers';
import { Disposable, IDisposable } from 'vs/base/common/lifecycle';
import URI, { UriComponents } from 'vs/base/common/uri';
@@ -29,7 +28,7 @@ import { getProvidersForFileName, getStandardKernelsForProvider } from 'sql/part
import { ISingleNotebookEditOperation } from 'sql/workbench/api/common/sqlExtHostTypes';
import { disposed } from 'vs/base/common/errors';
import { ICellModel, NotebookContentChange, INotebookModel } from 'sql/parts/notebook/models/modelInterfaces';
import { NotebookChangeType } from 'sql/parts/notebook/models/contracts';
import { NotebookChangeType, CellTypes } from 'sql/parts/notebook/models/contracts';
class MainThreadNotebookEditor extends Disposable {
private _contentChangedEmitter = new Emitter<NotebookContentChange>();
@@ -333,10 +332,20 @@ export class MainThreadNotebookDocumentsAndEditors extends Disposable implements
if (!editor) {
return TPromise.wrapError<boolean>(disposed(`TextEditor(${id})`));
}
let uriString = URI.revive(cellUri).toString();
let cell = editor.cells.find(c => c.cellUri.toString() === uriString);
let cell: ICellModel;
if (cellUri) {
let uriString = URI.revive(cellUri).toString();
cell = editor.cells.find(c => c.cellUri.toString() === uriString);
// If it's markdown what should we do? Show notification??
} else {
// Use the active cell in this case, or 1st cell if there's none active
cell = editor.model.activeCell;
if (!cell) {
cell = editor.cells.find(c => c.cellType === CellTypes.Code);
}
}
if (!cell) {
return TPromise.wrapError<boolean>(disposed(`TextEditorCell(${uriString})`));
return TPromise.wrapError<boolean>(disposed(`Could not find cell for this Notebook`));
}
return TPromise.wrap(editor.runCell(cell));