Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xxadev
vscode
提交
92abc925
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,体验更适合开发者的 AI 搜索 >>
提交
92abc925
编写于
3月 10, 2017
作者:
A
Alex Dima
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Add tests for KeybindingLabels
上级
e1dbce60
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
259 addition
and
1 deletion
+259
-1
src/vs/platform/keybinding/common/keybindingLabels.ts
src/vs/platform/keybinding/common/keybindingLabels.ts
+63
-1
src/vs/platform/keybinding/test/common/keybindingLabels.test.ts
.../platform/keybinding/test/common/keybindingLabels.test.ts
+196
-0
未找到文件。
src/vs/platform/keybinding/common/keybindingLabels.ts
浏览文件 @
92abc925
...
...
@@ -190,7 +190,7 @@ export class MacUIKeyLabelProvider implements IKeyBindingLabelProvider {
* Aria label provider for Mac.
*/
export
class
AriaKeyLabelProvider
implements
IKeyBindingLabelProvider
{
public
static
INSTANCE
=
new
MacUI
KeyLabelProvider
();
public
static
INSTANCE
=
new
Aria
KeyLabelProvider
();
public
ctrlKeyLabel
=
nls
.
localize
(
'
ctrlKey.long
'
,
"
Control
"
);
public
shiftKeyLabel
=
nls
.
localize
(
'
shiftKey.long
'
,
"
Shift
"
);
...
...
@@ -241,6 +241,68 @@ class UserSettingsKeyLabelProvider implements IKeyBindingLabelProvider {
}
}
// export class PrintableKeypress {
// public static fromKeybinding(keybinding: SimpleKeybinding, labelProvider: IKeyBindingLabelProvider, Platform: ISimplifiedPlatform): PrintableKeypress {
// const ctrlCmd = keybinding.hasCtrlCmd();
// const winCtrl = keybinding.hasWinCtrl();
// const ctrlKey = Platform.isMacintosh ? winCtrl : ctrlCmd;
// const metaKey = Platform.isMacintosh ? ctrlCmd : winCtrl;
// const shiftKey = keybinding.hasShift();
// const altKey = keybinding.hasAlt();
// const keyCode = keybinding.getKeyCode();
// const keyLabel = labelProvider.getLabelForKey(keyCode) || '';
// return new PrintableKeypress(ctrlKey, shiftKey, altKey, metaKey, keyLabel);
// }
// readonly ctrlKey: boolean;
// readonly shiftKey: boolean;
// readonly altKey: boolean;
// readonly metaKey: boolean;
// readonly key: string;
// constructor(ctrlKey: boolean, shiftKey: boolean, altKey: boolean, metaKey: boolean, key: string) {
// this.ctrlKey = ctrlKey;
// this.shiftKey = shiftKey;
// this.altKey = altKey;
// this.metaKey = metaKey;
// this.key = key;
// }
// }
// function _simpleAsString2(keypress: PrintableKeypress, labelProvider: IKeyBindingLabelProvider, Platform: ISimplifiedPlatform): string {
// if (!keypress.key) {
// return '';
// }
// let result: string[] = [];
// // translate modifier keys: Ctrl-Shift-Alt-Meta
// if (keypress.ctrlKey) {
// result.push(labelProvider.ctrlKeyLabel);
// }
// if (keypress.shiftKey) {
// result.push(labelProvider.shiftKeyLabel);
// }
// if (keypress.altKey) {
// result.push(labelProvider.altKeyLabel);
// }
// if (keypress.metaKey) {
// result.push(Platform.isMacintosh ? labelProvider.cmdKeyLabel : labelProvider.windowsKeyLabel);
// }
// // the actual key
// result.push(keypress.key);
// return result.join(labelProvider.modifierSeparator);
// }
function
_simpleAsString
(
keybinding
:
SimpleKeybinding
,
labelProvider
:
IKeyBindingLabelProvider
,
Platform
:
ISimplifiedPlatform
):
string
{
let
result
:
string
[]
=
[];
let
ctrlCmd
=
keybinding
.
hasCtrlCmd
();
...
...
src/vs/platform/keybinding/test/common/keybindingLabels.test.ts
0 → 100644
浏览文件 @
92abc925
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
'
use strict
'
;
import
*
as
assert
from
'
assert
'
;
import
{
createKeybinding
,
KeyCode
,
KeyMod
,
KeyChord
}
from
'
vs/base/common/keyCodes
'
;
import
{
ISimplifiedPlatform
,
KeybindingLabels
}
from
'
vs/platform/keybinding/common/keybindingLabels
'
;
import
{
IHTMLContentElement
}
from
'
vs/base/common/htmlContent
'
;
suite
(
'
KeybindingLabels
'
,
()
=>
{
const
WINDOWS
:
ISimplifiedPlatform
=
{
isMacintosh
:
false
,
isWindows
:
true
};
const
LINUX
:
ISimplifiedPlatform
=
{
isMacintosh
:
false
,
isWindows
:
false
};
const
MAC
:
ISimplifiedPlatform
=
{
isMacintosh
:
true
,
isWindows
:
false
};
function
assertUSLabel
(
Platform
:
ISimplifiedPlatform
,
keybinding
:
number
,
expected
:
string
):
void
{
assert
.
equal
(
KeybindingLabels
.
_toUSLabel
(
createKeybinding
(
keybinding
),
Platform
),
expected
);
}
test
(
'
Windows US label
'
,
()
=>
{
// no modifier
assertUSLabel
(
WINDOWS
,
KeyCode
.
KEY_A
,
'
A
'
);
// one modifier
assertUSLabel
(
WINDOWS
,
KeyMod
.
CtrlCmd
|
KeyCode
.
KEY_A
,
'
Ctrl+A
'
);
assertUSLabel
(
WINDOWS
,
KeyMod
.
Shift
|
KeyCode
.
KEY_A
,
'
Shift+A
'
);
assertUSLabel
(
WINDOWS
,
KeyMod
.
Alt
|
KeyCode
.
KEY_A
,
'
Alt+A
'
);
assertUSLabel
(
WINDOWS
,
KeyMod
.
WinCtrl
|
KeyCode
.
KEY_A
,
'
Windows+A
'
);
// two modifiers
assertUSLabel
(
WINDOWS
,
KeyMod
.
CtrlCmd
|
KeyMod
.
Shift
|
KeyCode
.
KEY_A
,
'
Ctrl+Shift+A
'
);
assertUSLabel
(
WINDOWS
,
KeyMod
.
CtrlCmd
|
KeyMod
.
Alt
|
KeyCode
.
KEY_A
,
'
Ctrl+Alt+A
'
);
assertUSLabel
(
WINDOWS
,
KeyMod
.
CtrlCmd
|
KeyMod
.
WinCtrl
|
KeyCode
.
KEY_A
,
'
Ctrl+Windows+A
'
);
assertUSLabel
(
WINDOWS
,
KeyMod
.
Shift
|
KeyMod
.
Alt
|
KeyCode
.
KEY_A
,
'
Shift+Alt+A
'
);
assertUSLabel
(
WINDOWS
,
KeyMod
.
Shift
|
KeyMod
.
WinCtrl
|
KeyCode
.
KEY_A
,
'
Shift+Windows+A
'
);
assertUSLabel
(
WINDOWS
,
KeyMod
.
Alt
|
KeyMod
.
WinCtrl
|
KeyCode
.
KEY_A
,
'
Alt+Windows+A
'
);
// three modifiers
assertUSLabel
(
WINDOWS
,
KeyMod
.
CtrlCmd
|
KeyMod
.
Shift
|
KeyMod
.
Alt
|
KeyCode
.
KEY_A
,
'
Ctrl+Shift+Alt+A
'
);
assertUSLabel
(
WINDOWS
,
KeyMod
.
CtrlCmd
|
KeyMod
.
Shift
|
KeyMod
.
WinCtrl
|
KeyCode
.
KEY_A
,
'
Ctrl+Shift+Windows+A
'
);
assertUSLabel
(
WINDOWS
,
KeyMod
.
CtrlCmd
|
KeyMod
.
Alt
|
KeyMod
.
WinCtrl
|
KeyCode
.
KEY_A
,
'
Ctrl+Alt+Windows+A
'
);
assertUSLabel
(
WINDOWS
,
KeyMod
.
Shift
|
KeyMod
.
Alt
|
KeyMod
.
WinCtrl
|
KeyCode
.
KEY_A
,
'
Shift+Alt+Windows+A
'
);
// four modifiers
assertUSLabel
(
WINDOWS
,
KeyMod
.
CtrlCmd
|
KeyMod
.
Shift
|
KeyMod
.
Alt
|
KeyMod
.
WinCtrl
|
KeyCode
.
KEY_A
,
'
Ctrl+Shift+Alt+Windows+A
'
);
// chord
assertUSLabel
(
WINDOWS
,
KeyChord
(
KeyMod
.
CtrlCmd
|
KeyCode
.
KEY_A
,
KeyMod
.
CtrlCmd
|
KeyCode
.
KEY_B
),
'
Ctrl+A Ctrl+B
'
);
});
test
(
'
Linux US label
'
,
()
=>
{
// no modifier
assertUSLabel
(
LINUX
,
KeyCode
.
KEY_A
,
'
A
'
);
// one modifier
assertUSLabel
(
LINUX
,
KeyMod
.
CtrlCmd
|
KeyCode
.
KEY_A
,
'
Ctrl+A
'
);
assertUSLabel
(
LINUX
,
KeyMod
.
Shift
|
KeyCode
.
KEY_A
,
'
Shift+A
'
);
assertUSLabel
(
LINUX
,
KeyMod
.
Alt
|
KeyCode
.
KEY_A
,
'
Alt+A
'
);
assertUSLabel
(
LINUX
,
KeyMod
.
WinCtrl
|
KeyCode
.
KEY_A
,
'
Windows+A
'
);
// two modifiers
assertUSLabel
(
LINUX
,
KeyMod
.
CtrlCmd
|
KeyMod
.
Shift
|
KeyCode
.
KEY_A
,
'
Ctrl+Shift+A
'
);
assertUSLabel
(
LINUX
,
KeyMod
.
CtrlCmd
|
KeyMod
.
Alt
|
KeyCode
.
KEY_A
,
'
Ctrl+Alt+A
'
);
assertUSLabel
(
LINUX
,
KeyMod
.
CtrlCmd
|
KeyMod
.
WinCtrl
|
KeyCode
.
KEY_A
,
'
Ctrl+Windows+A
'
);
assertUSLabel
(
LINUX
,
KeyMod
.
Shift
|
KeyMod
.
Alt
|
KeyCode
.
KEY_A
,
'
Shift+Alt+A
'
);
assertUSLabel
(
LINUX
,
KeyMod
.
Shift
|
KeyMod
.
WinCtrl
|
KeyCode
.
KEY_A
,
'
Shift+Windows+A
'
);
assertUSLabel
(
LINUX
,
KeyMod
.
Alt
|
KeyMod
.
WinCtrl
|
KeyCode
.
KEY_A
,
'
Alt+Windows+A
'
);
// three modifiers
assertUSLabel
(
LINUX
,
KeyMod
.
CtrlCmd
|
KeyMod
.
Shift
|
KeyMod
.
Alt
|
KeyCode
.
KEY_A
,
'
Ctrl+Shift+Alt+A
'
);
assertUSLabel
(
LINUX
,
KeyMod
.
CtrlCmd
|
KeyMod
.
Shift
|
KeyMod
.
WinCtrl
|
KeyCode
.
KEY_A
,
'
Ctrl+Shift+Windows+A
'
);
assertUSLabel
(
LINUX
,
KeyMod
.
CtrlCmd
|
KeyMod
.
Alt
|
KeyMod
.
WinCtrl
|
KeyCode
.
KEY_A
,
'
Ctrl+Alt+Windows+A
'
);
assertUSLabel
(
LINUX
,
KeyMod
.
Shift
|
KeyMod
.
Alt
|
KeyMod
.
WinCtrl
|
KeyCode
.
KEY_A
,
'
Shift+Alt+Windows+A
'
);
// four modifiers
assertUSLabel
(
LINUX
,
KeyMod
.
CtrlCmd
|
KeyMod
.
Shift
|
KeyMod
.
Alt
|
KeyMod
.
WinCtrl
|
KeyCode
.
KEY_A
,
'
Ctrl+Shift+Alt+Windows+A
'
);
// chord
assertUSLabel
(
LINUX
,
KeyChord
(
KeyMod
.
CtrlCmd
|
KeyCode
.
KEY_A
,
KeyMod
.
CtrlCmd
|
KeyCode
.
KEY_B
),
'
Ctrl+A Ctrl+B
'
);
});
test
(
'
Mac US label
'
,
()
=>
{
// no modifier
assertUSLabel
(
MAC
,
KeyCode
.
KEY_A
,
'
A
'
);
// one modifier
assertUSLabel
(
MAC
,
KeyMod
.
CtrlCmd
|
KeyCode
.
KEY_A
,
'
⌘A
'
);
assertUSLabel
(
MAC
,
KeyMod
.
Shift
|
KeyCode
.
KEY_A
,
'
⇧A
'
);
assertUSLabel
(
MAC
,
KeyMod
.
Alt
|
KeyCode
.
KEY_A
,
'
⌥A
'
);
assertUSLabel
(
MAC
,
KeyMod
.
WinCtrl
|
KeyCode
.
KEY_A
,
'
⌃A
'
);
// two modifiers
assertUSLabel
(
MAC
,
KeyMod
.
CtrlCmd
|
KeyMod
.
Shift
|
KeyCode
.
KEY_A
,
'
⇧⌘A
'
);
assertUSLabel
(
MAC
,
KeyMod
.
CtrlCmd
|
KeyMod
.
Alt
|
KeyCode
.
KEY_A
,
'
⌥⌘A
'
);
assertUSLabel
(
MAC
,
KeyMod
.
CtrlCmd
|
KeyMod
.
WinCtrl
|
KeyCode
.
KEY_A
,
'
⌃⌘A
'
);
assertUSLabel
(
MAC
,
KeyMod
.
Shift
|
KeyMod
.
Alt
|
KeyCode
.
KEY_A
,
'
⇧⌥A
'
);
assertUSLabel
(
MAC
,
KeyMod
.
Shift
|
KeyMod
.
WinCtrl
|
KeyCode
.
KEY_A
,
'
⌃⇧A
'
);
assertUSLabel
(
MAC
,
KeyMod
.
Alt
|
KeyMod
.
WinCtrl
|
KeyCode
.
KEY_A
,
'
⌃⌥A
'
);
// three modifiers
assertUSLabel
(
MAC
,
KeyMod
.
CtrlCmd
|
KeyMod
.
Shift
|
KeyMod
.
Alt
|
KeyCode
.
KEY_A
,
'
⇧⌥⌘A
'
);
assertUSLabel
(
MAC
,
KeyMod
.
CtrlCmd
|
KeyMod
.
Shift
|
KeyMod
.
WinCtrl
|
KeyCode
.
KEY_A
,
'
⌃⇧⌘A
'
);
assertUSLabel
(
MAC
,
KeyMod
.
CtrlCmd
|
KeyMod
.
Alt
|
KeyMod
.
WinCtrl
|
KeyCode
.
KEY_A
,
'
⌃⌥⌘A
'
);
assertUSLabel
(
MAC
,
KeyMod
.
Shift
|
KeyMod
.
Alt
|
KeyMod
.
WinCtrl
|
KeyCode
.
KEY_A
,
'
⌃⇧⌥A
'
);
// four modifiers
assertUSLabel
(
MAC
,
KeyMod
.
CtrlCmd
|
KeyMod
.
Shift
|
KeyMod
.
Alt
|
KeyMod
.
WinCtrl
|
KeyCode
.
KEY_A
,
'
⌃⇧⌥⌘A
'
);
// chord
assertUSLabel
(
MAC
,
KeyChord
(
KeyMod
.
CtrlCmd
|
KeyCode
.
KEY_A
,
KeyMod
.
CtrlCmd
|
KeyCode
.
KEY_B
),
'
⌘A ⌘B
'
);
// special keys
assertUSLabel
(
MAC
,
KeyCode
.
LeftArrow
,
'
←
'
);
assertUSLabel
(
MAC
,
KeyCode
.
UpArrow
,
'
↑
'
);
assertUSLabel
(
MAC
,
KeyCode
.
RightArrow
,
'
→
'
);
assertUSLabel
(
MAC
,
KeyCode
.
DownArrow
,
'
↓
'
);
});
test
(
'
Aria label
'
,
()
=>
{
function
assertAriaLabel
(
Platform
:
ISimplifiedPlatform
,
keybinding
:
number
,
expected
:
string
):
void
{
assert
.
equal
(
KeybindingLabels
.
_toUSAriaLabel
(
createKeybinding
(
keybinding
),
Platform
),
expected
);
}
assertAriaLabel
(
WINDOWS
,
KeyMod
.
CtrlCmd
|
KeyMod
.
Shift
|
KeyMod
.
Alt
|
KeyMod
.
WinCtrl
|
KeyCode
.
KEY_A
,
'
Control+Shift+Alt+Windows+A
'
);
assertAriaLabel
(
LINUX
,
KeyMod
.
CtrlCmd
|
KeyMod
.
Shift
|
KeyMod
.
Alt
|
KeyMod
.
WinCtrl
|
KeyCode
.
KEY_A
,
'
Control+Shift+Alt+Windows+A
'
);
assertAriaLabel
(
MAC
,
KeyMod
.
CtrlCmd
|
KeyMod
.
Shift
|
KeyMod
.
Alt
|
KeyMod
.
WinCtrl
|
KeyCode
.
KEY_A
,
'
Control+Shift+Alt+Command+A
'
);
});
test
(
'
Electron Accelerator label
'
,
()
=>
{
function
assertElectronAcceleratorLabel
(
Platform
:
ISimplifiedPlatform
,
keybinding
:
number
,
expected
:
string
):
void
{
assert
.
equal
(
KeybindingLabels
.
_toElectronAccelerator
(
createKeybinding
(
keybinding
),
Platform
),
expected
);
}
assertElectronAcceleratorLabel
(
WINDOWS
,
KeyMod
.
CtrlCmd
|
KeyMod
.
Shift
|
KeyMod
.
Alt
|
KeyMod
.
WinCtrl
|
KeyCode
.
KEY_A
,
'
Ctrl+Shift+Alt+Super+A
'
);
assertElectronAcceleratorLabel
(
LINUX
,
KeyMod
.
CtrlCmd
|
KeyMod
.
Shift
|
KeyMod
.
Alt
|
KeyMod
.
WinCtrl
|
KeyCode
.
KEY_A
,
'
Ctrl+Shift+Alt+Super+A
'
);
assertElectronAcceleratorLabel
(
MAC
,
KeyMod
.
CtrlCmd
|
KeyMod
.
Shift
|
KeyMod
.
Alt
|
KeyMod
.
WinCtrl
|
KeyCode
.
KEY_A
,
'
Ctrl+Shift+Alt+Cmd+A
'
);
// electron cannot handle chords
assertElectronAcceleratorLabel
(
WINDOWS
,
KeyChord
(
KeyMod
.
CtrlCmd
|
KeyCode
.
KEY_A
,
KeyMod
.
CtrlCmd
|
KeyCode
.
KEY_B
),
null
);
assertElectronAcceleratorLabel
(
LINUX
,
KeyChord
(
KeyMod
.
CtrlCmd
|
KeyCode
.
KEY_A
,
KeyMod
.
CtrlCmd
|
KeyCode
.
KEY_B
),
null
);
assertElectronAcceleratorLabel
(
MAC
,
KeyChord
(
KeyMod
.
CtrlCmd
|
KeyCode
.
KEY_A
,
KeyMod
.
CtrlCmd
|
KeyCode
.
KEY_B
),
null
);
// electron cannot handle numpad keys
assertElectronAcceleratorLabel
(
WINDOWS
,
KeyCode
.
NUMPAD_1
,
null
);
assertElectronAcceleratorLabel
(
LINUX
,
KeyCode
.
NUMPAD_1
,
null
);
assertElectronAcceleratorLabel
(
MAC
,
KeyCode
.
NUMPAD_1
,
null
);
// special
assertElectronAcceleratorLabel
(
MAC
,
KeyCode
.
LeftArrow
,
'
Left
'
);
assertElectronAcceleratorLabel
(
MAC
,
KeyCode
.
UpArrow
,
'
Up
'
);
assertElectronAcceleratorLabel
(
MAC
,
KeyCode
.
RightArrow
,
'
Right
'
);
assertElectronAcceleratorLabel
(
MAC
,
KeyCode
.
DownArrow
,
'
Down
'
);
});
test
(
'
User Settings label
'
,
()
=>
{
function
assertElectronAcceleratorLabel
(
Platform
:
ISimplifiedPlatform
,
keybinding
:
number
,
expected
:
string
):
void
{
assert
.
equal
(
KeybindingLabels
.
toUserSettingsLabel
(
createKeybinding
(
keybinding
),
Platform
),
expected
);
}
assertElectronAcceleratorLabel
(
WINDOWS
,
KeyMod
.
CtrlCmd
|
KeyMod
.
Shift
|
KeyMod
.
Alt
|
KeyMod
.
WinCtrl
|
KeyCode
.
KEY_A
,
'
ctrl+shift+alt+win+a
'
);
assertElectronAcceleratorLabel
(
LINUX
,
KeyMod
.
CtrlCmd
|
KeyMod
.
Shift
|
KeyMod
.
Alt
|
KeyMod
.
WinCtrl
|
KeyCode
.
KEY_A
,
'
ctrl+shift+alt+meta+a
'
);
assertElectronAcceleratorLabel
(
MAC
,
KeyMod
.
CtrlCmd
|
KeyMod
.
Shift
|
KeyMod
.
Alt
|
KeyMod
.
WinCtrl
|
KeyCode
.
KEY_A
,
'
ctrl+shift+alt+cmd+a
'
);
// electron cannot handle chords
assertElectronAcceleratorLabel
(
WINDOWS
,
KeyChord
(
KeyMod
.
CtrlCmd
|
KeyCode
.
KEY_A
,
KeyMod
.
CtrlCmd
|
KeyCode
.
KEY_B
),
'
ctrl+a ctrl+b
'
);
assertElectronAcceleratorLabel
(
LINUX
,
KeyChord
(
KeyMod
.
CtrlCmd
|
KeyCode
.
KEY_A
,
KeyMod
.
CtrlCmd
|
KeyCode
.
KEY_B
),
'
ctrl+a ctrl+b
'
);
assertElectronAcceleratorLabel
(
MAC
,
KeyChord
(
KeyMod
.
CtrlCmd
|
KeyCode
.
KEY_A
,
KeyMod
.
CtrlCmd
|
KeyCode
.
KEY_B
),
'
cmd+a cmd+b
'
);
});
test
(
'
US HTML label
'
,
()
=>
{
function
assertHTMLLabel
(
Platform
:
ISimplifiedPlatform
,
keybinding
:
number
,
expected
:
IHTMLContentElement
[]):
void
{
assert
.
deepEqual
(
KeybindingLabels
.
_toUSHTMLLabel
(
createKeybinding
(
keybinding
),
Platform
),
expected
);
}
assertHTMLLabel
(
WINDOWS
,
KeyChord
(
KeyMod
.
CtrlCmd
|
KeyMod
.
Shift
|
KeyMod
.
Alt
|
KeyMod
.
WinCtrl
|
KeyCode
.
KEY_A
,
KeyCode
.
KEY_B
),
[{
tagName
:
'
span
'
,
className
:
'
monaco-kb
'
,
children
:
[
{
tagName
:
'
span
'
,
className
:
'
monaco-kbkey
'
,
text
:
'
Ctrl
'
},
{
tagName
:
'
span
'
,
text
:
'
+
'
},
{
tagName
:
'
span
'
,
className
:
'
monaco-kbkey
'
,
text
:
'
Shift
'
},
{
tagName
:
'
span
'
,
text
:
'
+
'
},
{
tagName
:
'
span
'
,
className
:
'
monaco-kbkey
'
,
text
:
'
Alt
'
},
{
tagName
:
'
span
'
,
text
:
'
+
'
},
{
tagName
:
'
span
'
,
className
:
'
monaco-kbkey
'
,
text
:
'
Windows
'
},
{
tagName
:
'
span
'
,
text
:
'
+
'
},
{
tagName
:
'
span
'
,
className
:
'
monaco-kbkey
'
,
text
:
'
A
'
},
{
tagName
:
'
span
'
,
text
:
'
'
},
{
tagName
:
'
span
'
,
className
:
'
monaco-kbkey
'
,
text
:
'
B
'
},
]
}]);
});
});
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录