Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xxadev
vscode
提交
c8eb898f
V
vscode
项目概览
xxadev
/
vscode
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
V
vscode
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
c8eb898f
编写于
7月 10, 2019
作者:
D
Daniel Imms
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Support open in terminal in remote
Fixes microsoft/vscode-remote-release#774
上级
877235c6
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
58 addition
and
15 deletion
+58
-15
src/vs/workbench/contrib/externalTerminal/browser/externalTerminal.contribution.ts
...externalTerminal/browser/externalTerminal.contribution.ts
+56
-13
src/vs/workbench/workbench.web.main.ts
src/vs/workbench/workbench.web.main.ts
+2
-2
未找到文件。
src/vs/workbench/contrib/externalTerminal/browser/externalTerminal.contribution.ts
浏览文件 @
c8eb898f
...
...
@@ -21,6 +21,8 @@ import { CommandsRegistry } from 'vs/platform/commands/common/commands';
import
{
Schemas
}
from
'
vs/base/common/network
'
;
import
{
distinct
}
from
'
vs/base/common/arrays
'
;
import
{
IEditorService
}
from
'
vs/workbench/services/editor/common/editorService
'
;
import
{
IRemoteAgentService
}
from
'
vs/workbench/services/remote/common/remoteAgentService
'
;
import
{
optional
}
from
'
vs/platform/instantiation/common/instantiation
'
;
const
OPEN_IN_TERMINAL_COMMAND_ID
=
'
openInTerminal
'
;
...
...
@@ -30,23 +32,28 @@ CommandsRegistry.registerCommand({
const
configurationService
=
accessor
.
get
(
IConfigurationService
);
const
editorService
=
accessor
.
get
(
IEditorService
);
const
fileService
=
accessor
.
get
(
IFileService
);
const
terminalService
:
IExternalTerminalService
|
undefined
=
accessor
.
get
(
IExternalTerminalService
,
optional
);
const
integratedTerminalService
=
accessor
.
get
(
IIntegratedTerminalService
);
const
terminalService
=
accessor
.
get
(
IExternalTerminalService
);
const
resources
=
getMultiSelectedResources
(
resource
,
accessor
.
get
(
IListService
),
editorService
);
const
remoteAgentService
=
accessor
.
get
(
IRemoteAgentService
);
return
fileService
.
resolveAll
(
resources
.
map
(
r
=>
({
resource
:
r
}))).
then
(
stats
=>
{
const
directoriesToOpen
=
distinct
(
stats
.
filter
(
data
=>
data
.
success
).
map
(({
stat
})
=>
stat
!
.
isDirectory
?
stat
!
.
resource
.
fsPath
:
paths
.
dirname
(
stat
!
.
resource
.
fsPath
)));
return
directoriesToOpen
.
map
(
dir
=>
{
if
(
configurationService
.
getValue
<
IExternalTerminalConfiguration
>
().
terminal
.
explorerKind
===
'
integrated
'
)
{
const
instance
=
integratedTerminalService
.
createTerminal
({
cwd
:
dir
});
if
(
instance
&&
(
resources
.
length
===
1
||
!
resource
||
dir
===
resource
.
fsPath
||
dir
===
paths
.
dirname
(
resource
.
fsPath
)))
{
const
resources
=
getMultiSelectedResources
(
resource
,
accessor
.
get
(
IListService
),
editorService
);
return
fileService
.
resolveAll
(
resources
.
map
(
r
=>
({
resource
:
r
}))).
then
(
async
stats
=>
{
const
targets
=
distinct
(
stats
.
filter
(
data
=>
data
.
success
));
// Always use integrated terminal when using a remote
const
useIntegratedTerminal
=
remoteAgentService
.
getConnection
()
||
configurationService
.
getValue
<
IExternalTerminalConfiguration
>
().
terminal
.
explorerKind
===
'
integrated
'
;
if
(
useIntegratedTerminal
)
{
distinct
(
targets
.
map
(({
stat
})
=>
stat
!
.
isDirectory
?
stat
!
.
resource
.
path
:
paths
.
dirname
(
stat
!
.
resource
.
path
))).
map
(
cwd
=>
{
const
instance
=
integratedTerminalService
.
createTerminal
({
cwd
});
if
(
instance
&&
(
resources
.
length
===
1
||
!
resource
||
cwd
===
resource
.
path
||
cwd
===
paths
.
dirname
(
resource
.
path
)))
{
integratedTerminalService
.
setActiveInstance
(
instance
);
integratedTerminalService
.
showPanel
(
true
);
}
}
else
{
terminalService
.
openTerminal
(
dir
);
}
});
});
}
else
{
distinct
(
targets
.
map
(({
stat
})
=>
stat
!
.
isDirectory
?
stat
!
.
resource
.
fsPath
:
paths
.
dirname
(
stat
!
.
resource
.
fsPath
))).
map
(
cwd
=>
{
terminalService
.
openTerminal
(
cwd
);
});
}
});
}
});
...
...
@@ -58,7 +65,31 @@ KeybindingsRegistry.registerCommandAndKeybindingRule({
when
:
KEYBINDING_CONTEXT_TERMINAL_NOT_FOCUSED
,
weight
:
KeybindingWeight
.
WorkbenchContrib
,
handler
:
(
accessor
)
=>
{
const
remoteAgentService
=
accessor
.
get
(
IRemoteAgentService
);
const
historyService
=
accessor
.
get
(
IHistoryService
);
// Open integrated terminal in remote workspaces
if
(
remoteAgentService
.
getConnection
())
{
const
integratedTerminalService
=
accessor
.
get
(
IIntegratedTerminalService
);
const
root
=
historyService
.
getLastActiveWorkspaceRoot
(
Schemas
.
vscodeRemote
);
let
cwd
:
string
|
undefined
;
if
(
root
)
{
cwd
=
root
.
path
;
}
else
{
const
activeFile
=
historyService
.
getLastActiveFile
(
Schemas
.
vscodeRemote
);
if
(
activeFile
)
{
cwd
=
paths
.
dirname
(
activeFile
.
path
);
}
}
if
(
cwd
)
{
const
instance
=
integratedTerminalService
.
createTerminal
({
cwd
});
integratedTerminalService
.
setActiveInstance
(
instance
);
integratedTerminalService
.
showPanel
(
true
);
}
return
;
}
// Open external terminal in local workspaces
const
terminalService
=
accessor
.
get
(
IExternalTerminalService
);
const
root
=
historyService
.
getLastActiveWorkspaceRoot
(
Schemas
.
file
);
if
(
root
)
{
...
...
@@ -90,10 +121,22 @@ MenuRegistry.appendMenuItem(MenuId.OpenEditorsContext, {
command
:
openConsoleCommand
,
when
:
ResourceContextKey
.
Scheme
.
isEqualTo
(
Schemas
.
file
)
});
MenuRegistry
.
appendMenuItem
(
MenuId
.
OpenEditorsContext
,
{
group
:
'
navigation
'
,
order
:
30
,
command
:
openConsoleCommand
,
when
:
ResourceContextKey
.
Scheme
.
isEqualTo
(
Schemas
.
vscodeRemote
)
});
MenuRegistry
.
appendMenuItem
(
MenuId
.
ExplorerContext
,
{
group
:
'
navigation
'
,
order
:
30
,
command
:
openConsoleCommand
,
when
:
ResourceContextKey
.
Scheme
.
isEqualTo
(
Schemas
.
file
)
});
MenuRegistry
.
appendMenuItem
(
MenuId
.
ExplorerContext
,
{
group
:
'
navigation
'
,
order
:
30
,
command
:
openConsoleCommand
,
when
:
ResourceContextKey
.
Scheme
.
isEqualTo
(
Schemas
.
vscodeRemote
)
});
src/vs/workbench/workbench.web.main.ts
浏览文件 @
c8eb898f
...
...
@@ -306,8 +306,8 @@ import 'vs/workbench/contrib/emmet/browser/emmet.contribution';
import
'
vs/workbench/contrib/codeEditor/browser/codeEditor.contribution
'
;
// import 'vs/workbench/contrib/codeEditor/electron-browser/codeEditor.contribution';
// Ex
ecution
// import 'vs/workbench/contrib/externalTerminal/electron-
browser/externalTerminal.contribution';
// Ex
ternal terminal
import
'
vs/workbench/contrib/externalTerminal/
browser/externalTerminal.contribution
'
;
// Snippets
import
'
vs/workbench/contrib/snippets/browser/snippets.contribution
'
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录