Skip to content

Commit d9dd24f

Browse files
authored
SCM - fix open in integrated terminal command (#224270)
1 parent 59b9ae6 commit d9dd24f

File tree

1 file changed

+28
-3
lines changed

1 file changed

+28
-3
lines changed

src/vs/workbench/contrib/scm/browser/scm.contribution.ts

+28-3
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,11 @@ import { Context as SuggestContext } from 'vs/editor/contrib/suggest/browser/sug
3232
import { MANAGE_TRUST_COMMAND_ID, WorkspaceTrustContext } from 'vs/workbench/contrib/workspace/common/workspace';
3333
import { IQuickDiffService } from 'vs/workbench/contrib/scm/common/quickDiff';
3434
import { QuickDiffService } from 'vs/workbench/contrib/scm/common/quickDiffService';
35-
import { getActiveElement } from 'vs/base/browser/dom';
35+
import { getActiveElement, isActiveElement } from 'vs/base/browser/dom';
3636
import { SCMWorkingSetController } from 'vs/workbench/contrib/scm/browser/workingSet';
3737
import { IViewsService } from 'vs/workbench/services/views/common/viewsService';
38+
import { IListService, WorkbenchList } from 'vs/platform/list/browser/listService';
39+
import { isSCMRepository } from 'vs/workbench/contrib/scm/browser/util';
3840

3941
ModesRegistry.registerLanguage({
4042
id: 'scminput',
@@ -463,12 +465,35 @@ KeybindingsRegistry.registerCommandAndKeybindingRule({
463465
primary: KeyMod.Alt | KeyCode.UpArrow
464466
});
465467

466-
CommandsRegistry.registerCommand('scm.openInIntegratedTerminal', async (accessor, provider: ISCMProvider) => {
467-
if (!provider || !provider.rootUri) {
468+
CommandsRegistry.registerCommand('scm.openInIntegratedTerminal', async (accessor, ...providers: ISCMProvider[]) => {
469+
if (!providers || providers.length === 0) {
468470
return;
469471
}
470472

471473
const commandService = accessor.get(ICommandService);
474+
const listService = accessor.get(IListService);
475+
476+
let provider = providers.length === 1 ? providers[0] : undefined;
477+
478+
if (!provider) {
479+
const list = listService.lastFocusedList;
480+
const element = list?.getHTMLElement();
481+
482+
if (list instanceof WorkbenchList && element && isActiveElement(element)) {
483+
const [index] = list.getFocus();
484+
const focusedElement = list.element(index);
485+
486+
// Source Control Repositories
487+
if (isSCMRepository(focusedElement)) {
488+
provider = focusedElement.provider;
489+
}
490+
}
491+
}
492+
493+
if (!provider?.rootUri) {
494+
return;
495+
}
496+
472497
await commandService.executeCommand('openInIntegratedTerminal', provider.rootUri);
473498
});
474499

0 commit comments

Comments
 (0)