Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xxadev
vscode
提交
a3dba6ed
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,发现更多精彩内容 >>
提交
a3dba6ed
编写于
3月 17, 2017
作者:
A
Alex Dima
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Adopt RuntimeKeybinding
上级
28647334
变更
24
隐藏空白更改
内联
并排
Showing
24 changed file
with
261 addition
and
325 deletion
+261
-325
build/monaco/monaco.d.ts.recipe
build/monaco/monaco.d.ts.recipe
+0
-1
src/vs/base/browser/keyboardEvent.ts
src/vs/base/browser/keyboardEvent.ts
+21
-8
src/vs/base/common/keyCodes.ts
src/vs/base/common/keyCodes.ts
+24
-104
src/vs/base/parts/tree/browser/treeDefaults.ts
src/vs/base/parts/tree/browser/treeDefaults.ts
+6
-6
src/vs/base/test/common/keyCodes.test.ts
src/vs/base/test/common/keyCodes.test.ts
+81
-59
src/vs/editor/browser/standalone/simpleServices.ts
src/vs/editor/browser/standalone/simpleServices.ts
+1
-1
src/vs/editor/common/standalone/standaloneBase.ts
src/vs/editor/common/standalone/standaloneBase.ts
+1
-2
src/vs/editor/contrib/find/browser/findWidget.ts
src/vs/editor/contrib/find/browser/findWidget.ts
+47
-42
src/vs/editor/test/browser/standalone/simpleServices.test.ts
src/vs/editor/test/browser/standalone/simpleServices.test.ts
+3
-3
src/vs/monaco.d.ts
src/vs/monaco.d.ts
+0
-12
src/vs/platform/keybinding/common/abstractKeybindingService.ts
...s/platform/keybinding/common/abstractKeybindingService.ts
+7
-8
src/vs/platform/keybinding/common/keybinding.ts
src/vs/platform/keybinding/common/keybinding.ts
+3
-3
src/vs/platform/keybinding/test/common/abstractKeybindingService.test.ts
.../keybinding/test/common/abstractKeybindingService.test.ts
+14
-14
src/vs/platform/keybinding/test/common/mockKeybindingService.ts
.../platform/keybinding/test/common/mockKeybindingService.ts
+4
-4
src/vs/workbench/parts/extensions/browser/extensionEditor.ts
src/vs/workbench/parts/extensions/browser/extensionEditor.ts
+2
-2
src/vs/workbench/parts/preferences/browser/keybindingWidgets.ts
.../workbench/parts/preferences/browser/keybindingWidgets.ts
+8
-8
src/vs/workbench/parts/preferences/browser/keybindingsEditorContribution.ts
...arts/preferences/browser/keybindingsEditorContribution.ts
+3
-5
src/vs/workbench/parts/search/browser/searchActions.ts
src/vs/workbench/parts/search/browser/searchActions.ts
+3
-2
src/vs/workbench/parts/search/test/browser/searchActions.test.ts
...workbench/parts/search/test/browser/searchActions.test.ts
+2
-1
src/vs/workbench/parts/terminal/electron-browser/terminalInstance.ts
...bench/parts/terminal/electron-browser/terminalInstance.ts
+1
-1
src/vs/workbench/parts/update/electron-browser/update.ts
src/vs/workbench/parts/update/electron-browser/update.ts
+2
-2
src/vs/workbench/services/keybinding/common/keyboardMapper.ts
...vs/workbench/services/keybinding/common/keyboardMapper.ts
+16
-27
src/vs/workbench/services/keybinding/electron-browser/keybindingService.ts
...services/keybinding/electron-browser/keybindingService.ts
+1
-1
src/vs/workbench/services/keybinding/test/keyboardMapper.test.ts
...workbench/services/keybinding/test/keyboardMapper.test.ts
+11
-9
未找到文件。
build/monaco/monaco.d.ts.recipe
浏览文件 @
a3dba6ed
...
...
@@ -40,7 +40,6 @@ declare module monaco {
#include(vs/base/common/cancellation): CancellationTokenSource, CancellationToken
#include(vs/base/common/uri): URI
#include(vs/editor/common/standalone/standaloneBase): KeyCode, KeyMod
#include(vs/base/common/keyCodes): SimpleKeybinding
#include(vs/base/common/htmlContent): MarkedString
#include(vs/base/browser/keyboardEvent): IKeyboardEvent
#include(vs/base/browser/mouseEvent): IMouseEvent
...
...
src/vs/base/browser/keyboardEvent.ts
浏览文件 @
a3dba6ed
...
...
@@ -5,7 +5,7 @@
'
use strict
'
;
import
{
SimpleKeybinding
,
KeyCode
,
KeyCodeUtils
,
KeyMod
}
from
'
vs/base/common/keyCodes
'
;
import
{
KeyCode
,
KeyCodeUtils
,
KeyMod
,
SimpleRuntimeKeybinding
}
from
'
vs/base/common/keyCodes
'
;
import
*
as
platform
from
'
vs/base/common/platform
'
;
import
*
as
browser
from
'
vs/base/browser/browser
'
;
...
...
@@ -175,7 +175,10 @@ export interface IKeyboardEvent {
readonly
metaKey
:
boolean
;
readonly
keyCode
:
KeyCode
;
toKeybinding
():
SimpleKeybinding
;
/**
* @internal
*/
toRuntimeKeybinding
():
SimpleRuntimeKeybinding
;
equals
(
keybinding
:
number
):
boolean
;
preventDefault
():
void
;
...
...
@@ -198,7 +201,8 @@ export class StandardKeyboardEvent implements IKeyboardEvent {
public
readonly
metaKey
:
boolean
;
public
readonly
keyCode
:
KeyCode
;
private
_asKeybinding
:
SimpleKeybinding
;
private
_asKeybinding
:
number
;
private
_asRuntimeKeybinding
:
SimpleRuntimeKeybinding
;
constructor
(
source
:
KeyboardEvent
)
{
let
e
=
<
KeyboardEvent
>
source
;
...
...
@@ -220,6 +224,7 @@ export class StandardKeyboardEvent implements IKeyboardEvent {
this
.
metaKey
=
this
.
metaKey
||
this
.
keyCode
===
KeyCode
.
Meta
;
this
.
_asKeybinding
=
this
.
_computeKeybinding
();
this
.
_asRuntimeKeybinding
=
this
.
_computeRuntimeKeybinding
();
// console.log(`code: ${e.code}, keyCode: ${e.keyCode}, key: ${e.key}`);
}
...
...
@@ -236,15 +241,15 @@ export class StandardKeyboardEvent implements IKeyboardEvent {
}
}
public
to
Keybinding
():
Simpl
eKeybinding
{
return
this
.
_asKeybinding
;
public
to
RuntimeKeybinding
():
SimpleRuntim
eKeybinding
{
return
this
.
_as
Runtime
Keybinding
;
}
public
equals
(
other
:
number
):
boolean
{
return
this
.
_asKeybinding
.
value
===
other
;
return
this
.
_asKeybinding
===
other
;
}
private
_computeKeybinding
():
SimpleKeybinding
{
private
_computeKeybinding
():
number
{
let
key
=
KeyCode
.
Unknown
;
if
(
this
.
keyCode
!==
KeyCode
.
Ctrl
&&
this
.
keyCode
!==
KeyCode
.
Shift
&&
this
.
keyCode
!==
KeyCode
.
Alt
&&
this
.
keyCode
!==
KeyCode
.
Meta
)
{
key
=
this
.
keyCode
;
...
...
@@ -265,6 +270,14 @@ export class StandardKeyboardEvent implements IKeyboardEvent {
}
result
|=
key
;
return
new
SimpleKeybinding
(
result
);
return
result
;
}
private
_computeRuntimeKeybinding
():
SimpleRuntimeKeybinding
{
let
key
=
KeyCode
.
Unknown
;
if
(
this
.
keyCode
!==
KeyCode
.
Ctrl
&&
this
.
keyCode
!==
KeyCode
.
Shift
&&
this
.
keyCode
!==
KeyCode
.
Alt
&&
this
.
keyCode
!==
KeyCode
.
Meta
)
{
key
=
this
.
keyCode
;
}
return
new
SimpleRuntimeKeybinding
(
this
.
ctrlKey
,
this
.
shiftKey
,
this
.
altKey
,
this
.
metaKey
,
key
);
}
}
src/vs/base/common/keyCodes.ts
浏览文件 @
a3dba6ed
...
...
@@ -489,109 +489,6 @@ class BinaryKeybindings {
}
}
export
function
createKeybinding
(
keybinding
:
number
):
Keybinding
{
if
(
BinaryKeybindings
.
hasChord
(
keybinding
))
{
return
new
ChordKeybinding
(
keybinding
);
}
return
new
SimpleKeybinding
(
keybinding
);
}
export
class
SimpleKeybinding
{
public
readonly
value
:
number
;
constructor
(
keybinding
:
number
)
{
this
.
value
=
keybinding
;
}
/**
* @internal
*/
public
isChord
():
this
is
ChordKeybinding
{
return
false
;
}
/**
* @internal
*/
public
equals
(
other
:
Keybinding
):
boolean
{
return
(
other
&&
this
.
value
===
other
.
value
);
}
public
hasCtrlCmd
():
boolean
{
return
BinaryKeybindings
.
hasCtrlCmd
(
this
.
value
);
}
public
hasShift
():
boolean
{
return
BinaryKeybindings
.
hasShift
(
this
.
value
);
}
public
hasAlt
():
boolean
{
return
BinaryKeybindings
.
hasAlt
(
this
.
value
);
}
public
hasWinCtrl
():
boolean
{
return
BinaryKeybindings
.
hasWinCtrl
(
this
.
value
);
}
public
isModifierKey
():
boolean
{
return
BinaryKeybindings
.
isModifierKey
(
this
.
value
);
}
public
getKeyCode
():
KeyCode
{
return
BinaryKeybindings
.
extractKeyCode
(
this
.
value
);
}
}
export
class
ChordKeybinding
{
public
readonly
value
:
number
;
constructor
(
keybinding
:
number
)
{
this
.
value
=
keybinding
;
}
public
isChord
():
this
is
ChordKeybinding
{
return
true
;
}
public
equals
(
other
:
Keybinding
):
boolean
{
return
(
other
&&
this
.
value
===
other
.
value
);
}
public
extractFirstPart
():
SimpleKeybinding
{
return
new
SimpleKeybinding
(
BinaryKeybindings
.
extractFirstPart
(
this
.
value
));
}
public
extractChordPart
():
SimpleKeybinding
{
return
new
SimpleKeybinding
(
BinaryKeybindings
.
extractChordPart
(
this
.
value
));
}
}
export
type
Keybinding
=
SimpleKeybinding
|
ChordKeybinding
;
export
function
_createRuntimeKeybinding
(
keybinding
:
Keybinding
,
OS
:
OperatingSystem
):
RuntimeKeybinding
{
if
(
keybinding
.
isChord
())
{
return
new
ChordRuntimeKeybinding
(
_createSimpleRuntimeKeybinding
(
keybinding
.
extractFirstPart
(),
OS
),
_createSimpleRuntimeKeybinding
(
keybinding
.
extractChordPart
(),
OS
),
);
}
return
_createSimpleRuntimeKeybinding
(
keybinding
,
OS
);
}
function
_createSimpleRuntimeKeybinding
(
keybinding
:
SimpleKeybinding
,
OS
:
OperatingSystem
):
SimpleRuntimeKeybinding
{
const
ctrlCmd
=
keybinding
.
hasCtrlCmd
();
const
winCtrl
=
keybinding
.
hasWinCtrl
();
const
ctrlKey
=
(
OS
===
OperatingSystem
.
Macintosh
?
winCtrl
:
ctrlCmd
);
const
metaKey
=
(
OS
===
OperatingSystem
.
Macintosh
?
ctrlCmd
:
winCtrl
);
const
shiftKey
=
keybinding
.
hasShift
();
const
altKey
=
keybinding
.
hasAlt
();
const
keyCode
=
keybinding
.
getKeyCode
();
return
new
SimpleRuntimeKeybinding
(
ctrlKey
,
shiftKey
,
altKey
,
metaKey
,
keyCode
);
}
export
function
createRuntimeKeybinding
(
keybinding
:
number
,
OS
:
OperatingSystem
):
RuntimeKeybinding
{
if
(
keybinding
===
0
)
{
return
null
;
...
...
@@ -605,7 +502,7 @@ export function createRuntimeKeybinding(keybinding: number, OS: OperatingSystem)
return
createSimpleRuntimeKeybinding
(
keybinding
,
OS
);
}
function
createSimpleRuntimeKeybinding
(
keybinding
:
number
,
OS
:
OperatingSystem
):
SimpleRuntimeKeybinding
{
export
function
createSimpleRuntimeKeybinding
(
keybinding
:
number
,
OS
:
OperatingSystem
):
SimpleRuntimeKeybinding
{
const
ctrlCmd
=
BinaryKeybindings
.
hasCtrlCmd
(
keybinding
);
const
winCtrl
=
BinaryKeybindings
.
hasWinCtrl
(
keybinding
);
...
...
@@ -641,6 +538,29 @@ export class SimpleRuntimeKeybinding {
this
.
metaKey
=
metaKey
;
this
.
keyCode
=
keyCode
;
}
public
equals
(
other
:
RuntimeKeybinding
):
boolean
{
if
(
other
.
type
!==
RuntimeKeybindingType
.
Simple
)
{
return
false
;
}
return
(
this
.
ctrlKey
===
other
.
ctrlKey
&&
this
.
shiftKey
===
other
.
shiftKey
&&
this
.
altKey
===
other
.
altKey
&&
this
.
metaKey
===
other
.
metaKey
&&
this
.
keyCode
===
other
.
keyCode
);
}
public
isModifierKey
():
boolean
{
return
(
this
.
keyCode
===
KeyCode
.
Unknown
||
this
.
keyCode
===
KeyCode
.
Ctrl
||
this
.
keyCode
===
KeyCode
.
Meta
||
this
.
keyCode
===
KeyCode
.
Alt
||
this
.
keyCode
===
KeyCode
.
Shift
);
}
}
export
class
ChordRuntimeKeybinding
{
...
...
src/vs/base/parts/tree/browser/treeDefaults.ts
浏览文件 @
a3dba6ed
...
...
@@ -14,7 +14,7 @@ import dom = require('vs/base/browser/dom');
import
mouse
=
require
(
'
vs/base/browser/mouseEvent
'
);
import
{
IKeyboardEvent
}
from
'
vs/base/browser/keyboardEvent
'
;
import
_
=
require
(
'
vs/base/parts/tree/browser/tree
'
);
import
{
Key
binding
,
KeyCode
,
KeyMod
}
from
'
vs/base/common/keyCodes
'
;
import
{
Key
Code
,
KeyMod
,
RuntimeKeybinding
,
createRuntimeKeybinding
,
SimpleRuntimeKeybinding
}
from
'
vs/base/common/keyCodes
'
;
export
interface
ILegacyTemplateData
{
root
:
HTMLElement
;
...
...
@@ -97,7 +97,7 @@ export interface IControllerOptions {
}
interface
IKeybindingDispatcherItem
{
keybinding
:
number
;
keybinding
:
RuntimeKeybinding
;
callback
:
IKeyBindingCallback
;
}
...
...
@@ -111,16 +111,16 @@ export class KeybindingDispatcher {
public
set
(
keybinding
:
number
,
callback
:
IKeyBindingCallback
)
{
this
.
_arr
.
push
({
keybinding
:
keybinding
,
keybinding
:
createRuntimeKeybinding
(
keybinding
,
platform
.
OS
)
,
callback
:
callback
});
}
public
dispatch
(
keybinding
:
Keybinding
):
IKeyBindingCallback
{
public
dispatch
(
keybinding
:
SimpleRuntime
Keybinding
):
IKeyBindingCallback
{
// Loop from the last to the first to handle overwrites
for
(
let
i
=
this
.
_arr
.
length
-
1
;
i
>=
0
;
i
--
)
{
let
item
=
this
.
_arr
[
i
];
if
(
keybinding
.
value
===
item
.
keybinding
)
{
if
(
keybinding
.
equals
(
item
.
keybinding
)
)
{
return
item
.
callback
;
}
}
...
...
@@ -264,7 +264,7 @@ export class DefaultController implements _.IController {
}
private
onKey
(
bindings
:
KeybindingDispatcher
,
tree
:
_
.
ITree
,
event
:
IKeyboardEvent
):
boolean
{
var
handler
=
bindings
.
dispatch
(
event
.
toKeybinding
());
var
handler
=
bindings
.
dispatch
(
event
.
to
Runtime
Keybinding
());
if
(
handler
)
{
if
(
handler
(
tree
,
event
))
{
event
.
preventDefault
();
...
...
src/vs/base/test/common/keyCodes.test.ts
浏览文件 @
a3dba6ed
...
...
@@ -5,74 +5,96 @@
'
use strict
'
;
import
*
as
assert
from
'
assert
'
;
import
{
KeyCode
,
KeyMod
,
KeyChord
,
createKeybinding
,
SimpleKeybinding
}
from
'
vs/base/common/keyCodes
'
;
import
{
KeyCode
,
KeyMod
,
KeyChord
,
RuntimeKeybinding
,
createRuntimeKeybinding
,
SimpleRuntimeKeybinding
,
ChordRuntimeKeybinding
}
from
'
vs/base/common/keyCodes
'
;
import
{
OperatingSystem
}
from
'
vs/base/common/platform
'
;
interface
ITestKeybinding
{
ctrlCmd
:
boolean
;
shift
:
boolean
;
alt
:
boolean
;
winCtrl
:
boolean
;
key
:
KeyCode
;
chord
?:
ITestKeybinding
;
}
function
decodeSimpleKeybinding
(
kb
:
SimpleKeybinding
):
ITestKeybinding
{
return
{
ctrlCmd
:
kb
.
hasCtrlCmd
(),
shift
:
kb
.
hasShift
(),
alt
:
kb
.
hasAlt
(),
winCtrl
:
kb
.
hasWinCtrl
(),
key
:
kb
.
getKeyCode
()
};
}
suite
(
'
keyCodes
'
,
()
=>
{
function
decodeBinaryKeybinding
(
k
:
number
):
ITestKeybinding
{
let
kb
=
createKeybinding
(
k
);
if
(
kb
.
isChord
())
{
let
result
=
decodeSimpleKeybinding
(
kb
.
extractFirstPart
());
result
.
chord
=
decodeSimpleKeybinding
(
kb
.
extractChordPart
());
return
result
;
function
testBinaryEncoding
(
expected
:
RuntimeKeybinding
,
k
:
number
,
OS
:
OperatingSystem
):
void
{
assert
.
deepEqual
(
createRuntimeKeybinding
(
k
,
OS
),
expected
);
}
return
decodeSimpleKeybinding
(
kb
);
}
suite
(
'
keyCodes
'
,
()
=>
{
test
(
'
binary encoding
'
,
()
=>
{
function
test
(
keybinding
:
ITestKeybinding
,
k
:
number
):
void
{
keybinding
=
keybinding
||
{
ctrlCmd
:
false
,
shift
:
false
,
alt
:
false
,
winCtrl
:
false
,
key
:
KeyCode
.
Unknown
};
test
(
'
MAC binary encoding
'
,
()
=>
{
assert
.
deepEqual
(
decodeBinaryKeybinding
(
k
),
keybinding
);
function
test
(
expected
:
RuntimeKeybinding
,
k
:
number
):
void
{
testBinaryEncoding
(
expected
,
k
,
OperatingSystem
.
Macintosh
);
}
test
(
null
,
0
);
test
({
ctrlCmd
:
false
,
shift
:
false
,
alt
:
false
,
winCtrl
:
false
,
key
:
KeyCode
.
Enter
},
KeyCode
.
Enter
);
test
({
ctrlCmd
:
false
,
shift
:
false
,
alt
:
false
,
winCtrl
:
false
,
key
:
KeyCode
.
Enter
,
chord
:
{
ctrlCmd
:
false
,
shift
:
false
,
alt
:
false
,
winCtrl
:
false
,
key
:
KeyCode
.
Tab
}
},
KeyChord
(
KeyCode
.
Enter
,
KeyCode
.
Tab
));
test
({
ctrlCmd
:
false
,
shift
:
false
,
alt
:
false
,
winCtrl
:
false
,
key
:
KeyCode
.
Enter
},
KeyCode
.
Enter
);
test
({
ctrlCmd
:
false
,
shift
:
false
,
alt
:
false
,
winCtrl
:
true
,
key
:
KeyCode
.
Enter
},
KeyMod
.
WinCtrl
|
KeyCode
.
Enter
);
test
({
ctrlCmd
:
false
,
shift
:
false
,
alt
:
true
,
winCtrl
:
false
,
key
:
KeyCode
.
Enter
},
KeyMod
.
Alt
|
KeyCode
.
Enter
);
test
({
ctrlCmd
:
false
,
shift
:
false
,
alt
:
true
,
winCtrl
:
true
,
key
:
KeyCode
.
Enter
},
KeyMod
.
Alt
|
KeyMod
.
WinCtrl
|
KeyCode
.
Enter
);
test
({
ctrlCmd
:
false
,
shift
:
true
,
alt
:
false
,
winCtrl
:
false
,
key
:
KeyCode
.
Enter
},
KeyMod
.
Shift
|
KeyCode
.
Enter
);
test
({
ctrlCmd
:
false
,
shift
:
true
,
alt
:
false
,
winCtrl
:
true
,
key
:
KeyCode
.
Enter
},
KeyMod
.
Shift
|
KeyMod
.
WinCtrl
|
KeyCode
.
Enter
);
test
({
ctrlCmd
:
false
,
shift
:
true
,
alt
:
true
,
winCtrl
:
false
,
key
:
KeyCode
.
Enter
},
KeyMod
.
Shift
|
KeyMod
.
Alt
|
KeyCode
.
Enter
);
test
({
ctrlCmd
:
false
,
shift
:
true
,
alt
:
true
,
winCtrl
:
true
,
key
:
KeyCode
.
Enter
},
KeyMod
.
Shift
|
KeyMod
.
Alt
|
KeyMod
.
WinCtrl
|
KeyCode
.
Enter
);
test
({
ctrlCmd
:
true
,
shift
:
false
,
alt
:
false
,
winCtrl
:
false
,
key
:
KeyCode
.
Enter
},
KeyMod
.
CtrlCmd
|
KeyCode
.
Enter
);
test
({
ctrlCmd
:
true
,
shift
:
false
,
alt
:
false
,
winCtrl
:
true
,
key
:
KeyCode
.
Enter
},
KeyMod
.
CtrlCmd
|
KeyMod
.
WinCtrl
|
KeyCode
.
Enter
);
test
({
ctrlCmd
:
true
,
shift
:
false
,
alt
:
true
,
winCtrl
:
false
,
key
:
KeyCode
.
Enter
},
KeyMod
.
CtrlCmd
|
KeyMod
.
Alt
|
KeyCode
.
Enter
);
test
({
ctrlCmd
:
true
,
shift
:
false
,
alt
:
true
,
winCtrl
:
true
,
key
:
KeyCode
.
Enter
},
KeyMod
.
CtrlCmd
|
KeyMod
.
Alt
|
KeyMod
.
WinCtrl
|
KeyCode
.
Enter
);
test
({
ctrlCmd
:
true
,
shift
:
true
,
alt
:
false
,
winCtrl
:
false
,
key
:
KeyCode
.
Enter
},
KeyMod
.
CtrlCmd
|
KeyMod
.
Shift
|
KeyCode
.
Enter
);
test
({
ctrlCmd
:
true
,
shift
:
true
,
alt
:
false
,
winCtrl
:
true
,
key
:
KeyCode
.
Enter
},
KeyMod
.
CtrlCmd
|
KeyMod
.
Shift
|
KeyMod
.
WinCtrl
|
KeyCode
.
Enter
);
test
({
ctrlCmd
:
true
,
shift
:
true
,
alt
:
true
,
winCtrl
:
false
,
key
:
KeyCode
.
Enter
},
KeyMod
.
CtrlCmd
|
KeyMod
.
Shift
|
KeyMod
.
Alt
|
KeyCode
.
Enter
);
test
({
ctrlCmd
:
true
,
shift
:
true
,
alt
:
true
,
winCtrl
:
true
,
key
:
KeyCode
.
Enter
},
KeyMod
.
CtrlCmd
|
KeyMod
.
Shift
|
KeyMod
.
Alt
|
KeyMod
.
WinCtrl
|
KeyCode
.
Enter
);
test
(
new
SimpleRuntimeKeybinding
(
false
,
false
,
false
,
false
,
KeyCode
.
Enter
),
KeyCode
.
Enter
);
test
(
new
SimpleRuntimeKeybinding
(
true
,
false
,
false
,
false
,
KeyCode
.
Enter
),
KeyMod
.
WinCtrl
|
KeyCode
.
Enter
);
test
(
new
SimpleRuntimeKeybinding
(
false
,
false
,
true
,
false
,
KeyCode
.
Enter
),
KeyMod
.
Alt
|
KeyCode
.
Enter
);
test
(
new
SimpleRuntimeKeybinding
(
true
,
false
,
true
,
false
,
KeyCode
.
Enter
),
KeyMod
.
Alt
|
KeyMod
.
WinCtrl
|
KeyCode
.
Enter
);
test
(
new
SimpleRuntimeKeybinding
(
false
,
true
,
false
,
false
,
KeyCode
.
Enter
),
KeyMod
.
Shift
|
KeyCode
.
Enter
);
test
(
new
SimpleRuntimeKeybinding
(
true
,
true
,
false
,
false
,
KeyCode
.
Enter
),
KeyMod
.
Shift
|
KeyMod
.
WinCtrl
|
KeyCode
.
Enter
);
test
(
new
SimpleRuntimeKeybinding
(
false
,
true
,
true
,
false
,
KeyCode
.
Enter
),
KeyMod
.
Shift
|
KeyMod
.
Alt
|
KeyCode
.
Enter
);
test
(
new
SimpleRuntimeKeybinding
(
true
,
true
,
true
,
false
,
KeyCode
.
Enter
),
KeyMod
.
Shift
|
KeyMod
.
Alt
|
KeyMod
.
WinCtrl
|
KeyCode
.
Enter
);
test
(
new
SimpleRuntimeKeybinding
(
false
,
false
,
false
,
true
,
KeyCode
.
Enter
),
KeyMod
.
CtrlCmd
|
KeyCode
.
Enter
);
test
(
new
SimpleRuntimeKeybinding
(
true
,
false
,
false
,
true
,
KeyCode
.
Enter
),
KeyMod
.
CtrlCmd
|
KeyMod
.
WinCtrl
|
KeyCode
.
Enter
);
test
(
new
SimpleRuntimeKeybinding
(
false
,
false
,
true
,
true
,
KeyCode
.
Enter
),
KeyMod
.
CtrlCmd
|
KeyMod
.
Alt
|
KeyCode
.
Enter
);
test
(
new
SimpleRuntimeKeybinding
(
true
,
false
,
true
,
true
,
KeyCode
.
Enter
),
KeyMod
.
CtrlCmd
|
KeyMod
.
Alt
|
KeyMod
.
WinCtrl
|
KeyCode
.
Enter
);
test
(
new
SimpleRuntimeKeybinding
(
false
,
true
,
false
,
true
,
KeyCode
.
Enter
),
KeyMod
.
CtrlCmd
|
KeyMod
.
Shift
|
KeyCode
.
Enter
);
test
(
new
SimpleRuntimeKeybinding
(
true
,
true
,
false
,
true
,
KeyCode
.
Enter
),
KeyMod
.
CtrlCmd
|
KeyMod
.
Shift
|
KeyMod
.
WinCtrl
|
KeyCode
.
Enter
);
test
(
new
SimpleRuntimeKeybinding
(
false
,
true
,
true
,
true
,
KeyCode
.
Enter
),
KeyMod
.
CtrlCmd
|
KeyMod
.
Shift
|
KeyMod
.
Alt
|
KeyCode
.
Enter
);
test
(
new
SimpleRuntimeKeybinding
(
true
,
true
,
true
,
true
,
KeyCode
.
Enter
),
KeyMod
.
CtrlCmd
|
KeyMod
.
Shift
|
KeyMod
.
Alt
|
KeyMod
.
WinCtrl
|
KeyCode
.
Enter
);
let
encoded
=
KeyChord
(
KeyMod
.
CtrlCmd
|
KeyCode
.
KEY_Y
,
KeyCode
.
KEY_Z
);
let
kb
=
createKeybinding
(
encoded
);
test
(
new
ChordRuntimeKeybinding
(
new
SimpleRuntimeKeybinding
(
false
,
false
,
false
,
false
,
KeyCode
.
Enter
),
new
SimpleRuntimeKeybinding
(
false
,
false
,
false
,
false
,
KeyCode
.
Tab
)
),
KeyChord
(
KeyCode
.
Enter
,
KeyCode
.
Tab
)
);
test
(
new
ChordRuntimeKeybinding
(
new
SimpleRuntimeKeybinding
(
false
,
false
,
false
,
true
,
KeyCode
.
KEY_Y
),
new
SimpleRuntimeKeybinding
(
false
,
false
,
false
,
false
,
KeyCode
.
KEY_Z
)
),
KeyChord
(
KeyMod
.
CtrlCmd
|
KeyCode
.
KEY_Y
,
KeyCode
.
KEY_Z
)
);
});
assert
.
equal
(
kb
.
isChord
(),
true
,
'
isCord
'
);
if
(
kb
.
isChord
())
{
let
firstPart
=
kb
.
extractFirstPart
();
let
chordPart
=
kb
.
extractChordPart
();
assert
.
equal
(
firstPart
.
value
,
KeyMod
.
CtrlCmd
|
KeyCode
.
KEY_Y
,
'
first part
'
);
assert
.
equal
(
chordPart
.
value
,
KeyCode
.
KEY_Z
,
'
chord part
'
);
}
test
(
'
WINDOWS & LINUX binary encoding
'
,
()
=>
{
[
OperatingSystem
.
Linux
,
OperatingSystem
.
Windows
].
forEach
((
OS
)
=>
{
function
test
(
expected
:
RuntimeKeybinding
,
k
:
number
):
void
{
testBinaryEncoding
(
expected
,
k
,
OS
);
}
test
(
null
,
0
);
test
(
new
SimpleRuntimeKeybinding
(
false
,
false
,
false
,
false
,
KeyCode
.
Enter
),
KeyCode
.
Enter
);
test
(
new
SimpleRuntimeKeybinding
(
false
,
false
,
false
,
true
,
KeyCode
.
Enter
),
KeyMod
.
WinCtrl
|
KeyCode
.
Enter
);
test
(
new
SimpleRuntimeKeybinding
(
false
,
false
,
true
,
false
,
KeyCode
.
Enter
),
KeyMod
.
Alt
|
KeyCode
.
Enter
);
test
(
new
SimpleRuntimeKeybinding
(
false
,
false
,
true
,
true
,
KeyCode
.
Enter
),
KeyMod
.
Alt
|
KeyMod
.
WinCtrl
|
KeyCode
.
Enter
);
test
(
new
SimpleRuntimeKeybinding
(
false
,
true
,
false
,
false
,
KeyCode
.
Enter
),
KeyMod
.
Shift
|
KeyCode
.
Enter
);
test
(
new
SimpleRuntimeKeybinding
(
false
,
true
,
false
,
true
,
KeyCode
.
Enter
),
KeyMod
.
Shift
|
KeyMod
.
WinCtrl
|
KeyCode
.
Enter
);
test
(
new
SimpleRuntimeKeybinding
(
false
,
true
,
true
,
false
,
KeyCode
.
Enter
),
KeyMod
.
Shift
|
KeyMod
.
Alt
|
KeyCode
.
Enter
);
test
(
new
SimpleRuntimeKeybinding
(
false
,
true
,
true
,
true
,
KeyCode
.
Enter
),
KeyMod
.
Shift
|
KeyMod
.
Alt
|
KeyMod
.
WinCtrl
|
KeyCode
.
Enter
);
test
(
new
SimpleRuntimeKeybinding
(
true
,
false
,
false
,
false
,
KeyCode
.
Enter
),
KeyMod
.
CtrlCmd
|
KeyCode
.
Enter
);
test
(
new
SimpleRuntimeKeybinding
(
true
,
false
,
false
,
true
,
KeyCode
.
Enter
),
KeyMod
.
CtrlCmd
|
KeyMod
.
WinCtrl
|
KeyCode
.
Enter
);
test
(
new
SimpleRuntimeKeybinding
(
true
,
false
,
true
,
false
,
KeyCode
.
Enter
),
KeyMod
.
CtrlCmd
|
KeyMod
.
Alt
|
KeyCode
.
Enter
);
test
(
new
SimpleRuntimeKeybinding
(
true
,
false
,
true
,
true
,
KeyCode
.
Enter
),
KeyMod
.
CtrlCmd
|
KeyMod
.
Alt
|
KeyMod
.
WinCtrl
|
KeyCode
.
Enter
);
test
(
new
SimpleRuntimeKeybinding
(
true
,
true
,
false
,
false
,
KeyCode
.
Enter
),
KeyMod
.
CtrlCmd
|
KeyMod
.
Shift
|
KeyCode
.
Enter
);
test
(
new
SimpleRuntimeKeybinding
(
true
,
true
,
false
,
true
,
KeyCode
.
Enter
),
KeyMod
.
CtrlCmd
|
KeyMod
.
Shift
|
KeyMod
.
WinCtrl
|
KeyCode
.
Enter
);
test
(
new
SimpleRuntimeKeybinding
(
true
,
true
,
true
,
false
,
KeyCode
.
Enter
),
KeyMod
.
CtrlCmd
|
KeyMod
.
Shift
|
KeyMod
.
Alt
|
KeyCode
.
Enter
);
test
(
new
SimpleRuntimeKeybinding
(
true
,
true
,
true
,
true
,
KeyCode
.
Enter
),
KeyMod
.
CtrlCmd
|
KeyMod
.
Shift
|
KeyMod
.
Alt
|
KeyMod
.
WinCtrl
|
KeyCode
.
Enter
);
test
(
new
ChordRuntimeKeybinding
(
new
SimpleRuntimeKeybinding
(
false
,
false
,
false
,
false
,
KeyCode
.
Enter
),
new
SimpleRuntimeKeybinding
(
false
,
false
,
false
,
false
,
KeyCode
.
Tab
)
),
KeyChord
(
KeyCode
.
Enter
,
KeyCode
.
Tab
)
);
test
(
new
ChordRuntimeKeybinding
(
new
SimpleRuntimeKeybinding
(
true
,
false
,
false
,
false
,
KeyCode
.
KEY_Y
),
new
SimpleRuntimeKeybinding
(
false
,
false
,
false
,
false
,
KeyCode
.
KEY_Z
)
),
KeyChord
(
KeyMod
.
CtrlCmd
|
KeyCode
.
KEY_Y
,
KeyCode
.
KEY_Z
)
);
});
});
});
src/vs/editor/browser/standalone/simpleServices.ts
浏览文件 @
a3dba6ed
...
...
@@ -323,7 +323,7 @@ export class StandaloneKeybindingService extends AbstractKeybindingService {
this
.
toDispose
.
push
(
dom
.
addDisposableListener
(
domNode
,
dom
.
EventType
.
KEY_DOWN
,
(
e
:
KeyboardEvent
)
=>
{
let
keyEvent
=
new
StandardKeyboardEvent
(
e
);
let
shouldPreventDefault
=
this
.
_dispatch
(
keyEvent
.
toKeybinding
(),
keyEvent
.
target
);
let
shouldPreventDefault
=
this
.
_dispatch
(
keyEvent
.
to
Runtime
Keybinding
(),
keyEvent
.
target
);
if
(
shouldPreventDefault
)
{
keyEvent
.
preventDefault
();
}
...
...
src/vs/editor/common/standalone/standaloneBase.ts
浏览文件 @
a3dba6ed
...
...
@@ -5,7 +5,7 @@
'
use strict
'
;
import
{
Emitter
}
from
'
vs/base/common/event
'
;
import
{
SimpleKeybinding
,
KeyMod
as
ConstKeyMod
,
KeyChord
}
from
'
vs/base/common/keyCodes
'
;
import
{
KeyMod
as
ConstKeyMod
,
KeyChord
}
from
'
vs/base/common/keyCodes
'
;
import
{
Position
}
from
'
vs/editor/common/core/position
'
;
import
{
Range
}
from
'
vs/editor/common/core/range
'
;
import
{
Selection
,
SelectionDirection
}
from
'
vs/editor/common/core/selection
'
;
...
...
@@ -224,7 +224,6 @@ export function createMonacoBaseAPI(): typeof monaco {
Emitter
:
Emitter
,
KeyCode
:
KeyCode
,
KeyMod
:
KeyMod
,
SimpleKeybinding
:
<
any
>
SimpleKeybinding
,
Position
:
Position
,
Range
:
Range
,
Selection
:
Selection
,
...
...
src/vs/editor/contrib/find/browser/findWidget.ts
浏览文件 @
a3dba6ed
...
...
@@ -364,60 +364,65 @@ export class FindWidget extends Widget implements IOverlayWidget {
private
_onFindInputKeyDown
(
e
:
IKeyboardEvent
):
void
{
switch
(
e
.
toKeybinding
().
value
)
{
case
KeyCode
.
Enter
:
this
.
_codeEditor
.
getAction
(
FIND_IDS
.
NextMatchFindAction
).
run
().
done
(
null
,
onUnexpectedError
);
e
.
preventDefault
()
;
return
;
if
(
e
.
equals
(
KeyCode
.
Enter
)
)
{
this
.
_codeEditor
.
getAction
(
FIND_IDS
.
NextMatchFindAction
).
run
().
done
(
null
,
onUnexpectedError
);
e
.
preventDefault
(
);
return
;
}
case
KeyMod
.
Shift
|
KeyCode
.
Enter
:
this
.
_codeEditor
.
getAction
(
FIND_IDS
.
PreviousMatchFindAction
).
run
().
done
(
null
,
onUnexpectedError
);
e
.
preventDefault
();
return
;
if
(
e
.
equals
(
KeyMod
.
Shift
|
KeyCode
.
Enter
))
{
this
.
_codeEditor
.
getAction
(
FIND_IDS
.
PreviousMatchFindAction
).
run
().
done
(
null
,
onUnexpectedError
);
e
.
preventDefault
();
return
;
}
case
KeyCode
.
Tab
:
if
(
this
.
_isReplaceVisible
)
{
this
.
_replaceInputBox
.
focus
();
}
else
{
this
.
_findInput
.
focusOnCaseSensitive
();
}
e
.
preventDefault
();
return
;
if
(
e
.
equals
(
KeyCode
.
Tab
))
{
if
(
this
.
_isReplaceVisible
)
{
this
.
_replaceInputBox
.
focus
();
}
else
{
this
.
_findInput
.
focusOnCaseSensitive
();
}
e
.
preventDefault
();
return
;
}
case
KeyMod
.
CtrlCmd
|
KeyCode
.
DownArrow
:
this
.
_codeEditor
.
focus
();
e
.
preventDefault
();
return
;
if
(
e
.
equals
(
KeyMod
.
CtrlCmd
|
KeyCode
.
DownArrow
))
{
this
.
_codeEditor
.
focus
();
e
.
preventDefault
();
return
;
}
}
private
_onReplaceInputKeyDown
(
e
:
IKeyboardEvent
):
void
{
switch
(
e
.
toKeybinding
().
value
)
{
case
KeyCode
.
Enter
:
this
.
_controller
.
replace
();
e
.
preventDefault
()
;
return
;
if
(
e
.
equals
(
KeyCode
.
Enter
)
)
{
this
.
_controller
.
replace
();
e
.
preventDefault
();
return
;
}
case
KeyMod
.
CtrlCmd
|
KeyCode
.
Enter
:
this
.
_controller
.
replaceAll
();
e
.
preventDefault
();
return
;
if
(
e
.
equals
(
KeyMod
.
CtrlCmd
|
KeyCode
.
Enter
))
{
this
.
_controller
.
replaceAll
();
e
.
preventDefault
();
return
;
}
case
KeyCode
.
Tab
:
this
.
_findInput
.
focusOnCaseSensitive
();
e
.
preventDefault
();
return
;
if
(
e
.
equals
(
KeyCode
.
Tab
))
{
this
.
_findInput
.
focusOnCaseSensitive
();
e
.
preventDefault
();
return
;
}
case
KeyMod
.
Shift
|
KeyCode
.
Tab
:
this
.
_findInput
.
focus
();
e
.
preventDefault
();
return
;
if
(
e
.
equals
(
KeyMod
.
Shift
|
KeyCode
.
Tab
))
{
this
.
_findInput
.
focus
();
e
.
preventDefault
();
return
;
}
case
KeyMod
.
CtrlCmd
|
KeyCode
.
DownArrow
:
this
.
_codeEditor
.
focus
();
e
.
preventDefault
();
return
;
if
(
e
.
equals
(
KeyMod
.
CtrlCmd
|
KeyCode
.
DownArrow
))
{
this
.
_codeEditor
.
focus
();
e
.
preventDefault
();
return
;
}
}
...
...
src/vs/editor/test/browser/standalone/simpleServices.test.ts
浏览文件 @
a3dba6ed
...
...
@@ -9,14 +9,14 @@ import { ContextKeyService } from 'vs/platform/contextkey/browser/contextKeyServ
import
{
SimpleConfigurationService
,
SimpleMessageService
,
StandaloneKeybindingService
,
StandaloneCommandService
}
from
'
vs/editor/browser/standalone/simpleServices
'
;
import
{
InstantiationService
}
from
'
vs/platform/instantiation/common/instantiationService
'
;
import
{
ServiceCollection
}
from
'
vs/platform/instantiation/common/serviceCollection
'
;
import
{
SimpleKeybinding
,
KeyCode
}
from
'
vs/base/common/keyCodes
'
;
import
{
KeyCode
,
SimpleRuntimeKeybinding
}
from
'
vs/base/common/keyCodes
'
;
import
{
IKeyboardEvent
}
from
'
vs/base/browser/keyboardEvent
'
;
suite
(
'
StandaloneKeybindingService
'
,
()
=>
{
class
TestStandaloneKeybindingService
extends
StandaloneKeybindingService
{
public
dispatch
(
e
:
IKeyboardEvent
):
void
{
let
shouldPreventDefault
=
super
.
_dispatch
(
e
.
toKeybinding
(),
e
.
target
);
let
shouldPreventDefault
=
super
.
_dispatch
(
e
.
to
Runtime
Keybinding
(),
e
.
target
);
if
(
shouldPreventDefault
)
{
e
.
preventDefault
();
}
...
...
@@ -46,7 +46,7 @@ suite('StandaloneKeybindingService', () => {
},
null
);
keybindingService
.
dispatch
(
<
any
>
{
to
Keybinding
:
()
=>
new
SimpleKeybinding
(
KeyCode
.
F9
),
to
RuntimeKeybinding
:
()
=>
new
SimpleRuntimeKeybinding
(
false
,
false
,
false
,
false
,
KeyCode
.
F9
),
preventDefault
:
()
=>
{
}
});
...
...
src/vs/monaco.d.ts
浏览文件 @
a3dba6ed
...
...
@@ -362,17 +362,6 @@ declare module monaco {
static
readonly
WinCtrl
:
number
;
static
chord
(
firstPart
:
number
,
secondPart
:
number
):
number
;
}
export
class
SimpleKeybinding
{
readonly
value
:
number
;
constructor
(
keybinding
:
number
);
hasCtrlCmd
():
boolean
;
hasShift
():
boolean
;
hasAlt
():
boolean
;
hasWinCtrl
():
boolean
;
isModifierKey
():
boolean
;
getKeyCode
():
KeyCode
;
}
/**
* MarkedString can be used to render human readable text. It is either a markdown string
* or a code-block that provides a language and a code snippet. Note that
...
...
@@ -391,7 +380,6 @@ declare module monaco {
readonly
altKey
:
boolean
;
readonly
metaKey
:
boolean
;
readonly
keyCode
:
KeyCode
;
toKeybinding
():
SimpleKeybinding
;
equals
(
keybinding
:
number
):
boolean
;
preventDefault
():
void
;
stopPropagation
():
void
;
...
...
src/vs/platform/keybinding/common/abstractKeybindingService.ts
浏览文件 @
a3dba6ed
...
...
@@ -5,7 +5,7 @@
'
use strict
'
;
import
*
as
nls
from
'
vs/nls
'
;
import
{
ResolvedKeybinding
,
SimpleKeybinding
,
Keybinding
,
RuntimeKeybinding
,
_creat
eRuntimeKeybinding
}
from
'
vs/base/common/keyCodes
'
;
import
{
ResolvedKeybinding
,
RuntimeKeybinding
,
Simpl
eRuntimeKeybinding
}
from
'
vs/base/common/keyCodes
'
;
import
{
IDisposable
,
dispose
}
from
'
vs/base/common/lifecycle
'
;
import
Severity
from
'
vs/base/common/severity
'
;
import
{
ICommandService
}
from
'
vs/platform/commands/common/commands
'
;
...
...
@@ -15,7 +15,6 @@ import { IContextKeyService, IContextKeyServiceTarget } from 'vs/platform/contex
import
{
IStatusbarService
}
from
'
vs/platform/statusbar/common/statusbar
'
;
import
{
IMessageService
}
from
'
vs/platform/message/common/message
'
;
import
Event
,
{
Emitter
}
from
'
vs/base/common/event
'
;
import
{
OS
}
from
'
vs/base/common/platform
'
;
interface
CurrentChord
{
keypress
:
string
;
...
...
@@ -64,8 +63,8 @@ export abstract class AbstractKeybindingService implements IKeybindingService {
return
this
.
_onDidUpdateKeybindings
?
this
.
_onDidUpdateKeybindings
.
event
:
Event
.
None
;
// Sinon stubbing walks properties on prototype
}
public
resolveKeybinding
(
keybinding
:
Keybinding
):
ResolvedKeybinding
{
return
this
.
_createResolvedKeybinding
(
_createRuntimeKeybinding
(
keybinding
,
OS
)
);
public
resolveKeybinding
(
keybinding
:
Runtime
Keybinding
):
ResolvedKeybinding
{
return
this
.
_createResolvedKeybinding
(
keybinding
);
}
public
getDefaultKeybindings
():
string
{
...
...
@@ -97,20 +96,20 @@ export abstract class AbstractKeybindingService implements IKeybindingService {
return
result
.
resolvedKeybinding
;
}
public
resolve
(
keybinding
:
SimpleKeybinding
,
target
:
IContextKeyServiceTarget
):
IResolveResult
{
public
resolve
(
keybinding
:
Simple
Runtime
Keybinding
,
target
:
IContextKeyServiceTarget
):
IResolveResult
{
if
(
keybinding
.
isModifierKey
())
{
return
null
;
}
const
contextValue
=
this
.
_contextKeyService
.
getContextValue
(
target
);
const
currentChord
=
this
.
_currentChord
?
this
.
_currentChord
.
keypress
:
null
;
const
resolvedKeybinding
=
this
.
_createResolvedKeybinding
(
_createRuntimeKeybinding
(
keybinding
,
OS
)
);
const
resolvedKeybinding
=
this
.
_createResolvedKeybinding
(
keybinding
);
const
[
firstPart
,]
=
resolvedKeybinding
.
getDispatchParts
();
// We know for a fact the chordPart is null since we're using a single keypress
return
this
.
_getResolver
().
resolve
(
contextValue
,
currentChord
,
firstPart
);
}
protected
_dispatch
(
keybinding
:
SimpleKeybinding
,
target
:
IContextKeyServiceTarget
):
boolean
{
protected
_dispatch
(
keybinding
:
Simple
Runtime
Keybinding
,
target
:
IContextKeyServiceTarget
):
boolean
{
// Check modifier key here and cancel early, it's also checked in resolve as the function
// is used externally.
let
shouldPreventDefault
=
false
;
...
...
@@ -120,7 +119,7 @@ export abstract class AbstractKeybindingService implements IKeybindingService {
const
contextValue
=
this
.
_contextKeyService
.
getContextValue
(
target
);
const
currentChord
=
this
.
_currentChord
?
this
.
_currentChord
.
keypress
:
null
;
const
resolvedKeybinding
=
this
.
_createResolvedKeybinding
(
_createRuntimeKeybinding
(
keybinding
,
OS
)
);
const
resolvedKeybinding
=
this
.
_createResolvedKeybinding
(
keybinding
);
const
[
firstPart
,]
=
resolvedKeybinding
.
getDispatchParts
();
const
keypressLabel
=
resolvedKeybinding
.
getLabel
();
const
resolveResult
=
this
.
_getResolver
().
resolve
(
contextValue
,
currentChord
,
firstPart
);
...
...
src/vs/platform/keybinding/common/keybinding.ts
浏览文件 @
a3dba6ed
...
...
@@ -4,7 +4,7 @@
*--------------------------------------------------------------------------------------------*/
'
use strict
'
;
import
{
ResolvedKeybinding
,
SimpleKeybinding
,
Keybinding
,
RuntimeKeybinding
}
from
'
vs/base/common/keyCodes
'
;
import
{
ResolvedKeybinding
,
RuntimeKeybinding
,
Simple
RuntimeKeybinding
}
from
'
vs/base/common/keyCodes
'
;
import
{
createDecorator
}
from
'
vs/platform/instantiation/common/instantiation
'
;
import
{
ContextKeyExpr
,
IContextKeyServiceTarget
}
from
'
vs/platform/contextkey/common/contextkey
'
;
import
{
IResolveResult
}
from
'
vs/platform/keybinding/common/keybindingResolver
'
;
...
...
@@ -67,7 +67,7 @@ export interface IKeybindingService {
onDidUpdateKeybindings
:
Event
<
IKeybindingEvent
>
;
resolveKeybinding
(
keybinding
:
Keybinding
):
ResolvedKeybinding
;
resolveKeybinding
(
keybinding
:
Runtime
Keybinding
):
ResolvedKeybinding
;
getDefaultKeybindings
():
string
;
...
...
@@ -87,6 +87,6 @@ export interface IKeybindingService {
customKeybindingsCount
():
number
;
resolve
(
keybinding
:
SimpleKeybinding
,
target
:
IContextKeyServiceTarget
):
IResolveResult
;
resolve
(
keybinding
:
Simple
Runtime
Keybinding
,
target
:
IContextKeyServiceTarget
):
IResolveResult
;
}
src/vs/platform/keybinding/test/common/abstractKeybindingService.test.ts
浏览文件 @
a3dba6ed
...
...
@@ -5,7 +5,7 @@
'
use strict
'
;
import
*
as
assert
from
'
assert
'
;
import
{
ResolvedKeybinding
,
SimpleKeybinding
,
KeyCode
,
KeyMod
,
KeyChord
,
RuntimeKeybinding
,
creat
eRuntimeKeybinding
}
from
'
vs/base/common/keyCodes
'
;
import
{
ResolvedKeybinding
,
KeyCode
,
KeyMod
,
KeyChord
,
RuntimeKeybinding
,
createRuntimeKeybinding
,
createSimpl
eRuntimeKeybinding
}
from
'
vs/base/common/keyCodes
'
;
import
{
AbstractKeybindingService
}
from
'
vs/platform/keybinding/common/abstractKeybindingService
'
;
import
{
USLayoutResolvedKeybinding
}
from
'
vs/platform/keybinding/common/usLayoutResolvedKeybinding
'
;
import
{
IDisposable
}
from
'
vs/base/common/lifecycle
'
;
...
...
@@ -43,8 +43,8 @@ suite('AbstractKeybindingService', () => {
return
new
USLayoutResolvedKeybinding
(
kb
,
OS
);
}
public
dispatch
(
keybinding
:
SimpleKeybinding
):
boolean
{
return
this
.
_dispatch
(
keybinding
,
null
);
public
dispatch
(
keybinding
:
number
):
boolean
{
return
this
.
_dispatch
(
createSimpleRuntimeKeybinding
(
keybinding
,
OS
)
,
null
);
}
}
...
...
@@ -153,7 +153,7 @@ suite('AbstractKeybindingService', () => {
]);
// send Ctrl/Cmd + K
let
shouldPreventDefault
=
kbService
.
dispatch
(
new
SimpleKeybinding
(
KeyMod
.
CtrlCmd
|
KeyCode
.
KEY_K
)
);
let
shouldPreventDefault
=
kbService
.
dispatch
(
KeyMod
.
CtrlCmd
|
KeyCode
.
KEY_K
);
assert
.
equal
(
shouldPreventDefault
,
true
);
assert
.
deepEqual
(
executeCommandCalls
,
[]);
assert
.
deepEqual
(
showMessageCalls
,
[]);
...
...
@@ -167,7 +167,7 @@ suite('AbstractKeybindingService', () => {
statusMessageCallsDisposed
=
[];
// send backspace
shouldPreventDefault
=
kbService
.
dispatch
(
new
SimpleKeybinding
(
KeyCode
.
Backspace
)
);
shouldPreventDefault
=
kbService
.
dispatch
(
KeyCode
.
Backspace
);
assert
.
equal
(
shouldPreventDefault
,
true
);
assert
.
deepEqual
(
executeCommandCalls
,
[]);
assert
.
deepEqual
(
showMessageCalls
,
[]);
...
...
@@ -183,7 +183,7 @@ suite('AbstractKeybindingService', () => {
statusMessageCallsDisposed
=
[];
// send backspace
shouldPreventDefault
=
kbService
.
dispatch
(
new
SimpleKeybinding
(
KeyCode
.
Backspace
)
);
shouldPreventDefault
=
kbService
.
dispatch
(
KeyCode
.
Backspace
);
assert
.
equal
(
shouldPreventDefault
,
true
);
assert
.
deepEqual
(
executeCommandCalls
,
[{
commandId
:
'
simpleCommand
'
,
...
...
@@ -215,7 +215,7 @@ suite('AbstractKeybindingService', () => {
]);
function
assertIsIgnored
(
keybinding
:
number
):
void
{
let
shouldPreventDefault
=
kbService
.
dispatch
(
new
SimpleKeybinding
(
keybinding
)
);
let
shouldPreventDefault
=
kbService
.
dispatch
(
keybinding
);
assert
.
equal
(
shouldPreventDefault
,
false
);
assert
.
deepEqual
(
executeCommandCalls
,
[]);
assert
.
deepEqual
(
showMessageCalls
,
[]);
...
...
@@ -252,7 +252,7 @@ suite('AbstractKeybindingService', () => {
currentContextValue
=
{
key1
:
true
};
let
shouldPreventDefault
=
kbService
.
dispatch
(
new
SimpleKeybinding
(
KeyMod
.
CtrlCmd
|
KeyCode
.
KEY_K
)
);
let
shouldPreventDefault
=
kbService
.
dispatch
(
KeyMod
.
CtrlCmd
|
KeyCode
.
KEY_K
);
assert
.
equal
(
shouldPreventDefault
,
true
);
assert
.
deepEqual
(
executeCommandCalls
,
[{
commandId
:
'
simpleCommand
'
,
...
...
@@ -268,7 +268,7 @@ suite('AbstractKeybindingService', () => {
// send Ctrl/Cmd + K
currentContextValue
=
{};
shouldPreventDefault
=
kbService
.
dispatch
(
new
SimpleKeybinding
(
KeyMod
.
CtrlCmd
|
KeyCode
.
KEY_K
)
);
shouldPreventDefault
=
kbService
.
dispatch
(
KeyMod
.
CtrlCmd
|
KeyCode
.
KEY_K
);
assert
.
equal
(
shouldPreventDefault
,
true
);
assert
.
deepEqual
(
executeCommandCalls
,
[]);
assert
.
deepEqual
(
showMessageCalls
,
[]);
...
...
@@ -283,7 +283,7 @@ suite('AbstractKeybindingService', () => {
// send Ctrl/Cmd + X
currentContextValue
=
{};
shouldPreventDefault
=
kbService
.
dispatch
(
new
SimpleKeybinding
(
KeyMod
.
CtrlCmd
|
KeyCode
.
KEY_X
)
);
shouldPreventDefault
=
kbService
.
dispatch
(
KeyMod
.
CtrlCmd
|
KeyCode
.
KEY_X
);
assert
.
equal
(
shouldPreventDefault
,
true
);
assert
.
deepEqual
(
executeCommandCalls
,
[{
commandId
:
'
chordCommand
'
,
...
...
@@ -312,7 +312,7 @@ suite('AbstractKeybindingService', () => {
// send Ctrl/Cmd + K
currentContextValue
=
{};
let
shouldPreventDefault
=
kbService
.
dispatch
(
new
SimpleKeybinding
(
KeyMod
.
CtrlCmd
|
KeyCode
.
KEY_K
)
);
let
shouldPreventDefault
=
kbService
.
dispatch
(
KeyMod
.
CtrlCmd
|
KeyCode
.
KEY_K
);
assert
.
equal
(
shouldPreventDefault
,
true
);
assert
.
deepEqual
(
executeCommandCalls
,
[{
commandId
:
'
simpleCommand
'
,
...
...
@@ -330,7 +330,7 @@ suite('AbstractKeybindingService', () => {
currentContextValue
=
{
key1
:
true
};
shouldPreventDefault
=
kbService
.
dispatch
(
new
SimpleKeybinding
(
KeyMod
.
CtrlCmd
|
KeyCode
.
KEY_K
)
);
shouldPreventDefault
=
kbService
.
dispatch
(
KeyMod
.
CtrlCmd
|
KeyCode
.
KEY_K
);
assert
.
equal
(
shouldPreventDefault
,
true
);
assert
.
deepEqual
(
executeCommandCalls
,
[{
commandId
:
'
simpleCommand
'
,
...
...
@@ -348,7 +348,7 @@ suite('AbstractKeybindingService', () => {
currentContextValue
=
{
key1
:
true
};
shouldPreventDefault
=
kbService
.
dispatch
(
new
SimpleKeybinding
(
KeyMod
.
CtrlCmd
|
KeyCode
.
KEY_X
)
);
shouldPreventDefault
=
kbService
.
dispatch
(
KeyMod
.
CtrlCmd
|
KeyCode
.
KEY_X
);
assert
.
equal
(
shouldPreventDefault
,
false
);
assert
.
deepEqual
(
executeCommandCalls
,
[]);
assert
.
deepEqual
(
showMessageCalls
,
[]);
...
...
@@ -370,7 +370,7 @@ suite('AbstractKeybindingService', () => {
// send Ctrl/Cmd + K
currentContextValue
=
{};
let
shouldPreventDefault
=
kbService
.
dispatch
(
new
SimpleKeybinding
(
KeyMod
.
CtrlCmd
|
KeyCode
.
KEY_K
)
);
let
shouldPreventDefault
=
kbService
.
dispatch
(
KeyMod
.
CtrlCmd
|
KeyCode
.
KEY_K
);
assert
.
equal
(
shouldPreventDefault
,
false
);
assert
.
deepEqual
(
executeCommandCalls
,
[{
commandId
:
'
simpleCommand
'
,
...
...
src/vs/platform/keybinding/test/common/mockKeybindingService.ts
浏览文件 @
a3dba6ed
...
...
@@ -4,7 +4,7 @@
*--------------------------------------------------------------------------------------------*/
'
use strict
'
;
import
{
ResolvedKeybinding
,
Keybinding
,
_creat
eRuntimeKeybinding
}
from
'
vs/base/common/keyCodes
'
;
import
{
ResolvedKeybinding
,
RuntimeKeybinding
,
Simpl
eRuntimeKeybinding
}
from
'
vs/base/common/keyCodes
'
;
import
Event
from
'
vs/base/common/event
'
;
import
{
IKeybindingService
,
IKeybindingEvent
,
IKeybindingItem2
}
from
'
vs/platform/keybinding/common/keybinding
'
;
import
{
IContextKey
,
IContextKeyService
,
IContextKeyServiceTarget
,
ContextKeyExpr
}
from
'
vs/platform/contextkey/common/contextkey
'
;
...
...
@@ -76,8 +76,8 @@ export class MockKeybindingService2 implements IKeybindingService {
return
[];
}
public
resolveKeybinding
(
keybinding
:
Keybinding
):
ResolvedKeybinding
{
return
new
USLayoutResolvedKeybinding
(
_createRuntimeKeybinding
(
keybinding
,
OS
)
,
OS
);
public
resolveKeybinding
(
keybinding
:
Runtime
Keybinding
):
ResolvedKeybinding
{
return
new
USLayoutResolvedKeybinding
(
keybinding
,
OS
);
}
public
lookupKeybindings
(
commandId
:
string
):
ResolvedKeybinding
[]
{
...
...
@@ -92,7 +92,7 @@ export class MockKeybindingService2 implements IKeybindingService {
return
0
;
}
public
resolve
(
keybinding
:
Keybinding
,
target
:
IContextKeyServiceTarget
):
IResolveResult
{
public
resolve
(
keybinding
:
SimpleRuntime
Keybinding
,
target
:
IContextKeyServiceTarget
):
IResolveResult
{
return
null
;
}
}
src/vs/workbench/parts/extensions/browser/extensionEditor.ts
浏览文件 @
a3dba6ed
...
...
@@ -36,7 +36,7 @@ import { EditorOptions } from 'vs/workbench/common/editor';
import
{
ActionBar
}
from
'
vs/base/browser/ui/actionbar/actionbar
'
;
import
{
CombinedInstallAction
,
UpdateAction
,
EnableAction
,
DisableAction
,
BuiltinStatusLabelAction
,
ReloadAction
}
from
'
vs/workbench/parts/extensions/browser/extensionsActions
'
;
import
WebView
from
'
vs/workbench/parts/html/browser/webview
'
;
import
{
createKeybinding
}
from
'
vs/base/common/keyCodes
'
;
import
{
create
Runtime
Keybinding
}
from
'
vs/base/common/keyCodes
'
;
import
{
KeybindingIO
}
from
'
vs/workbench/services/keybinding/common/keybindingIO
'
;
import
{
IKeybindingService
}
from
'
vs/platform/keybinding/common/keybinding
'
;
import
{
DomScrollableElement
}
from
'
vs/base/browser/ui/scrollbar/scrollableElement
'
;
...
...
@@ -668,7 +668,7 @@ export class ExtensionEditor extends BaseEditor {
case
'
darwin
'
:
key
=
rawKeyBinding
.
mac
;
break
;
}
const
keyBinding
=
create
Keybinding
(
KeybindingIO
.
readKeybinding
(
key
||
rawKeyBinding
.
key
,
OS
)
);
const
keyBinding
=
create
RuntimeKeybinding
(
KeybindingIO
.
readKeybinding
(
key
||
rawKeyBinding
.
key
,
OS
),
OS
);
const
resolvedKeybinding
=
this
.
keybindingService
.
resolveKeybinding
(
keyBinding
);
const
result
=
resolvedKeybinding
.
getLabel
();
return
result
===
'
unknown
'
?
null
:
result
;
...
...
src/vs/workbench/parts/preferences/browser/keybindingWidgets.ts
浏览文件 @
a3dba6ed
...
...
@@ -46,19 +46,19 @@ class KeybindingInputWidget extends Widget {
private
onKeyDown
(
keyboardEvent
:
IKeyboardEvent
):
void
{
keyboardEvent
.
preventDefault
();
keyboardEvent
.
stopPropagation
();
switch
(
keyboardEvent
.
toKeybinding
().
value
)
{
case
KeyCode
.
Enter
:
this
.
_onEnter
.
fire
()
;
return
;
case
KeyCode
.
Escape
:
this
.
_onEscape
.
fire
();
return
;
if
(
keyboardEvent
.
equals
(
KeyCode
.
Enter
)
)
{
this
.
_onEnter
.
fire
();
return
;
}
if
(
keyboardEvent
.
equals
(
KeyCode
.
Escape
))
{
this
.
_onEscape
.
fire
();
return
;
}
this
.
printKeybinding
(
keyboardEvent
);
}
private
printKeybinding
(
keyboardEvent
:
IKeyboardEvent
):
void
{
const
keybinding
=
this
.
keybindingService
.
resolveKeybinding
(
keyboardEvent
.
toKeybinding
());
const
keybinding
=
this
.
keybindingService
.
resolveKeybinding
(
keyboardEvent
.
to
Runtime
Keybinding
());
this
.
inputBox
.
value
=
keybinding
.
getUserSettingsLabel
().
toLowerCase
();
this
.
inputBox
.
inputElement
.
title
=
'
keyCode:
'
+
keyboardEvent
.
browserEvent
.
keyCode
;
this
.
_onKeybinding
.
fire
(
keybinding
);
...
...
src/vs/workbench/parts/preferences/browser/keybindingsEditorContribution.ts
浏览文件 @
a3dba6ed
...
...
@@ -9,7 +9,7 @@ import * as nls from 'vs/nls';
import
*
as
dom
from
'
vs/base/browser/dom
'
;
import
{
RunOnceScheduler
}
from
'
vs/base/common/async
'
;
import
{
MarkedString
}
from
'
vs/base/common/htmlContent
'
;
import
{
createKeybinding
,
KeyCode
,
KeyMod
,
KeyChord
,
_
createRuntimeKeybinding
}
from
'
vs/base/common/keyCodes
'
;
import
{
KeyCode
,
KeyMod
,
KeyChord
,
createRuntimeKeybinding
}
from
'
vs/base/common/keyCodes
'
;
import
{
IDisposable
,
dispose
}
from
'
vs/base/common/lifecycle
'
;
import
{
KeybindingIO
}
from
'
vs/workbench/services/keybinding/common/keybindingIO
'
;
import
{
IKeybindingService
}
from
'
vs/platform/keybinding/common/keybinding
'
;
...
...
@@ -167,13 +167,11 @@ export class DefineKeybindingController implements editorCommon.IEditorContribut
let
numKeybinding
=
KeybindingIO
.
readKeybinding
(
strKeybinding
,
OS
);
let
keybinding
=
create
Keybinding
(
numKeybinding
);
let
keybinding
=
create
RuntimeKeybinding
(
numKeybinding
,
OS
);
let
resolvedKeybinding
=
this
.
_keybindingService
.
resolveKeybinding
(
keybinding
);
const
usResolvedKeybinding
=
new
USLayoutResolvedKeybinding
(
_createRuntimeKeybinding
(
keybinding
,
OS
)
,
OS
);
const
usResolvedKeybinding
=
new
USLayoutResolvedKeybinding
(
keybinding
,
OS
);
return
{
strKeybinding
:
strKeybinding
,
keybinding
:
keybinding
,
usLabel
:
usResolvedKeybinding
.
getLabel
(),
label
:
resolvedKeybinding
.
getLabel
(),
range
:
range
...
...
src/vs/workbench/parts/search/browser/searchActions.ts
浏览文件 @
a3dba6ed
...
...
@@ -22,7 +22,7 @@ import { CollapseAllAction as TreeCollapseAction } from 'vs/base/parts/tree/brow
import
{
IPreferencesService
}
from
'
vs/workbench/parts/preferences/common/preferences
'
;
import
{
IWorkbenchEditorService
}
from
'
vs/workbench/services/editor/common/editorService
'
;
import
{
ITelemetryService
}
from
'
vs/platform/telemetry/common/telemetry
'
;
import
{
createKeybinding
,
ResolvedKeybinding
,
KeyCode
,
KeyMod
}
from
'
vs/base/common/keyCodes
'
;
import
{
ResolvedKeybinding
,
KeyCode
,
KeyMod
,
createRuntimeKeybinding
}
from
'
vs/base/common/keyCodes
'
;
import
{
IKeybindingService
}
from
'
vs/platform/keybinding/common/keybinding
'
;
import
{
toResource
}
from
'
vs/workbench/common/editor
'
;
import
{
ServicesAccessor
,
IInstantiationService
}
from
'
vs/platform/instantiation/common/instantiation
'
;
...
...
@@ -30,6 +30,7 @@ import { IListService } from 'vs/platform/list/browser/listService';
import
{
explorerItemToFileResource
}
from
'
vs/workbench/parts/files/common/files
'
;
import
{
IWorkspaceContextService
}
from
'
vs/platform/workspace/common/workspace
'
;
import
{
isEqual
}
from
'
vs/platform/files/common/files
'
;
import
{
OS
}
from
'
vs/base/common/platform
'
;
export
function
isSearchViewletFocussed
(
viewletService
:
IViewletService
):
boolean
{
let
activeViewlet
=
viewletService
.
getActiveViewlet
();
...
...
@@ -40,7 +41,7 @@ export function isSearchViewletFocussed(viewletService: IViewletService): boolea
export
function
appendKeyBindingLabel
(
label
:
string
,
keyBinding
:
number
|
ResolvedKeybinding
,
keyBindingService2
:
IKeybindingService
):
string
{
let
resolvedKb
:
ResolvedKeybinding
;
if
(
typeof
keyBinding
===
'
number
'
)
{
resolvedKb
=
keyBindingService2
.
resolveKeybinding
(
create
Keybinding
(
keyBinding
));
resolvedKb
=
keyBindingService2
.
resolveKeybinding
(
create
RuntimeKeybinding
(
keyBinding
,
OS
));
}
else
{
resolvedKb
=
keyBinding
;
}
...
...
src/vs/workbench/parts/search/test/browser/searchActions.test.ts
浏览文件 @
a3dba6ed
...
...
@@ -19,6 +19,7 @@ import { Tree } from 'vs/base/parts/tree/browser/treeImpl';
import
{
IKeybindingService
}
from
'
vs/platform/keybinding/common/keybinding
'
;
import
{
USLayoutResolvedKeybinding
}
from
'
vs/platform/keybinding/common/usLayoutResolvedKeybinding
'
;
import
{
OS
}
from
'
vs/base/common/platform
'
;
import
{
RuntimeKeybinding
}
from
"
vs/base/common/keyCodes
"
;
suite
(
'
Search Actions
'
,
()
=>
{
...
...
@@ -29,7 +30,7 @@ suite('Search Actions', () => {
instantiationService
=
new
TestInstantiationService
();
instantiationService
.
stub
(
IModelService
,
stubModelService
(
instantiationService
));
instantiationService
.
stub
(
IKeybindingService
,
{});
instantiationService
.
stub
(
IKeybindingService
,
'
resolveKeybinding
'
,
(
keybinding
)
=>
new
USLayoutResolvedKeybinding
(
keybinding
,
OS
));
instantiationService
.
stub
(
IKeybindingService
,
'
resolveKeybinding
'
,
(
keybinding
:
RuntimeKeybinding
)
=>
new
USLayoutResolvedKeybinding
(
keybinding
,
OS
));
counter
=
0
;
});
...
...
src/vs/workbench/parts/terminal/electron-browser/terminalInstance.ts
浏览文件 @
a3dba6ed
...
...
@@ -227,7 +227,7 @@ export class TerminalInstance implements ITerminalInstance {
// Skip processing by xterm.js of keyboard events that resolve to commands described
// within commandsToSkipShell
const
standardKeyboardEvent
=
new
StandardKeyboardEvent
(
event
);
const
keybinding
=
standardKeyboardEvent
.
toKeybinding
();
const
keybinding
=
standardKeyboardEvent
.
to
Runtime
Keybinding
();
const
resolveResult
=
this
.
_keybindingService
.
resolve
(
keybinding
,
standardKeyboardEvent
.
target
);
if
(
resolveResult
&&
this
.
_skipTerminalCommands
.
some
(
k
=>
k
===
resolveResult
.
commandId
))
{
event
.
preventDefault
();
...
...
src/vs/workbench/parts/update/electron-browser/update.ts
浏览文件 @
a3dba6ed
...
...
@@ -19,7 +19,7 @@ import { ReleaseNotesInput } from 'vs/workbench/parts/update/electron-browser/re
import
{
IRequestService
}
from
'
vs/platform/request/node/request
'
;
import
{
asText
}
from
'
vs/base/node/request
'
;
import
{
IKeybindingService
}
from
'
vs/platform/keybinding/common/keybinding
'
;
import
{
createKeybinding
}
from
'
vs/base/common/keyCodes
'
;
import
{
create
Runtime
Keybinding
}
from
'
vs/base/common/keyCodes
'
;
import
{
KeybindingIO
}
from
'
vs/workbench/services/keybinding/common/keybindingIO
'
;
import
{
IOpenerService
}
from
'
vs/platform/opener/common/opener
'
;
import
{
IWorkbenchContribution
}
from
'
vs/workbench/common/contributions
'
;
...
...
@@ -80,7 +80,7 @@ export function loadReleaseNotes(accessor: ServicesAccessor, version: string): T
return
unassigned
;
}
const
keybinding
=
create
Keybinding
(
code
);
const
keybinding
=
create
RuntimeKeybinding
(
code
,
OS
);
if
(
!
keybinding
)
{
return
unassigned
;
...
...
src/vs/workbench/services/keybinding/common/keyboardMapper.ts
浏览文件 @
a3dba6ed
...
...
@@ -6,7 +6,7 @@
'
use strict
'
;
import
{
OperatingSystem
}
from
'
vs/base/common/platform
'
;
import
{
SimpleKeybinding
,
KeyCode
,
ResolvedKeybinding
,
Keybinding
,
KeyCodeUtils
,
KeyMod
}
from
'
vs/base/common/keyCodes
'
;
import
{
KeyCode
,
ResolvedKeybinding
,
KeyCodeUtils
,
SimpleRuntimeKeybinding
,
RuntimeKeybinding
,
RuntimeKeybindingType
}
from
'
vs/base/common/keyCodes
'
;
import
{
KeyboardEventCode
,
KeyboardEventCodeUtils
,
IMMUTABLE_CODE_TO_KEY_CODE
}
from
'
vs/workbench/services/keybinding/common/keyboardEventCode
'
;
import
{
CharCode
}
from
'
vs/base/common/charCode
'
;
import
{
IHTMLContentElement
}
from
'
vs/base/common/htmlContent
'
;
...
...
@@ -444,28 +444,20 @@ export class KeyboardMapper {
);
}
public
simpleKeybindingToHardwareKeypress
(
keybinding
:
SimpleKeybinding
):
HardwareKeypress
[]
{
const
ctrlCmd
=
keybinding
.
hasCtrlCmd
();
const
winCtrl
=
keybinding
.
hasWinCtrl
();
const
ctrlKey
=
(
this
.
_OS
===
OperatingSystem
.
Macintosh
?
winCtrl
:
ctrlCmd
);
const
metaKey
=
(
this
.
_OS
===
OperatingSystem
.
Macintosh
?
ctrlCmd
:
winCtrl
);
const
shiftKey
=
keybinding
.
hasShift
();
const
altKey
=
keybinding
.
hasAlt
();
const
keyCode
=
keybinding
.
getKeyCode
();
const
kbEncoded
=
this
.
_encode
(
ctrlKey
,
shiftKey
,
altKey
,
keyCode
);
public
simpleKeybindingToHardwareKeypress
(
keybinding
:
SimpleRuntimeKeybinding
):
HardwareKeypress
[]
{
const
kbEncoded
=
this
.
_encode
(
keybinding
.
ctrlKey
,
keybinding
.
shiftKey
,
keybinding
.
altKey
,
keybinding
.
keyCode
);
const
hwEncoded
=
this
.
_kbToHw
[
kbEncoded
];
let
result
:
HardwareKeypress
[]
=
[];
if
(
hwEncoded
)
{
for
(
let
i
=
0
,
len
=
hwEncoded
.
length
;
i
<
len
;
i
++
)
{
result
[
i
]
=
this
.
_decodeHw
(
hwEncoded
[
i
],
metaKey
);
result
[
i
]
=
this
.
_decodeHw
(
hwEncoded
[
i
],
keybinding
.
metaKey
);
}
}
return
result
;
}
public
hardwareKeypressToSimpleKeybinding
(
keypress
:
HardwareKeypress
):
SimpleKeybinding
{
public
hardwareKeypressToSimpleKeybinding
(
keypress
:
HardwareKeypress
):
Simple
Runtime
Keybinding
{
const
hwEncoded
=
this
.
_encode
(
keypress
.
ctrlKey
,
keypress
.
shiftKey
,
keypress
.
altKey
,
keypress
.
code
);
const
kbEncoded
=
this
.
_hwToKb
[
hwEncoded
];
if
(
!
kbEncoded
)
{
...
...
@@ -495,12 +487,12 @@ export class KeyboardMapper {
return
this
.
_hwToLabel
[
code
];
}
public
resolveKeybinding
(
keybinding
:
Keybinding
):
NativeResolvedKeybinding
[]
{
public
resolveKeybinding
(
keybinding
:
Runtime
Keybinding
):
NativeResolvedKeybinding
[]
{
let
result
:
NativeResolvedKeybinding
[]
=
[],
resultLen
=
0
;
if
(
keybinding
.
isChord
()
)
{
const
firstParts
=
this
.
simpleKeybindingToHardwareKeypress
(
keybinding
.
extractFirstPart
()
);
const
chordParts
=
this
.
simpleKeybindingToHardwareKeypress
(
keybinding
.
extractChordPart
()
);
if
(
keybinding
.
type
===
RuntimeKeybindingType
.
Chord
)
{
const
firstParts
=
this
.
simpleKeybindingToHardwareKeypress
(
keybinding
.
firstPart
);
const
chordParts
=
this
.
simpleKeybindingToHardwareKeypress
(
keybinding
.
chordPart
);
for
(
let
i
=
0
,
len
=
firstParts
.
length
;
i
<
len
;
i
++
)
{
const
firstPart
=
firstParts
[
i
];
...
...
@@ -575,21 +567,18 @@ export class KeyboardMapper {
return
new
HardwareKeypress
(
ctrlKey
,
shiftKey
,
altKey
,
metaKey
,
code
);
}
private
_decodeKb
(
kbEncoded
:
number
,
metaKey
:
boolean
):
SimpleKeybinding
{
private
_decodeKb
(
kbEncoded
:
number
,
metaKey
:
boolean
):
Simple
Runtime
Keybinding
{
const
ctrlKey
=
(
kbEncoded
&
0b001
)
?
true
:
false
;
const
shiftKey
=
(
kbEncoded
&
0b010
)
?
true
:
false
;
const
altKey
=
(
kbEncoded
&
0b100
)
?
true
:
false
;
const
keyCode
=
(
kbEncoded
>>>
3
);
const
ctrlCmd
=
(
this
.
_OS
===
OperatingSystem
.
Macintosh
?
metaKey
:
ctrlKey
);
const
winCtrl
=
(
this
.
_OS
===
OperatingSystem
.
Macintosh
?
ctrlKey
:
metaKey
);
return
new
SimpleKeybinding
(
(
ctrlCmd
?
KeyMod
.
CtrlCmd
:
0
)
|
(
winCtrl
?
KeyMod
.
WinCtrl
:
0
)
|
(
shiftKey
?
KeyMod
.
Shift
:
0
)
|
(
altKey
?
KeyMod
.
Alt
:
0
)
|
keyCode
return
new
SimpleRuntimeKeybinding
(
ctrlKey
,
shiftKey
,
altKey
,
metaKey
,
keyCode
);
}
}
...
...
src/vs/workbench/services/keybinding/electron-browser/keybindingService.ts
浏览文件 @
a3dba6ed
...
...
@@ -291,7 +291,7 @@ export class WorkbenchKeybindingService extends AbstractKeybindingService {
this
.
toDispose
.
push
(
dom
.
addDisposableListener
(
windowElement
,
dom
.
EventType
.
KEY_DOWN
,
(
e
:
KeyboardEvent
)
=>
{
let
keyEvent
=
new
StandardKeyboardEvent
(
e
);
let
shouldPreventDefault
=
this
.
_dispatch
(
keyEvent
.
toKeybinding
(),
keyEvent
.
target
);
let
shouldPreventDefault
=
this
.
_dispatch
(
keyEvent
.
to
Runtime
Keybinding
(),
keyEvent
.
target
);
if
(
shouldPreventDefault
)
{
keyEvent
.
preventDefault
();
}
...
...
src/vs/workbench/services/keybinding/test/keyboardMapper.test.ts
浏览文件 @
a3dba6ed
...
...
@@ -6,7 +6,7 @@
'
use strict
'
;
import
*
as
assert
from
'
assert
'
;
import
{
KeyMod
,
KeyCode
,
SimpleKeybinding
,
createKeybinding
,
Keybinding
,
_createRuntimeKeybinding
,
create
RuntimeKeybinding
}
from
'
vs/base/common/keyCodes
'
;
import
{
KeyMod
,
KeyCode
,
createRuntimeKeybinding
,
SimpleRuntimeKeybinding
,
RuntimeKeybinding
}
from
'
vs/base/common/keyCodes
'
;
import
{
KeyboardMapper
,
IKeyboardMapping
}
from
'
vs/workbench/services/keybinding/common/keyboardMapper
'
;
import
{
OperatingSystem
}
from
'
vs/base/common/platform
'
;
import
{
UserSettingsLabelProvider
,
PrintableKeypress
}
from
'
vs/platform/keybinding/common/keybindingLabels
'
;
...
...
@@ -81,7 +81,7 @@ suite('keyboardMapper - MAC de_ch', () => {
});
test
(
'
resolveKeybinding
'
,
()
=>
{
function
_assertAllLabels
(
keybinding
:
Keybinding
,
labels
:
string
[],
ariaLabels
:
string
[],
htmlLabel
:
IHTMLContentElement
[][]):
void
{
function
_assertAllLabels
(
keybinding
:
Runtime
Keybinding
,
labels
:
string
[],
ariaLabels
:
string
[],
htmlLabel
:
IHTMLContentElement
[][]):
void
{
const
kb
=
mapper
.
resolveKeybinding
(
keybinding
);
let
actualLabels
=
kb
.
map
(
k
=>
k
.
getLabel
());
...
...
@@ -94,16 +94,15 @@ suite('keyboardMapper - MAC de_ch', () => {
assert
.
deepEqual
(
actualHTMLLabels
,
htmlLabel
);
}
function
assertAllLabels
(
keybinding
:
Keybinding
,
label
:
string
|
string
[],
ariaLabel
:
string
|
string
[],
htmlLabel
:
IHTMLContentElement
[][]):
void
{
function
assertAllLabels
(
keybinding
:
Runtime
Keybinding
,
label
:
string
|
string
[],
ariaLabel
:
string
|
string
[],
htmlLabel
:
IHTMLContentElement
[][]):
void
{
let
_labels
=
(
typeof
label
===
'
string
'
?
[
label
]
:
label
);
let
_ariaLabels
=
(
typeof
ariaLabel
===
'
string
'
?
[
ariaLabel
]
:
ariaLabel
);
_assertAllLabels
(
keybinding
,
_labels
,
_ariaLabels
,
htmlLabel
);
}
// TODO: ElectronAccelerator, UserSettings
assertAllLabels
(
create
Keybinding
(
KeyMod
.
CtrlCmd
|
KeyCode
.
KEY_Z
),
create
RuntimeKeybinding
(
KeyMod
.
CtrlCmd
|
KeyCode
.
KEY_Z
,
OperatingSystem
.
Macintosh
),
'
⌘Z
'
,
'
Command+Z
'
,
[[{
...
...
@@ -179,15 +178,18 @@ function _assertKeybindingTranslation(mapper: KeyboardMapper, OS: OperatingSyste
}
else
{
expected
=
[];
}
let
keybindingLabel
=
new
USLayoutResolvedKeybinding
(
createRuntimeKeybinding
(
kb
,
OS
),
OS
).
getUserSettingsLabel
();
let
actualHardwareKeypresses
=
mapper
.
simpleKeybindingToHardwareKeypress
(
new
SimpleKeybinding
(
kb
));
const
runtimeKeybinding
=
createRuntimeKeybinding
(
kb
,
OS
);
const
keybindingLabel
=
new
USLayoutResolvedKeybinding
(
runtimeKeybinding
,
OS
).
getUserSettingsLabel
();
const
actualHardwareKeypresses
=
mapper
.
simpleKeybindingToHardwareKeypress
(
<
SimpleRuntimeKeybinding
>
runtimeKeybinding
);
if
(
actualHardwareKeypresses
.
length
===
0
)
{
assert
.
deepEqual
([],
expected
,
`simpleKeybindingToHardwareKeypress -- "
${
keybindingLabel
}
" -- actual: "[]" -- expected: "
${
expected
}
"`
);
return
;
}
le
t
actual
=
actualHardwareKeypresses
cons
t
actual
=
actualHardwareKeypresses
.
map
(
k
=>
new
PrintableKeypress
(
k
.
ctrlKey
,
k
.
shiftKey
,
k
.
altKey
,
k
.
metaKey
,
KeyboardEventCodeUtils
.
toString
(
k
.
code
)))
.
map
(
kp
=>
UserSettingsLabelProvider
.
toLabel2
(
kp
,
null
,
OS
));
assert
.
deepEqual
(
actual
,
expected
,
`simpleKeybindingToHardwareKeypress -- "
${
keybindingLabel
}
" -- actual: "
${
actual
}
" -- expected: "
${
expected
}
"`
);
...
...
@@ -201,7 +203,7 @@ function _assertKeybindingTranslation(mapper: KeyboardMapper, OS: OperatingSyste
return
;
}
const
reversedLabel
=
new
USLayoutResolvedKeybinding
(
_createRuntimeKeybinding
(
reversed
,
OS
)
,
OS
).
getUserSettingsLabel
();
const
reversedLabel
=
new
USLayoutResolvedKeybinding
(
reversed
,
OS
).
getUserSettingsLabel
();
assert
.
equal
(
reversedLabel
,
keybindingLabel
,
`
${
keybindingLabel
}
->
${
hardwareKeypressLabel
}
->
${
reversedLabel
}
`
);
});
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录