Skip to content

Commit b71972b

Browse files
committed
Support open in background for 'open with'
Fixes #112851
1 parent f0c758b commit b71972b

File tree

1 file changed

+26
-12
lines changed

1 file changed

+26
-12
lines changed

src/vs/workbench/services/editor/common/editorOpenWith.ts

+26-12
Original file line numberDiff line numberDiff line change
@@ -91,19 +91,39 @@ export async function openEditorWith(
9191
picker.selectedItems = [items[0]];
9292
}
9393
picker.placeholder = nls.localize('promptOpenWith.placeHolder', "Select editor for '{0}'", basename(originalResource));
94+
picker.canAcceptInBackground = true;
9495

9596
type PickedResult = {
9697
readonly item: QuickPickItem;
9798
readonly keyMods?: IKeyMods;
99+
readonly openInBackground: boolean;
98100
};
99101

102+
function openEditor(picked: PickedResult) {
103+
const targetGroup = getTargetGroup(group, picked.keyMods, configurationService, editorGroupsService);
104+
105+
const openOptions: IEditorOptions = {
106+
...options,
107+
override: picked.item.id,
108+
preserveFocus: picked.openInBackground || options?.preserveFocus,
109+
};
110+
return picked.item.handler.open(input, openOptions, targetGroup, OpenEditorContext.NEW_EDITOR)?.override;
111+
}
112+
100113
const picked = await new Promise<PickedResult | undefined>(resolve => {
101-
picker.onDidAccept(() => {
114+
picker.onDidAccept(e => {
102115
if (picker.selectedItems.length === 1) {
103-
resolve({
116+
const result: PickedResult = {
104117
item: picker.selectedItems[0],
105-
keyMods: picker.keyMods
106-
});
118+
keyMods: picker.keyMods,
119+
openInBackground: e.inBackground
120+
};
121+
122+
if (e.inBackground) {
123+
openEditor(result);
124+
} else {
125+
resolve(result);
126+
}
107127
} else {
108128
resolve(undefined);
109129
}
@@ -112,7 +132,7 @@ export async function openEditorWith(
112132
picker.onDidTriggerItemButton(e => {
113133
const pick = e.item;
114134
const id = pick.id;
115-
resolve({ item: pick }); // open the view
135+
resolve({ item: pick, openInBackground: false }); // open the view
116136
picker.dispose();
117137

118138
// And persist the setting
@@ -143,13 +163,7 @@ export async function openEditorWith(
143163
return undefined;
144164
}
145165

146-
const targetGroup = getTargetGroup(group, picked.keyMods, configurationService, editorGroupsService);
147-
148-
const openOptions: IEditorOptions = {
149-
...options,
150-
override: picked.item.id,
151-
};
152-
return picked.item.handler.open(input, openOptions, targetGroup, OpenEditorContext.NEW_EDITOR)?.override;
166+
return openEditor(picked);
153167
}
154168

155169
const builtinProviderDisplayName = nls.localize('builtinProviderDisplayName', "Built-in");

0 commit comments

Comments
 (0)