Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xxadev
vscode
提交
8281fb30
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,发现更多精彩内容 >>
提交
8281fb30
编写于
4月 10, 2017
作者:
A
Alex Dima
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Fixes #24064: NumLock/NumPad keys stopped working in 1.11 on Linux
上级
62abf41d
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
93 addition
and
2 deletion
+93
-2
src/vs/workbench/services/keybinding/common/macLinuxKeyboardMapper.ts
...ench/services/keybinding/common/macLinuxKeyboardMapper.ts
+24
-1
src/vs/workbench/services/keybinding/common/scanCode.ts
src/vs/workbench/services/keybinding/common/scanCode.ts
+24
-1
src/vs/workbench/services/keybinding/test/macLinuxKeyboardMapper.test.ts
...h/services/keybinding/test/macLinuxKeyboardMapper.test.ts
+45
-0
未找到文件。
src/vs/workbench/services/keybinding/common/macLinuxKeyboardMapper.ts
浏览文件 @
8281fb30
...
...
@@ -7,7 +7,7 @@
import
{
OperatingSystem
}
from
'
vs/base/common/platform
'
;
import
{
KeyCode
,
ResolvedKeybinding
,
KeyCodeUtils
,
SimpleKeybinding
,
Keybinding
,
KeybindingType
,
USER_SETTINGS
}
from
'
vs/base/common/keyCodes
'
;
import
{
ScanCode
,
ScanCodeUtils
,
IMMUTABLE_CODE_TO_KEY_CODE
,
ScanCodeBinding
}
from
'
vs/workbench/services/keybinding/common/scanCode
'
;
import
{
ScanCode
,
ScanCodeUtils
,
IMMUTABLE_CODE_TO_KEY_CODE
,
IMMUTABLE_KEY_CODE_TO_CODE
,
ScanCodeBinding
}
from
'
vs/workbench/services/keybinding/common/scanCode
'
;
import
{
CharCode
}
from
'
vs/base/common/charCode
'
;
import
{
UILabelProvider
,
AriaLabelProvider
,
UserSettingsLabelProvider
,
ElectronAcceleratorLabelProvider
,
NO_MODIFIERS
}
from
'
vs/platform/keybinding/common/keybindingLabels
'
;
import
{
IKeyboardMapper
}
from
'
vs/workbench/services/keybinding/common/keyboardMapper
'
;
...
...
@@ -1055,6 +1055,29 @@ export class MacLinuxKeyboardMapper implements IKeyboardMapper {
if
(
code
===
ScanCode
.
NumpadEnter
)
{
code
=
ScanCode
.
Enter
;
}
if
(
(
code
===
ScanCode
.
Numpad1
)
||
(
code
===
ScanCode
.
Numpad2
)
||
(
code
===
ScanCode
.
Numpad3
)
||
(
code
===
ScanCode
.
Numpad4
)
||
(
code
===
ScanCode
.
Numpad5
)
||
(
code
===
ScanCode
.
Numpad6
)
||
(
code
===
ScanCode
.
Numpad7
)
||
(
code
===
ScanCode
.
Numpad8
)
||
(
code
===
ScanCode
.
Numpad9
)
||
(
code
===
ScanCode
.
Numpad0
)
||
(
code
===
ScanCode
.
NumpadDecimal
)
)
{
// "Dispatch" on keyCode for all numpad keys in order for NumLock to work correctly
if
(
keyboardEvent
.
keyCode
>=
0
)
{
const
immutableScanCode
=
IMMUTABLE_KEY_CODE_TO_CODE
[
keyboardEvent
.
keyCode
];
if
(
immutableScanCode
!==
-
1
)
{
code
=
immutableScanCode
;
}
}
}
const
keypress
=
new
ScanCodeBinding
(
keyboardEvent
.
ctrlKey
,
keyboardEvent
.
shiftKey
,
keyboardEvent
.
altKey
,
keyboardEvent
.
metaKey
,
code
);
return
new
NativeResolvedKeybinding
(
this
,
this
.
_OS
,
keypress
,
null
);
}
...
...
src/vs/workbench/services/keybinding/common/scanCode.ts
浏览文件 @
8281fb30
...
...
@@ -220,10 +220,15 @@ export const ScanCodeUtils = {
};
/**
* -1 if a
Hw
Code => KeyCode mapping depends on kb layout.
* -1 if a
Scan
Code => KeyCode mapping depends on kb layout.
*/
export
const
IMMUTABLE_CODE_TO_KEY_CODE
:
KeyCode
[]
=
[];
/**
* -1 if a KeyCode => ScanCode mapping depends on kb layout.
*/
export
const
IMMUTABLE_KEY_CODE_TO_CODE
:
ScanCode
[]
=
[];
export
class
ScanCodeBinding
{
public
readonly
ctrlKey
:
boolean
;
public
readonly
shiftKey
:
boolean
;
...
...
@@ -468,10 +473,28 @@ export class ScanCodeBinding {
IMMUTABLE_CODE_TO_KEY_CODE
[
i
]
=
-
1
;
}
for
(
let
i
=
0
;
i
<=
KeyCode
.
MAX_VALUE
;
i
++
)
{
IMMUTABLE_KEY_CODE_TO_CODE
[
i
]
=
-
1
;
}
function
define
(
code
:
ScanCode
,
keyCode
:
KeyCode
):
void
{
IMMUTABLE_CODE_TO_KEY_CODE
[
code
]
=
keyCode
;
if
(
(
keyCode
!==
KeyCode
.
Unknown
)
&&
(
keyCode
!==
KeyCode
.
Enter
)
&&
(
keyCode
!==
KeyCode
.
Ctrl
)
&&
(
keyCode
!==
KeyCode
.
Shift
)
&&
(
keyCode
!==
KeyCode
.
Alt
)
&&
(
keyCode
!==
KeyCode
.
Meta
)
)
{
IMMUTABLE_KEY_CODE_TO_CODE
[
keyCode
]
=
code
;
}
}
// Manually added due to the exclusion above (due to duplication with NumpadEnter)
IMMUTABLE_KEY_CODE_TO_CODE
[
KeyCode
.
Enter
]
=
ScanCode
.
Enter
;
define
(
ScanCode
.
None
,
KeyCode
.
Unknown
);
define
(
ScanCode
.
Hyper
,
KeyCode
.
Unknown
);
define
(
ScanCode
.
Super
,
KeyCode
.
Unknown
);
...
...
src/vs/workbench/services/keybinding/test/macLinuxKeyboardMapper.test.ts
浏览文件 @
8281fb30
...
...
@@ -1599,6 +1599,51 @@ suite('keyboardMapper', () => {
);
});
test
(
'
issue #24064: NumLock/NumPad keys stopped working in 1.11 on Linux
'
,
()
=>
{
let
mapper
=
new
MacLinuxKeyboardMapper
(
false
,
{},
OperatingSystem
.
Linux
);
function
assertNumpadKeyboardEvent
(
keyCode
:
KeyCode
,
code
:
string
,
label
:
string
,
electronAccelerator
:
string
,
userSettingsLabel
:
string
,
dispatch
:
string
):
void
{
assertResolveKeyboardEvent
(
mapper
,
{
ctrlKey
:
false
,
shiftKey
:
false
,
altKey
:
false
,
metaKey
:
false
,
keyCode
:
keyCode
,
code
:
code
},
{
label
:
label
,
ariaLabel
:
label
,
labelWithoutModifiers
:
label
,
ariaLabelWithoutModifiers
:
label
,
electronAccelerator
:
electronAccelerator
,
userSettingsLabel
:
userSettingsLabel
,
isWYSIWYG
:
true
,
isChord
:
false
,
hasCtrlModifier
:
false
,
hasShiftModifier
:
false
,
hasAltModifier
:
false
,
hasMetaModifier
:
false
,
dispatchParts
:
[
dispatch
,
null
],
}
);
}
assertNumpadKeyboardEvent
(
KeyCode
.
End
,
'
Numpad1
'
,
'
End
'
,
'
End
'
,
'
end
'
,
'
[End]
'
);
assertNumpadKeyboardEvent
(
KeyCode
.
DownArrow
,
'
Numpad2
'
,
'
DownArrow
'
,
'
Down
'
,
'
down
'
,
'
[ArrowDown]
'
);
assertNumpadKeyboardEvent
(
KeyCode
.
PageDown
,
'
Numpad3
'
,
'
PageDown
'
,
'
PageDown
'
,
'
pagedown
'
,
'
[PageDown]
'
);
assertNumpadKeyboardEvent
(
KeyCode
.
LeftArrow
,
'
Numpad4
'
,
'
LeftArrow
'
,
'
Left
'
,
'
left
'
,
'
[ArrowLeft]
'
);
assertNumpadKeyboardEvent
(
KeyCode
.
Unknown
,
'
Numpad5
'
,
'
NumPad5
'
,
null
,
'
numpad5
'
,
'
[Numpad5]
'
);
assertNumpadKeyboardEvent
(
KeyCode
.
RightArrow
,
'
Numpad6
'
,
'
RightArrow
'
,
'
Right
'
,
'
right
'
,
'
[ArrowRight]
'
);
assertNumpadKeyboardEvent
(
KeyCode
.
Home
,
'
Numpad7
'
,
'
Home
'
,
'
Home
'
,
'
home
'
,
'
[Home]
'
);
assertNumpadKeyboardEvent
(
KeyCode
.
UpArrow
,
'
Numpad8
'
,
'
UpArrow
'
,
'
Up
'
,
'
up
'
,
'
[ArrowUp]
'
);
assertNumpadKeyboardEvent
(
KeyCode
.
PageUp
,
'
Numpad9
'
,
'
PageUp
'
,
'
PageUp
'
,
'
pageup
'
,
'
[PageUp]
'
);
assertNumpadKeyboardEvent
(
KeyCode
.
Insert
,
'
Numpad0
'
,
'
Insert
'
,
'
Insert
'
,
'
insert
'
,
'
[Insert]
'
);
assertNumpadKeyboardEvent
(
KeyCode
.
Delete
,
'
NumpadDecimal
'
,
'
Delete
'
,
'
Delete
'
,
'
delete
'
,
'
[Delete]
'
);
});
});
suite
(
'
keyboardMapper - LINUX ru
'
,
()
=>
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录