Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xxadev
vscode
提交
b39bf4f5
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,发现更多精彩内容 >>
提交
b39bf4f5
编写于
3月 10, 2017
作者:
D
Daniel Imms
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Fully convert message to tooltip on hover
上级
57d032a3
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
25 addition
and
46 deletion
+25
-46
src/vs/workbench/parts/terminal/browser/terminalWidgetManager.ts
...workbench/parts/terminal/browser/terminalWidgetManager.ts
+9
-19
src/vs/workbench/parts/terminal/common/terminal.ts
src/vs/workbench/parts/terminal/common/terminal.ts
+0
-9
src/vs/workbench/parts/terminal/electron-browser/terminalInstance.ts
...bench/parts/terminal/electron-browser/terminalInstance.ts
+2
-6
src/vs/workbench/parts/terminal/electron-browser/terminalLinkHandler.ts
...ch/parts/terminal/electron-browser/terminalLinkHandler.ts
+14
-12
未找到文件。
src/vs/workbench/parts/terminal/browser/terminalWidgetManager.ts
浏览文件 @
b39bf4f5
...
...
@@ -5,7 +5,6 @@
import
{
ITerminalConfigHelper
}
from
'
vs/workbench/parts/terminal/common/terminal
'
;
import
{
IDisposable
,
dispose
}
from
'
vs/base/common/lifecycle
'
;
import
{
setDisposableTimeout
}
from
'
vs/base/common/async
'
;
export
class
TerminalWidgetManager
{
private
_container
:
HTMLElement
;
...
...
@@ -28,26 +27,24 @@ export class TerminalWidgetManager {
private
_initTerminalHeightWatcher
(
terminalWrapper
:
HTMLElement
)
{
// Watch the xterm.js viewport for style changes and do a layout if it changes
this
.
_xtermViewport
=
<
HTMLElement
>
terminalWrapper
.
querySelector
(
'
.xterm-viewport
'
);
const
mutationObserver
=
new
MutationObserver
(()
=>
this
.
refreshHeight
());
const
mutationObserver
=
new
MutationObserver
(()
=>
this
.
_
refreshHeight
());
mutationObserver
.
observe
(
this
.
_xtermViewport
,
{
attributes
:
true
,
attributeFilter
:
[
'
style
'
]
});
}
public
showMessage
(
left
:
number
,
top
:
number
,
text
:
string
):
void
{
dispose
(
this
.
_messageWidget
);
this
.
_messageListeners
=
dispose
(
this
.
_messageListeners
);
this
.
_messageWidget
=
new
MessageWidget
(
this
.
_container
,
left
,
top
,
text
);
// close after 3s
this
.
_messageListeners
.
push
(
setDisposableTimeout
(()
=>
this
.
closeMessage
(),
3000
));
}
closeMessage
():
void
{
public
closeMessage
():
void
{
this
.
_messageListeners
=
dispose
(
this
.
_messageListeners
);
this
.
_messageListeners
.
push
(
MessageWidget
.
fadeOut
(
this
.
_messageWidget
));
if
(
this
.
_messageWidget
)
{
this
.
_messageListeners
.
push
(
MessageWidget
.
fadeOut
(
this
.
_messageWidget
));
}
}
p
ublic
refreshHeight
():
void
{
p
rivate
_
refreshHeight
():
void
{
this
.
_container
.
style
.
height
=
this
.
_xtermViewport
.
style
.
height
;
}
}
...
...
@@ -60,7 +57,7 @@ class MessageWidget {
public
get
text
():
string
{
return
this
.
_text
;
}
public
get
domNode
():
HTMLElement
{
return
this
.
_domNode
;
}
static
fadeOut
(
messageWidget
:
MessageWidget
):
IDisposable
{
public
static
fadeOut
(
messageWidget
:
MessageWidget
):
IDisposable
{
let
handle
:
number
;
const
dispose
=
()
=>
{
messageWidget
.
dispose
();
...
...
@@ -83,19 +80,12 @@ class MessageWidget {
this
.
_domNode
.
style
.
position
=
'
absolute
'
;
this
.
_domNode
.
style
.
left
=
`
${
_left
}
px`
;
this
.
_domNode
.
style
.
bottom
=
`
${
_container
.
offsetHeight
-
_top
}
px`
;
this
.
_domNode
.
classList
.
add
(
'
terminal-message-widget
'
);
this
.
_domNode
.
classList
.
add
(
'
terminal-message-widget
'
,
'
fadeIn
'
);
this
.
_domNode
.
textContent
=
_text
;
// const message = document.createElement('div');
// message.classList.add('message');
// message.textContent = _text;
// this._domNode.appendChild(message);
this
.
_container
.
appendChild
(
this
.
_domNode
);
this
.
_domNode
.
classList
.
add
(
'
fadeIn
'
);
}
dispose
()
{
public
dispose
():
void
{
if
(
this
.
domNode
.
parentElement
===
this
.
_container
)
{
this
.
_container
.
removeChild
(
this
.
domNode
);
}
...
...
src/vs/workbench/parts/terminal/common/terminal.ts
浏览文件 @
b39bf4f5
...
...
@@ -294,13 +294,4 @@ export interface ITerminalInstance {
* @param shell The new launch configuration.
*/
reuseTerminal
(
shell
?:
IShellLaunchConfig
):
void
;
/**
* Show a message in the terminal for a brief period.
*
* @param left The left position to show the message at.
* @param top The top position to show the message at.
* @param text The message to show.
*/
showMessage
(
left
:
number
,
top
:
number
,
text
:
string
):
void
;
}
src/vs/workbench/parts/terminal/electron-browser/terminalInstance.ts
浏览文件 @
b39bf4f5
...
...
@@ -211,8 +211,6 @@ export class TerminalInstance implements ITerminalInstance {
this
.
_xtermElement
=
document
.
createElement
(
'
div
'
);
this
.
_xterm
.
open
(
this
.
_xtermElement
);
this
.
_linkHandler
=
this
.
_instantiationService
.
createInstance
(
TerminalLinkHandler
,
this
,
this
.
_xterm
,
platform
.
platform
);
this
.
_linkHandler
.
registerLocalLinkHandler
();
this
.
_xterm
.
attachCustomKeydownHandler
((
event
:
KeyboardEvent
)
=>
{
// Disable all input if the terminal is exiting
if
(
this
.
_isExiting
)
{
...
...
@@ -283,6 +281,8 @@ export class TerminalInstance implements ITerminalInstance {
this
.
_wrapperElement
.
appendChild
(
this
.
_xtermElement
);
this
.
_widgetManager
=
new
TerminalWidgetManager
(
this
.
_configHelper
,
this
.
_wrapperElement
);
this
.
_linkHandler
=
this
.
_instantiationService
.
createInstance
(
TerminalLinkHandler
,
this
.
_widgetManager
,
this
.
_xterm
,
platform
.
platform
);
this
.
_linkHandler
.
registerLocalLinkHandler
();
this
.
_container
.
appendChild
(
this
.
_wrapperElement
);
const
computedStyle
=
window
.
getComputedStyle
(
this
.
_container
);
...
...
@@ -711,10 +711,6 @@ export class TerminalInstance implements ITerminalInstance {
}
}
public
showMessage
(
left
:
number
,
top
:
number
,
text
:
string
):
void
{
this
.
_widgetManager
.
showMessage
(
left
,
top
,
text
);
}
public
static
setTerminalProcessFactory
(
factory
:
ITerminalProcessFactory
):
void
{
this
.
_terminalProcessFactory
=
factory
;
}
...
...
src/vs/workbench/parts/terminal/electron-browser/terminalLinkHandler.ts
浏览文件 @
b39bf4f5
...
...
@@ -10,7 +10,7 @@ import * as pfs from 'vs/base/node/pfs';
import
Uri
from
'
vs/base/common/uri
'
;
import
{
IWorkbenchEditorService
}
from
'
vs/workbench/services/editor/common/editorService
'
;
import
{
IWorkspaceContextService
}
from
'
vs/platform/workspace/common/workspace
'
;
import
{
ITerminalInstance
}
from
'
vs/workbench/parts/terminal/common/terminal
'
;
import
{
TerminalWidgetManager
}
from
'
vs/workbench/parts/terminal/browser/terminalWidgetManager
'
;
import
{
TPromise
}
from
'
vs/base/common/winjs.base
'
;
const
pathPrefix
=
'
(
\\
.
\\
.?|
\\
~)
'
;
...
...
@@ -36,7 +36,7 @@ export type XtermLinkMatcherValidationCallback = (uri: string, element: HTMLElem
export
class
TerminalLinkHandler
{
constructor
(
private
_
instance
:
ITerminalInstance
,
private
_
widgetManager
:
TerminalWidgetManager
,
private
_xterm
:
any
,
private
_platform
:
platform
.
Platform
,
@
IWorkbenchEditorService
private
_editorService
:
IWorkbenchEditorService
,
...
...
@@ -72,14 +72,6 @@ export class TerminalLinkHandler {
return
(
event
:
MouseEvent
,
uri
:
string
)
=>
{
// Require ctrl/cmd on click
if
(
this
.
_platform
===
platform
.
Platform
.
Mac
?
!
event
.
metaKey
:
!
event
.
ctrlKey
)
{
const
link
=
<
HTMLElement
>
event
.
target
;
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
.
_instance
.
showMessage
(
link
.
offsetLeft
,
link
.
offsetTop
,
message
);
event
.
preventDefault
();
return
false
;
}
...
...
@@ -119,11 +111,21 @@ export class TerminalLinkHandler {
}
private
_addTooltipEventListeners
(
element
:
HTMLElement
)
{
let
timeout
=
null
;
element
.
addEventListener
(
'
mouseenter
'
,
()
=>
{
console
.
log
(
'
enter
'
);
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
);
},
500
);
});
element
.
addEventListener
(
'
mouseleave
'
,
()
=>
{
console
.
log
(
'
leave
'
);
clearTimeout
(
timeout
);
this
.
_widgetManager
.
closeMessage
();
});
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录