@@ -32,9 +32,11 @@ import { Context as SuggestContext } from 'vs/editor/contrib/suggest/browser/sug
32
32
import { MANAGE_TRUST_COMMAND_ID , WorkspaceTrustContext } from 'vs/workbench/contrib/workspace/common/workspace' ;
33
33
import { IQuickDiffService } from 'vs/workbench/contrib/scm/common/quickDiff' ;
34
34
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' ;
36
36
import { SCMWorkingSetController } from 'vs/workbench/contrib/scm/browser/workingSet' ;
37
37
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' ;
38
40
39
41
ModesRegistry . registerLanguage ( {
40
42
id : 'scminput' ,
@@ -463,12 +465,35 @@ KeybindingsRegistry.registerCommandAndKeybindingRule({
463
465
primary : KeyMod . Alt | KeyCode . UpArrow
464
466
} ) ;
465
467
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 ) {
468
470
return ;
469
471
}
470
472
471
473
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
+
472
497
await commandService . executeCommand ( 'openInIntegratedTerminal' , provider . rootUri ) ;
473
498
} ) ;
474
499
0 commit comments