Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
掘金者说
vscode
提交
7c946e11
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,发现更多精彩内容 >>
未验证
提交
7c946e11
编写于
4月 13, 2021
作者:
J
Johannes Rieken
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
add onDidChangeNotebookAssociation-API and wire everything up using the glue adapter
上级
ade32e71
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
52 addition
and
28 deletion
+52
-28
src/vs/vscode.proposed.d.ts
src/vs/vscode.proposed.d.ts
+6
-10
src/vs/workbench/api/common/extHostNotebookKernels.ts
src/vs/workbench/api/common/extHostNotebookKernels.ts
+4
-5
src/vs/workbench/contrib/notebook/browser/notebook.contribution.ts
...rkbench/contrib/notebook/browser/notebook.contribution.ts
+3
-3
src/vs/workbench/contrib/notebook/browser/notebookKernelServiceImpl.ts
...nch/contrib/notebook/browser/notebookKernelServiceImpl.ts
+38
-9
src/vs/workbench/contrib/notebook/common/notebookKernelService.ts
...orkbench/contrib/notebook/common/notebookKernelService.ts
+1
-1
未找到文件。
src/vs/vscode.proposed.d.ts
浏览文件 @
7c946e11
...
...
@@ -1448,20 +1448,16 @@ declare module 'vscode' {
// select notebook of a type and/or by file-pattern
readonly
selector
:
NotebookSelector
;
// selection is tricky/bogous because a kernel can be selected for
// different notebook documents. A handler-approach might be the better
// fit here, e.g:
// selectionHandler?: (notebook: NotebookDocument, selected: boolean) => void;
// // is this kernel selected
// readonly selected: boolean;
// // fired when kernel is selected/unselected
// readonly onDidChangeSelection: Event<boolean>;
/**
* A kernel can apply to one or many notebook documents but a notebook has only one active
* kernel. This event fires whenever a notebook has been associated to a kernel or when
* that association has been removed.
*/
readonly
onDidChangeNotebookAssociation
:
Event
<
{
notebook
:
NotebookDocument
,
selected
:
boolean
}
>
;
// kernels can establish IPC channels to (visible) notebook editors
// createNotebookCommunication(editor: vscode.NotebookEditor): vscode.NotebookCommunication;
// UI properties (get/set)
label
:
string
;
description
:
string
;
...
...
src/vs/workbench/api/common/extHostNotebookKernels.ts
浏览文件 @
7c946e11
...
...
@@ -21,7 +21,7 @@ export class ExtHostNotebookKernels implements ExtHostNotebookKernelsShape {
private
readonly
_proxy
:
MainThreadNotebookKernelsShape
;
private
readonly
_kernelData
=
new
Map
<
number
,
{
id
:
string
,
executeHandler
:
ExecuteHandler
,
interruptHandler
?:
InterruptHandler
,
onDidChangeSelection
:
Emitter
<
{
selected
:
boolean
,
uri
:
URI
}
>
}
>
();
private
readonly
_kernelData
=
new
Map
<
number
,
{
id
:
string
,
executeHandler
:
ExecuteHandler
,
interruptHandler
?:
InterruptHandler
,
onDidChangeSelection
:
Emitter
<
{
selected
:
boolean
,
notebook
:
vscode
.
NotebookDocument
}
>
}
>
();
private
_handlePool
:
number
=
0
;
constructor
(
...
...
@@ -39,7 +39,7 @@ export class ExtHostNotebookKernels implements ExtHostNotebookKernelsShape {
let
isDisposed
=
false
;
const
commandDisposables
=
new
DisposableStore
();
const
emitter
=
new
Emitter
<
{
selected
:
boolean
,
uri
:
URI
}
>
();
const
emitter
=
new
Emitter
<
{
selected
:
boolean
,
notebook
:
vscode
.
NotebookDocument
}
>
();
this
.
_kernelData
.
set
(
handle
,
{
id
:
options
.
id
,
executeHandler
:
options
.
executeHandler
,
onDidChangeSelection
:
emitter
});
const
data
:
INotebookKernelDto2
=
{
...
...
@@ -73,8 +73,7 @@ export class ExtHostNotebookKernels implements ExtHostNotebookKernelsShape {
return
{
get
id
()
{
return
data
.
id
;
},
get
selector
()
{
return
data
.
selector
;
},
// onDidChangeSelection: emitter.event,
onDidChangeNotebookAssociation
:
emitter
.
event
,
get
label
()
{
return
data
.
label
;
},
...
...
@@ -133,7 +132,7 @@ export class ExtHostNotebookKernels implements ExtHostNotebookKernelsShape {
if
(
obj
)
{
obj
.
onDidChangeSelection
.
fire
({
selected
:
value
,
uri
:
URI
.
revive
(
uri
)
notebook
:
this
.
_extHostNotebook
.
lookupNotebookDocument
(
URI
.
revive
(
uri
))
!
.
notebookDocument
});
}
}
...
...
src/vs/workbench/contrib/notebook/browser/notebook.contribution.ts
浏览文件 @
7c946e11
...
...
@@ -54,6 +54,9 @@ import { Event } from 'vs/base/common/event';
import
{
IAccessibilityService
}
from
'
vs/platform/accessibility/common/accessibility
'
;
import
{
IContextKey
,
IContextKeyService
}
from
'
vs/platform/contextkey/common/contextkey
'
;
import
{
getFormatedMetadataJSON
}
from
'
vs/workbench/contrib/notebook/browser/diff/diffElementViewModel
'
;
import
{
NotebookModelResolverServiceImpl
}
from
'
vs/workbench/contrib/notebook/common/notebookEditorModelResolverServiceImpl
'
;
import
{
INotebookKernelService
}
from
'
vs/workbench/contrib/notebook/common/notebookKernelService
'
;
import
{
NotebookKernelService
}
from
'
vs/workbench/contrib/notebook/browser/notebookKernelServiceImpl
'
;
// Editor Contribution
import
'
vs/workbench/contrib/notebook/browser/contrib/clipboard/notebookClipboard
'
;
...
...
@@ -75,9 +78,6 @@ import 'vs/workbench/contrib/notebook/browser/diff/notebookDiffActions';
// Output renderers registration
import
'
vs/workbench/contrib/notebook/browser/view/output/transforms/richTransform
'
;
import
{
NotebookModelResolverServiceImpl
}
from
'
vs/workbench/contrib/notebook/common/notebookEditorModelResolverServiceImpl
'
;
import
{
INotebookKernelService
}
from
'
vs/workbench/contrib/notebook/common/notebookKernelService
'
;
import
{
NotebookKernelService
}
from
'
vs/workbench/contrib/notebook/common/notebookKernelServiceImpl
'
;
/*--------------------------------------------------------------------------------------------- */
...
...
src/vs/workbench/contrib/notebook/
common
/notebookKernelServiceImpl.ts
→
src/vs/workbench/contrib/notebook/
browser
/notebookKernelServiceImpl.ts
浏览文件 @
7c946e11
...
...
@@ -4,7 +4,7 @@
*--------------------------------------------------------------------------------------------*/
import
{
Event
,
Emitter
}
from
'
vs/base/common/event
'
;
import
{
DisposableStore
,
IDisposable
,
toDisposable
}
from
'
vs/base/common/lifecycle
'
;
import
{
DisposableStore
,
dispose
,
IDisposable
,
toDisposable
}
from
'
vs/base/common/lifecycle
'
;
import
{
ICellRange
,
INotebookKernel
,
INotebookTextModel
}
from
'
vs/workbench/contrib/notebook/common/notebookCommon
'
;
import
{
INotebookKernelBindEvent
,
INotebookKernel2
,
INotebookKernelService
}
from
'
vs/workbench/contrib/notebook/common/notebookKernelService
'
;
import
{
score
}
from
'
vs/workbench/contrib/notebook/common/notebookSelector
'
;
...
...
@@ -14,6 +14,7 @@ import { LifecyclePhase } from 'vs/workbench/services/lifecycle/common/lifecycle
import
{
INotebookService
}
from
'
vs/workbench/contrib/notebook/common/notebookService
'
;
import
{
URI
}
from
'
vs/base/common/uri
'
;
import
{
ResourceMap
}
from
'
vs/base/common/map
'
;
import
{
INotebookEditorService
}
from
'
vs/workbench/contrib/notebook/browser/notebookEditorService
'
;
export
class
NotebookKernelService
implements
INotebookKernelService
{
...
...
@@ -86,10 +87,14 @@ export class NotebookKernelService implements INotebookKernelService {
// a notebook has one kernel, a kernel has N notebooks
// notebook <-1----N-> kernel
bindNotebookToKernel
(
notebook
:
INotebookTextModel
,
kernel
:
INotebookKernel2
):
void
{
updateNotebookKernelBinding
(
notebook
:
INotebookTextModel
,
kernel
:
INotebookKernel2
|
undefined
):
void
{
const
oldKernel
=
this
.
_kernelBindings
.
get
(
notebook
.
uri
);
if
(
oldKernel
!==
kernel
)
{
this
.
_kernelBindings
.
set
(
notebook
.
uri
,
kernel
);
if
(
kernel
)
{
this
.
_kernelBindings
.
set
(
notebook
.
uri
,
kernel
);
}
else
{
this
.
_kernelBindings
.
delete
(
notebook
.
uri
);
}
this
.
_onDidChangeNotebookKernelBinding
.
fire
({
notebook
:
notebook
.
uri
,
oldKernel
,
newKernel
:
kernel
});
}
}
...
...
@@ -105,14 +110,12 @@ class KernelAdaptorBridge implements IWorkbenchContribution {
constructor
(
@
INotebookKernelService
notebookKernelService
:
INotebookKernelService
,
@
INotebookService
notebookService
:
INotebookService
,
@
INotebookEditorService
notebookEditorService
:
INotebookEditorService
)
{
const
disposables
=
new
DisposableStore
();
const
emitter
=
new
Emitter
<
URI
|
undefined
>
();
const
kernels
=
new
Map
<
INotebookKernel2
,
IDisposable
>
();
disposables
.
add
(
notebookKernelService
.
onDidAddKernel
(
kernel
=>
{
...
...
@@ -130,7 +133,7 @@ class KernelAdaptorBridge implements IWorkbenchContribution {
}
}));
// kernel -> provider
const
registration
=
notebookService
.
registerNotebookKernelProvider
({
onDidChangeKernels
:
emitter
.
event
,
providerExtensionId
:
'
notAnExtension
'
,
...
...
@@ -141,8 +144,7 @@ class KernelAdaptorBridge implements IWorkbenchContribution {
if
(
!
model
)
{
return
[];
}
const
kernels
=
notebookKernelService
.
getKernels
(
model
);
return
kernels
.
map
((
kernel
:
INotebookKernel2
):
INotebookKernel
=>
{
return
notebookKernelService
.
getKernels
(
model
).
map
((
kernel
:
INotebookKernel2
):
INotebookKernel
=>
{
return
{
id
:
kernel
.
id
,
friendlyId
:
kernel
.
id
,
...
...
@@ -165,7 +167,34 @@ class KernelAdaptorBridge implements IWorkbenchContribution {
}
});
// kernel binding
const
editorListener
=
new
Map
<
string
,
IDisposable
>
();
disposables
.
add
(
notebookEditorService
.
onDidAddNotebookEditor
(
e
=>
{
const
r1
=
e
.
onDidChangeKernel
(()
=>
{
if
(
!
e
.
viewModel
)
{
return
;
}
let
kernel
:
INotebookKernel2
|
undefined
;
if
(
e
.
activeKernel
)
{
for
(
const
candidate
of
kernels
.
keys
())
{
if
(
e
.
activeKernel
.
friendlyId
===
candidate
.
id
)
{
kernel
=
candidate
;
break
;
}
}
}
notebookKernelService
.
updateNotebookKernelBinding
(
e
.
viewModel
.
notebookDocument
,
kernel
);
});
editorListener
.
set
(
e
.
getId
(),
r1
);
}));
disposables
.
add
(
notebookEditorService
.
onDidRemoveNotebookEditor
(
e
=>
{
editorListener
.
get
(
e
.
getId
())?.
dispose
();
editorListener
.
delete
(
e
.
getId
());
}));
this
.
dispose
=
()
=>
{
dispose
(
editorListener
.
values
());
disposables
.
dispose
();
emitter
.
dispose
();
registration
.
dispose
();
...
...
src/vs/workbench/contrib/notebook/common/notebookKernelService.ts
浏览文件 @
7c946e11
...
...
@@ -66,5 +66,5 @@ export interface INotebookKernelService {
* Bind a notebook document to a kernel. A notebook is only bound to one kernel
* but a kernel can be bound to many notebooks (depending on its configuration)
*/
bindNotebookToKernel
(
notebook
:
INotebookTextModel
,
kernel
:
INotebookKernel2
):
void
;
updateNotebookKernelBinding
(
notebook
:
INotebookTextModel
,
kernel
:
INotebookKernel2
|
undefined
):
void
;
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录