diff --git a/extensions/vscode-api-tests/src/commands.test.ts b/extensions/vscode-api-tests/src/commands.test.ts index 2106a2f2be5106802727012e1a402b35cc79932f..182bc2f26a214ccbe3489b756eab910e77f34218 100644 --- a/extensions/vscode-api-tests/src/commands.test.ts +++ b/extensions/vscode-api-tests/src/commands.test.ts @@ -7,7 +7,7 @@ import * as assert from 'assert'; import {join} from 'path'; -import {commands, workspace, window, Uri} from 'vscode'; +import {commands, workspace, window, Uri, ViewColumn} from 'vscode'; suite('commands namespace tests', () => { @@ -103,4 +103,14 @@ suite('commands namespace tests', () => { return Promise.all([a, b, c, d]); }); + + test('api-command: vscode.open', function () { + let uri = Uri.file(join(workspace.rootPath, './image.png')); + let a = commands.executeCommand('vscode.open', uri).then(() => assert.ok(true), () => assert.ok(false)); + let b = commands.executeCommand('vscode.open', uri, ViewColumn.Two).then(() => assert.ok(true), () => assert.ok(false)); + let c = commands.executeCommand('vscode.open').then(() => assert.ok(false), () => assert.ok(true)); + let d = commands.executeCommand('vscode.open', uri, true).then(() => assert.ok(false), () => assert.ok(true)); + + return Promise.all([a, b, c, d]); + }); }); diff --git a/extensions/vscode-api-tests/testWorkspace/image.png b/extensions/vscode-api-tests/testWorkspace/image.png new file mode 100644 index 0000000000000000000000000000000000000000..ff8b42295dd3078e8336b79f03385de09d68ed33 Binary files /dev/null and b/extensions/vscode-api-tests/testWorkspace/image.png differ diff --git a/src/vs/workbench/api/node/extHostApiCommands.ts b/src/vs/workbench/api/node/extHostApiCommands.ts index 13ca417da28e098057069a8629f75756290e5638..bb823b1ef822d9a7e94ad4d0b710f27587d40da2 100644 --- a/src/vs/workbench/api/node/extHostApiCommands.ts +++ b/src/vs/workbench/api/node/extHostApiCommands.ts @@ -208,6 +208,16 @@ class ExtHostApiCommands { { name: 'title', description: '(optional) Human readable title for the diff editor', constraint: v => v === void 0 || typeof v === 'string' } ] }); + + this._register('vscode.open', (resource: URI, column: vscode.ViewColumn) => { + return this._commands.executeCommand('_workbench.open', [resource, typeConverters.fromViewColumn(column)]); + }, { + description: 'Opens the provided resource in the editor. Can be a text or binary file.', + args: [ + { name: 'resource', description: 'Resource to open', constraint: URI }, + { name: 'column', description: '(optional) Column in which to open', constraint: v => v === void 0 || typeof v === 'number' } + ] + }); } // --- command impl diff --git a/src/vs/workbench/electron-browser/actions.ts b/src/vs/workbench/electron-browser/actions.ts index 8e88934dfe6cef7d665d1226c1592e99b81a6cb1..d94f1842ac965cefb7afaefb7b1a454fcd2d4032 100644 --- a/src/vs/workbench/electron-browser/actions.ts +++ b/src/vs/workbench/electron-browser/actions.ts @@ -491,4 +491,20 @@ KeybindingsRegistry.registerCommandDesc({ }, when: undefined, primary: undefined +}); + +KeybindingsRegistry.registerCommandDesc({ + id: '_workbench.open', + weight: KeybindingsRegistry.WEIGHT.workbenchContrib(0), + handler(accessor: ServicesAccessor, args: [URI, number]) { + + const editorService = accessor.get(IWorkbenchEditorService); + let [resource, column] = args; + + return editorService.openEditor({ resource }, column).then(() => { + return void 0; + }); + }, + when: undefined, + primary: undefined }); \ No newline at end of file