Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
掘金者说
vscode
提交
11d693fd
V
vscode
项目概览
掘金者说
/
vscode
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
V
vscode
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
11d693fd
编写于
7月 27, 2021
作者:
D
Daniel Imms
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Dispose newWithProfile before registering again
Fixes #129514
上级
03d2d9ce
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
7 addition
and
104 deletion
+7
-104
src/vs/workbench/contrib/terminal/browser/terminalActions.ts
src/vs/workbench/contrib/terminal/browser/terminalActions.ts
+7
-104
未找到文件。
src/vs/workbench/contrib/terminal/browser/terminalActions.ts
浏览文件 @
11d693fd
...
...
@@ -9,6 +9,7 @@ import { Codicon } from 'vs/base/common/codicons';
import
{
KeyCode
,
KeyMod
}
from
'
vs/base/common/keyCodes
'
;
import
{
Schemas
}
from
'
vs/base/common/network
'
;
import
{
isLinux
,
isWindows
}
from
'
vs/base/common/platform
'
;
import
{
IDisposable
}
from
'
vs/base/common/lifecycle
'
;
import
{
withNullAsUndefined
}
from
'
vs/base/common/types
'
;
import
{
URI
}
from
'
vs/base/common/uri
'
;
import
{
ICodeEditorService
}
from
'
vs/editor/browser/services/codeEditorService
'
;
...
...
@@ -131,109 +132,8 @@ export function registerTerminalActions() {
}
});
registerAction2
(
class
extends
Action2
{
constructor
()
{
super
({
id
:
TerminalCommandId
.
NewWithProfile
,
title
:
{
value
:
localize
(
'
workbench.action.terminal.newWithProfile
'
,
"
Create New Integrated Terminal (With Profile)
"
),
original
:
'
Create New Integrated Terminal (With Profile)
'
},
f1
:
true
,
category
,
precondition
:
TerminalContextKeys
.
processSupported
,
description
:
{
description
:
'
workbench.action.terminal.newWithProfile
'
,
args
:
[{
name
:
'
args
'
,
schema
:
{
type
:
'
object
'
,
required
:
[
'
profileName
'
],
properties
:
{
profileName
:
{
description
:
localize
(
'
workbench.action.terminal.newWithProfile.profileName
'
,
"
The name of the profile to create
"
),
type
:
'
string
'
,
minLength
:
1
}
}
}
}]
},
});
}
async
run
(
accessor
:
ServicesAccessor
,
eventOrOptionsOrProfile
:
MouseEvent
|
ICreateTerminalOptions
|
ITerminalProfile
|
{
profileName
:
string
}
|
undefined
,
profile
?:
ITerminalProfile
)
{
const
terminalService
=
accessor
.
get
(
ITerminalService
);
const
terminalGroupService
=
accessor
.
get
(
ITerminalGroupService
);
const
workspaceContextService
=
accessor
.
get
(
IWorkspaceContextService
);
const
commandService
=
accessor
.
get
(
ICommandService
);
let
event
:
MouseEvent
|
PointerEvent
|
KeyboardEvent
|
undefined
;
let
options
:
ICreateTerminalOptions
|
undefined
;
if
(
typeof
eventOrOptionsOrProfile
===
'
object
'
&&
eventOrOptionsOrProfile
&&
(
'
profileName
'
in
eventOrOptionsOrProfile
||
'
title
'
in
eventOrOptionsOrProfile
))
{
const
config
=
terminalService
.
allProfiles
?.
find
(
profile
=>
{
if
(
profile
)
{
if
(
'
title
'
in
profile
)
{
return
profile
.
title
===
eventOrOptionsOrProfile
.
profileName
;
}
else
if
(
'
profileName
'
in
profile
)
{
return
profile
.
profileName
===
eventOrOptionsOrProfile
.
profileName
;
}
else
{
return
false
;
}
}
return
false
;
});
if
(
!
config
)
{
throw
new
Error
(
`Could not find terminal profile "
${
eventOrOptionsOrProfile
.
profileName
}
"`
);
}
options
=
{
config
};
}
else
if
(
eventOrOptionsOrProfile
instanceof
MouseEvent
||
eventOrOptionsOrProfile
instanceof
PointerEvent
||
eventOrOptionsOrProfile
instanceof
KeyboardEvent
)
{
event
=
eventOrOptionsOrProfile
;
options
=
profile
?
{
config
:
profile
}
:
undefined
;
}
else
{
options
=
convertOptionsOrProfileToOptions
(
eventOrOptionsOrProfile
);
}
const
folders
=
workspaceContextService
.
getWorkspace
().
folders
;
if
(
event
&&
(
event
.
altKey
||
event
.
ctrlKey
))
{
const
activeInstance
=
terminalService
.
activeInstance
;
if
(
activeInstance
)
{
const
cwd
=
await
getCwdForSplit
(
terminalService
.
configHelper
,
activeInstance
);
await
terminalService
.
splitInstance
(
activeInstance
,
options
?.
config
,
cwd
);
return
;
}
}
if
(
terminalService
.
isProcessSupportRegistered
)
{
let
instance
:
ITerminalInstance
|
undefined
;
let
cwd
:
string
|
URI
|
undefined
;
if
(
folders
.
length
>
1
)
{
// multi-root workspace, create root picker
const
options
:
IPickOptions
<
IQuickPickItem
>
=
{
placeHolder
:
localize
(
'
workbench.action.terminal.newWorkspacePlaceholder
'
,
"
Select current working directory for new terminal
"
)
};
const
workspace
=
await
commandService
.
executeCommand
(
PICK_WORKSPACE_FOLDER_COMMAND_ID
,
[
options
]);
if
(
!
workspace
)
{
// Don't create the instance if the workspace picker was canceled
return
;
}
cwd
=
workspace
.
uri
;
}
if
(
options
)
{
instance
=
await
terminalService
.
createTerminal
(
options
);
}
else
{
instance
=
await
terminalService
.
showProfileQuickPick
(
'
createInstance
'
,
cwd
);
}
if
(
instance
)
{
terminalService
.
setActiveInstance
(
instance
);
if
(
instance
.
target
===
TerminalLocation
.
Editor
)
{
await
instance
.
focusWhenReady
(
true
);
}
else
{
await
terminalGroupService
.
showPanel
(
true
);
}
}
}
}
});
// Register new with profile command
refreshTerminalActions
([]);
registerAction2
(
class
extends
Action2
{
constructor
()
{
...
...
@@ -2069,10 +1969,13 @@ function convertOptionsOrProfileToOptions(optionsOrProfile?: ICreateTerminalOpti
return
optionsOrProfile
;
}
let
newWithProfileAction
:
IDisposable
;
export
function
refreshTerminalActions
(
detectedProfiles
:
ITerminalProfile
[])
{
const
profileEnum
=
createProfileSchemaEnums
(
detectedProfiles
);
const
category
:
ILocalizedString
=
{
value
:
TERMINAL_ACTION_CATEGORY
,
original
:
'
Terminal
'
};
registerAction2
(
class
extends
Action2
{
newWithProfileAction
?.
dispose
();
newWithProfileAction
=
registerAction2
(
class
extends
Action2
{
constructor
()
{
super
({
id
:
TerminalCommandId
.
NewWithProfile
,
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录