Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xxadev
vscode
提交
e3673c6b
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,发现更多精彩内容 >>
提交
e3673c6b
编写于
6月 28, 2017
作者:
D
Daniel Imms
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Support multiCursorModifier in terminal
Fixes #29541
上级
ff6b72fb
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
32 addition
and
17 deletion
+32
-17
src/vs/workbench/parts/terminal/electron-browser/terminalLinkHandler.ts
...ch/parts/terminal/electron-browser/terminalLinkHandler.ts
+27
-12
src/vs/workbench/parts/terminal/test/electron-browser/terminalLinkHandler.test.ts
...erminal/test/electron-browser/terminalLinkHandler.test.ts
+5
-5
未找到文件。
src/vs/workbench/parts/terminal/electron-browser/terminalLinkHandler.ts
浏览文件 @
e3673c6b
...
...
@@ -15,6 +15,7 @@ import { IWorkspaceContextService } from 'vs/platform/workspace/common/workspace
import
{
IOpenerService
}
from
'
vs/platform/opener/common/opener
'
;
import
{
TerminalWidgetManager
}
from
'
vs/workbench/parts/terminal/browser/terminalWidgetManager
'
;
import
{
TPromise
}
from
'
vs/base/common/winjs.base
'
;
import
{
IConfigurationService
}
from
'
vs/platform/configuration/common/configuration
'
;
const
pathPrefix
=
'
(
\\
.
\\
.?|
\\
~)
'
;
const
pathSeparatorClause
=
'
\\
/
'
;
...
...
@@ -66,7 +67,8 @@ export class TerminalLinkHandler {
private
_platform
:
platform
.
Platform
,
@
IOpenerService
private
_openerService
:
IOpenerService
,
@
IWorkbenchEditorService
private
_editorService
:
IWorkbenchEditorService
,
@
IWorkspaceContextService
private
_contextService
:
IWorkspaceContextService
@
IWorkspaceContextService
private
_contextService
:
IWorkspaceContextService
,
@
IConfigurationService
private
_configurationService
:
IConfigurationService
)
{
const
baseLocalLinkClause
=
_platform
===
platform
.
Platform
.
Windows
?
winLocalLinkClause
:
unixLocalLinkClause
;
// Append line and column number regex
...
...
@@ -116,8 +118,8 @@ export class TerminalLinkHandler {
private
_wrapLinkHandler
(
handler
:
(
uri
:
string
)
=>
boolean
|
void
):
XtermLinkMatcherHandler
{
return
(
event
:
MouseEvent
,
uri
:
string
)
=>
{
// Require c
trl/cmd
on click
if
(
this
.
_platform
===
platform
.
Platform
.
Mac
?
!
event
.
metaKey
:
!
event
.
ctrlKey
)
{
// Require c
orrect modifier
on click
if
(
!
this
.
_isLinkActivationModifierDown
(
event
)
)
{
event
.
preventDefault
();
return
false
;
}
...
...
@@ -163,22 +165,35 @@ export class TerminalLinkHandler {
callback
(
true
);
}
private
_isLinkActivationModifierDown
(
event
:
MouseEvent
):
boolean
{
const
editorConf
=
this
.
_configurationService
.
getConfiguration
<
{
multiCursorModifier
:
'
ctrlCmd
'
|
'
alt
'
}
>
(
'
editor
'
);
if
(
editorConf
.
multiCursorModifier
===
'
ctrlCmd
'
)
{
return
!!
event
.
altKey
;
}
return
platform
.
isMacintosh
?
event
.
metaKey
:
event
.
ctrlKey
;
}
private
_getLinkHoverString
():
string
{
const
editorConf
=
this
.
_configurationService
.
getConfiguration
<
{
multiCursorModifier
:
'
ctrlCmd
'
|
'
alt
'
}
>
(
'
editor
'
);
if
(
editorConf
.
multiCursorModifier
===
'
ctrlCmd
'
)
{
return
nls
.
localize
(
'
terminalLinkHandler.followLinkAlt
'
,
'
Alt + click to follow link
'
);
}
if
(
platform
.
isMacintosh
)
{
return
nls
.
localize
(
'
terminalLinkHandler.followLinkCmd
'
,
'
Cmd + click to follow link
'
);
}
return
nls
.
localize
(
'
terminalLinkHandler.followLinkCtrl
'
,
'
Ctrl + click to follow link
'
);
}
private
_addTooltipEventListeners
(
element
:
HTMLElement
):
void
{
let
timeout
=
null
;
let
isMessageShowing
=
false
;
this
.
_hoverDisposables
.
push
(
dom
.
addDisposableListener
(
element
,
dom
.
EventType
.
MOUSE_OVER
,
e
=>
{
element
.
classList
.
toggle
(
'
active
'
,
platform
.
isMacintosh
?
e
.
metaKey
:
e
.
ctrlKey
);
element
.
classList
.
toggle
(
'
active
'
,
this
.
_isLinkActivationModifierDown
(
e
)
);
this
.
_mouseMoveDisposable
=
dom
.
addDisposableListener
(
element
,
dom
.
EventType
.
MOUSE_MOVE
,
e
=>
{
element
.
classList
.
toggle
(
'
active
'
,
platform
.
isMacintosh
?
e
.
metaKey
:
e
.
ctrlKey
);
element
.
classList
.
toggle
(
'
active
'
,
this
.
_isLinkActivationModifierDown
(
e
)
);
});
timeout
=
setTimeout
(()
=>
{
let
message
:
string
;
if
(
platform
.
isMacintosh
)
{
message
=
nls
.
localize
(
'
terminalLinkHandler.followLinkCmd
'
,
'
Cmd + click to follow link
'
);
}
else
{
message
=
nls
.
localize
(
'
terminalLinkHandler.followLinkCtrl
'
,
'
Ctrl + click to follow link
'
);
}
this
.
_widgetManager
.
showMessage
(
element
.
offsetLeft
,
element
.
offsetTop
,
message
);
this
.
_widgetManager
.
showMessage
(
element
.
offsetLeft
,
element
.
offsetTop
,
this
.
_getLinkHoverString
());
isMessageShowing
=
true
;
},
500
);
}));
...
...
src/vs/workbench/parts/terminal/test/electron-browser/terminalLinkHandler.test.ts
浏览文件 @
e3673c6b
...
...
@@ -54,7 +54,7 @@ class TestWorkspace extends Workspace {
suite
(
'
Workbench - TerminalLinkHandler
'
,
()
=>
{
suite
(
'
localLinkRegex
'
,
()
=>
{
test
(
'
Windows
'
,
()
=>
{
const
terminalLinkHandler
=
new
TestTerminalLinkHandler
(
new
TestXterm
(),
Platform
.
Windows
,
null
,
null
,
null
);
const
terminalLinkHandler
=
new
TestTerminalLinkHandler
(
new
TestXterm
(),
Platform
.
Windows
,
null
,
null
,
null
,
null
);
function
testLink
(
link
:
string
,
linkUrl
:
string
,
lineNo
?:
string
,
columnNo
?:
string
)
{
assert
.
equal
(
terminalLinkHandler
.
extractLinkUrl
(
link
),
linkUrl
);
assert
.
equal
(
terminalLinkHandler
.
extractLinkUrl
(
`:
${
link
}
:`
),
linkUrl
);
...
...
@@ -124,7 +124,7 @@ suite('Workbench - TerminalLinkHandler', () => {
});
test
(
'
Linux
'
,
()
=>
{
const
terminalLinkHandler
=
new
TestTerminalLinkHandler
(
new
TestXterm
(),
Platform
.
Linux
,
null
,
null
,
null
);
const
terminalLinkHandler
=
new
TestTerminalLinkHandler
(
new
TestXterm
(),
Platform
.
Linux
,
null
,
null
,
null
,
null
);
function
testLink
(
link
:
string
,
linkUrl
:
string
,
lineNo
?:
string
,
columnNo
?:
string
)
{
assert
.
equal
(
terminalLinkHandler
.
extractLinkUrl
(
link
),
linkUrl
);
assert
.
equal
(
terminalLinkHandler
.
extractLinkUrl
(
`:
${
link
}
:`
),
linkUrl
);
...
...
@@ -188,7 +188,7 @@ suite('Workbench - TerminalLinkHandler', () => {
suite
(
'
preprocessPath
'
,
()
=>
{
test
(
'
Windows
'
,
()
=>
{
const
linkHandler
=
new
TestTerminalLinkHandler
(
new
TestXterm
(),
Platform
.
Windows
,
null
,
null
,
new
TestContextService
(
new
TestWorkspace
(
'
C:
\\
base
'
)));
new
TestContextService
(
new
TestWorkspace
(
'
C:
\\
base
'
))
,
null
);
let
stub
=
sinon
.
stub
(
path
,
'
join
'
,
function
(
arg1
,
arg2
)
{
return
arg1
+
'
\\
'
+
arg2
;
...
...
@@ -202,7 +202,7 @@ suite('Workbench - TerminalLinkHandler', () => {
test
(
'
Linux
'
,
()
=>
{
const
linkHandler
=
new
TestTerminalLinkHandler
(
new
TestXterm
(),
Platform
.
Linux
,
null
,
null
,
new
TestContextService
(
new
TestWorkspace
(
'
/base
'
)));
new
TestContextService
(
new
TestWorkspace
(
'
/base
'
))
,
null
);
let
stub
=
sinon
.
stub
(
path
,
'
join
'
,
function
(
arg1
,
arg2
)
{
return
arg1
+
'
/
'
+
arg2
;
...
...
@@ -215,7 +215,7 @@ suite('Workbench - TerminalLinkHandler', () => {
});
test
(
'
No Workspace
'
,
()
=>
{
const
linkHandler
=
new
TestTerminalLinkHandler
(
new
TestXterm
(),
Platform
.
Linux
,
null
,
null
,
new
TestContextService
(
null
));
const
linkHandler
=
new
TestTerminalLinkHandler
(
new
TestXterm
(),
Platform
.
Linux
,
null
,
null
,
new
TestContextService
(
null
)
,
null
);
assert
.
equal
(
linkHandler
.
preprocessPath
(
'
./src/file1
'
),
null
);
assert
.
equal
(
linkHandler
.
preprocessPath
(
'
src/file2
'
),
null
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录