From b71972bbb006a7f1af5cc2dbd87e935f7e24bb40 Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Fri, 18 Dec 2020 17:11:23 -0800 Subject: [PATCH] Support open in background for 'open with' Fixes #112851 --- .../services/editor/common/editorOpenWith.ts | 38 +++++++++++++------ 1 file changed, 26 insertions(+), 12 deletions(-) diff --git a/src/vs/workbench/services/editor/common/editorOpenWith.ts b/src/vs/workbench/services/editor/common/editorOpenWith.ts index ad9534d0ad98..a7853cda9583 100644 --- a/src/vs/workbench/services/editor/common/editorOpenWith.ts +++ b/src/vs/workbench/services/editor/common/editorOpenWith.ts @@ -91,19 +91,39 @@ export async function openEditorWith( picker.selectedItems = [items[0]]; } picker.placeholder = nls.localize('promptOpenWith.placeHolder', "Select editor for '{0}'", basename(originalResource)); + picker.canAcceptInBackground = true; type PickedResult = { readonly item: QuickPickItem; readonly keyMods?: IKeyMods; + readonly openInBackground: boolean; }; + function openEditor(picked: PickedResult) { + const targetGroup = getTargetGroup(group, picked.keyMods, configurationService, editorGroupsService); + + const openOptions: IEditorOptions = { + ...options, + override: picked.item.id, + preserveFocus: picked.openInBackground || options?.preserveFocus, + }; + return picked.item.handler.open(input, openOptions, targetGroup, OpenEditorContext.NEW_EDITOR)?.override; + } + const picked = await new Promise(resolve => { - picker.onDidAccept(() => { + picker.onDidAccept(e => { if (picker.selectedItems.length === 1) { - resolve({ + const result: PickedResult = { item: picker.selectedItems[0], - keyMods: picker.keyMods - }); + keyMods: picker.keyMods, + openInBackground: e.inBackground + }; + + if (e.inBackground) { + openEditor(result); + } else { + resolve(result); + } } else { resolve(undefined); } @@ -112,7 +132,7 @@ export async function openEditorWith( picker.onDidTriggerItemButton(e => { const pick = e.item; const id = pick.id; - resolve({ item: pick }); // open the view + resolve({ item: pick, openInBackground: false }); // open the view picker.dispose(); // And persist the setting @@ -143,13 +163,7 @@ export async function openEditorWith( return undefined; } - const targetGroup = getTargetGroup(group, picked.keyMods, configurationService, editorGroupsService); - - const openOptions: IEditorOptions = { - ...options, - override: picked.item.id, - }; - return picked.item.handler.open(input, openOptions, targetGroup, OpenEditorContext.NEW_EDITOR)?.override; + return openEditor(picked); } const builtinProviderDisplayName = nls.localize('builtinProviderDisplayName', "Built-in");