Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xxadev
vscode
提交
95d4e101
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,发现更多精彩内容 >>
提交
95d4e101
编写于
3月 29, 2017
作者:
A
Alex Dima
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Fixes #23415: show message if a kb layout is impacted by the new logic
上级
4be4a427
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
101 addition
and
2 deletion
+101
-2
src/vs/workbench/services/keybinding/electron-browser/keybindingService.ts
...services/keybinding/electron-browser/keybindingService.ts
+101
-2
未找到文件。
src/vs/workbench/services/keybinding/electron-browser/keybindingService.ts
浏览文件 @
95d4e101
...
...
@@ -34,6 +34,10 @@ import { WindowsKeyboardMapper, IWindowsKeyboardMapping, windowsKeyboardMappingE
import
{
IMacLinuxKeyboardMapping
,
MacLinuxKeyboardMapper
,
macLinuxKeyboardMappingEquals
}
from
'
vs/workbench/services/keybinding/common/macLinuxKeyboardMapper
'
;
import
{
MacLinuxFallbackKeyboardMapper
}
from
'
vs/workbench/services/keybinding/common/macLinuxFallbackKeyboardMapper
'
;
import
Event
,
{
Emitter
}
from
'
vs/base/common/event
'
;
import
{
IStorageService
,
StorageScope
}
from
'
vs/platform/storage/common/storage
'
;
import
{
Action
}
from
'
vs/base/common/actions
'
;
import
{
TPromise
}
from
'
vs/base/common/winjs.base
'
;
import
Severity
from
'
vs/base/common/severity
'
;
export
class
KeyboardMapperFactory
{
public
static
INSTANCE
=
new
KeyboardMapperFactory
();
...
...
@@ -73,6 +77,27 @@ export class KeyboardMapperFactory {
return
this
.
_layoutInfo
;
}
public
isUSStandard
():
boolean
{
let
_kbInfo
=
this
.
getCurrentKeyboardLayout
();
if
(
OS
===
OperatingSystem
.
Linux
)
{
const
kbInfo
=
<
nativeKeymap
.
ILinuxKeyboardLayoutInfo
>
_kbInfo
;
return
(
kbInfo
&&
kbInfo
.
layout
===
'
us
'
);
}
if
(
OS
===
OperatingSystem
.
Macintosh
)
{
const
kbInfo
=
<
nativeKeymap
.
IMacKeyboardLayoutInfo
>
_kbInfo
;
return
(
kbInfo
&&
kbInfo
.
id
===
'
com.apple.keylayout.US
'
);
}
if
(
OS
===
OperatingSystem
.
Windows
)
{
const
kbInfo
=
<
nativeKeymap
.
IWindowsKeyboardLayoutInfo
>
_kbInfo
;
return
(
kbInfo
&&
kbInfo
.
name
===
'
00000409
'
);
}
return
false
;
}
public
getRawKeyboardMapping
():
nativeKeymap
.
IKeyboardMapping
{
if
(
!
this
.
_initialized
)
{
this
.
_setKeyboardData
(
nativeKeymap
.
getCurrentKeyboardLayout
(),
nativeKeymap
.
getKeyMap
());
...
...
@@ -204,6 +229,43 @@ let keybindingsExtPoint = ExtensionsRegistry.registerExtensionPoint<ContributedK
]
});
interface
IStorageData
{
dontShowPrompt
:
boolean
;
}
class
KeybindingsMigrationsStorage
{
private
static
KEY
=
'
keybindingsMigration
'
;
private
_storageService
:
IStorageService
;
private
_value
:
IStorageData
;
constructor
(
storageService
:
IStorageService
)
{
this
.
_storageService
=
storageService
;
this
.
_value
=
this
.
_read
();
}
private
_read
():
IStorageData
{
let
jsonValue
=
this
.
_storageService
.
get
(
KeybindingsMigrationsStorage
.
KEY
,
StorageScope
.
GLOBAL
);
if
(
!
jsonValue
)
{
return
null
;
}
try
{
return
JSON
.
parse
(
jsonValue
);
}
catch
(
err
)
{
return
null
;
}
}
public
get
():
IStorageData
{
return
this
.
_value
;
}
public
set
(
data
:
IStorageData
):
void
{
this
.
_value
=
data
;
this
.
_storageService
.
store
(
KeybindingsMigrationsStorage
.
KEY
,
JSON
.
stringify
(
this
.
_value
),
StorageScope
.
GLOBAL
);
}
}
export
class
WorkbenchKeybindingService
extends
AbstractKeybindingService
{
private
_keyboardMapper
:
IKeyboardMapper
;
...
...
@@ -216,8 +278,9 @@ export class WorkbenchKeybindingService extends AbstractKeybindingService {
@
IContextKeyService
contextKeyService
:
IContextKeyService
,
@
ICommandService
commandService
:
ICommandService
,
@
ITelemetryService
private
telemetryService
:
ITelemetryService
,
@
IMessageService
messageService
:
IMessageService
,
@
IMessageService
private
messageService
:
IMessageService
,
@
IEnvironmentService
environmentService
:
IEnvironmentService
,
@
IStorageService
private
storageService
:
IStorageService
,
@
IStatusbarService
statusBarService
:
IStatusbarService
)
{
super
(
contextKeyService
,
commandService
,
messageService
,
statusBarService
);
...
...
@@ -263,6 +326,42 @@ export class WorkbenchKeybindingService extends AbstractKeybindingService {
telemetryService
.
publicLog
(
'
keyboardLayout
'
,
{
currentKeyboardLayout
:
data
});
if
(
OS
===
OperatingSystem
.
Macintosh
||
OS
===
OperatingSystem
.
Linux
)
{
const
isUSStandard
=
KeyboardMapperFactory
.
INSTANCE
.
isUSStandard
();
if
(
!
isUSStandard
)
{
this
.
_promptIfNeeded
();
}
}
}
private
_promptIfNeeded
():
void
{
const
storage
=
new
KeybindingsMigrationsStorage
(
this
.
storageService
);
const
storedData
=
storage
.
get
();
if
(
storedData
&&
storedData
.
dontShowPrompt
)
{
// Do not prompt stored
return
;
}
storage
.
set
({
dontShowPrompt
:
true
});
this
.
_prompt
();
}
private
_prompt
():
void
{
const
okAction
=
new
Action
(
'
keybindingMigration.ok
'
,
nls
.
localize
(
'
keybindingMigration.ok
'
,
"
OK
"
),
null
,
true
,
()
=>
TPromise
.
as
(
true
)
);
this
.
messageService
.
show
(
Severity
.
Info
,
{
message
:
nls
.
localize
(
'
keybindingMigration.prompt
'
,
"
Some keyboard shortcuts have changed for your keyboard layout.
"
),
actions
:
[
okAction
]
});
}
public
dumpDebugInfo
():
string
{
...
...
@@ -407,7 +506,7 @@ export class WorkbenchKeybindingService extends AbstractKeybindingService {
private
_asCommandRule
(
isBuiltin
:
boolean
,
idx
:
number
,
binding
:
ContributedKeyBinding
):
IKeybindingRule2
{
let
{
command
,
when
,
key
,
mac
,
linux
,
win
}
=
binding
;
let
{
command
,
when
,
key
,
mac
,
linux
,
win
}
=
binding
;
let
weight
:
number
;
if
(
isBuiltin
)
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录