Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xxadev
vscode
提交
b3314161
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,发现更多精彩内容 >>
提交
b3314161
编写于
1月 19, 2016
作者:
B
Benjamin Pasero
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'master' into ben/focus-indication
上级
6bd608e8
fca50805
变更
14
展开全部
隐藏空白更改
内联
并排
Showing
14 changed file
with
396 addition
and
355 deletion
+396
-355
extensions/node-debug/node-debug.azure.json
extensions/node-debug/node-debug.azure.json
+1
-1
extensions/vscode-api-tests/src/commands.test.ts
extensions/vscode-api-tests/src/commands.test.ts
+19
-3
extensions/vscode-api-tests/src/workspace.test.ts
extensions/vscode-api-tests/src/workspace.test.ts
+2
-1
src/vs/base/browser/ui/findinput/findInput.ts
src/vs/base/browser/ui/findinput/findInput.ts
+4
-0
src/vs/editor/browser/controller/keyboardHandler.ts
src/vs/editor/browser/controller/keyboardHandler.ts
+67
-50
src/vs/editor/common/controller/textAreaHandler.ts
src/vs/editor/common/controller/textAreaHandler.ts
+159
-232
src/vs/editor/common/controller/textAreaState.ts
src/vs/editor/common/controller/textAreaState.ts
+50
-27
src/vs/editor/contrib/find/browser/findWidget.ts
src/vs/editor/contrib/find/browser/findWidget.ts
+6
-9
src/vs/editor/test/common/controller/textAreaState.test.ts
src/vs/editor/test/common/controller/textAreaState.test.ts
+72
-20
src/vs/editor/test/common/mocks/mockTextAreaWrapper.ts
src/vs/editor/test/common/mocks/mockTextAreaWrapper.ts
+1
-7
src/vs/workbench/browser/viewlet.ts
src/vs/workbench/browser/viewlet.ts
+10
-2
src/vs/workbench/parts/debug/node/rawDebugSession.ts
src/vs/workbench/parts/debug/node/rawDebugSession.ts
+1
-1
src/vs/workbench/parts/search/browser/searchViewlet.ts
src/vs/workbench/parts/search/browser/searchViewlet.ts
+1
-1
src/vs/workbench/test/browser/servicesTestUtils.ts
src/vs/workbench/test/browser/servicesTestUtils.ts
+3
-1
未找到文件。
extensions/node-debug/node-debug.azure.json
浏览文件 @
b3314161
{
"account"
:
"monacobuild"
,
"container"
:
"debuggers"
,
"zip"
:
"
17ccd91
/node-debug.zip"
,
"zip"
:
"
c5c72bb
/node-debug.zip"
,
"output"
:
""
}
extensions/vscode-api-tests/src/commands.test.ts
浏览文件 @
b3314161
...
...
@@ -6,8 +6,7 @@
'
use strict
'
;
import
*
as
assert
from
'
assert
'
;
import
{
commands
}
from
'
vscode
'
;
import
{
join
}
from
'
path
'
;
import
{
commands
,
workspace
,
Uri
}
from
'
vscode
'
;
suite
(
"
commands namespace tests
"
,
()
=>
{
...
...
@@ -39,4 +38,21 @@ suite("commands namespace tests", () => {
done
();
},
done
);
});
});
\ No newline at end of file
test
(
'
api-command: workbench.html.preview
'
,
function
()
{
let
registration
=
workspace
.
registerTextDocumentContentProvider
(
'
speciale
'
,
{
provideTextDocumentContent
(
uri
)
{
return
`content of URI <b>
${
uri
.
toString
()}
</b>`
;
}
});
let
virtualDocumentUri
=
Uri
.
parse
(
'
speciale://authority/path
'
)
return
commands
.
executeCommand
(
'
workbench.html.preview
'
,
virtualDocumentUri
).
then
(
success
=>
{
assert
.
ok
(
success
);
registration
.
dispose
();
});
})
});
extensions/vscode-api-tests/src/workspace.test.ts
浏览文件 @
b3314161
...
...
@@ -26,9 +26,10 @@ suite('workspace-namespace', () => {
});
test
(
'
openTextDocument
'
,
()
=>
{
let
len
=
workspace
.
textDocuments
.
length
return
workspace
.
openTextDocument
(
join
(
workspace
.
rootPath
,
'
./far.js
'
)).
then
(
doc
=>
{
assert
.
ok
(
doc
);
assert
.
equal
(
workspace
.
textDocuments
.
length
,
1
);
assert
.
equal
(
workspace
.
textDocuments
.
length
,
len
+
1
);
});
});
...
...
src/vs/base/browser/ui/findinput/findInput.ts
浏览文件 @
b3314161
...
...
@@ -64,6 +64,9 @@ export class FindInput extends Widget {
private
_onKeyDown
=
this
.
_register
(
new
Emitter
<
StandardKeyboardEvent
>
());
public
onKeyDown
:
Event
<
StandardKeyboardEvent
>
=
this
.
_onKeyDown
.
event
;
private
_onInput
=
this
.
_register
(
new
Emitter
<
void
>
());
public
onInput
:
Event
<
void
>
=
this
.
_onInput
.
event
;
private
_onKeyUp
=
this
.
_register
(
new
Emitter
<
StandardKeyboardEvent
>
());
public
onKeyUp
:
Event
<
StandardKeyboardEvent
>
=
this
.
_onKeyUp
.
event
;
...
...
@@ -92,6 +95,7 @@ export class FindInput extends Widget {
this
.
onkeydown
(
this
.
inputBox
.
inputElement
,
(
e
)
=>
this
.
_onKeyDown
.
fire
(
e
));
this
.
onkeyup
(
this
.
inputBox
.
inputElement
,
(
e
)
=>
this
.
_onKeyUp
.
fire
(
e
));
this
.
oninput
(
this
.
inputBox
.
inputElement
,
(
e
)
=>
this
.
_onInput
.
fire
());
}
public
enable
():
void
{
...
...
src/vs/editor/browser/controller/keyboardHandler.ts
浏览文件 @
b3314161
...
...
@@ -20,7 +20,7 @@ import {Position} from 'vs/editor/common/core/position';
import
{
CommonKeybindings
}
from
'
vs/base/common/keyCodes
'
;
import
Event
,
{
Emitter
}
from
'
vs/base/common/event
'
;
import
{
TextAreaHandler
}
from
'
vs/editor/common/controller/textAreaHandler
'
;
import
{
ITextAreaWrapper
,
IClipboardEvent
,
IKeyboardEventWrapper
,
I
TextAreaStyle
,
I
SimpleModel
}
from
'
vs/editor/common/controller/textAreaState
'
;
import
{
ITextAreaWrapper
,
IClipboardEvent
,
IKeyboardEventWrapper
,
ISimpleModel
}
from
'
vs/editor/common/controller/textAreaState
'
;
class
ClipboardEventWrapper
implements
IClipboardEvent
{
...
...
@@ -143,6 +143,10 @@ class TextAreaWrapper extends Lifecycle.Disposable implements ITextAreaWrapper {
this
.
_register
(
DomUtils
.
addDisposableListener
(
this
.
_textArea
,
'
paste
'
,
(
e
:
ClipboardEvent
)
=>
this
.
_onPaste
.
fire
(
new
ClipboardEventWrapper
(
e
))));
}
public
get
actual
():
HTMLTextAreaElement
{
return
this
.
_textArea
;
}
public
get
value
():
string
{
return
this
.
_textArea
.
value
;
}
...
...
@@ -162,7 +166,7 @@ class TextAreaWrapper extends Lifecycle.Disposable implements ITextAreaWrapper {
public
setSelectionRange
(
selectionStart
:
number
,
selectionEnd
:
number
):
void
{
// console.log('setSelectionRange: ' + selectionStart + ', ' + selectionEnd);
try
{
var
scrollState
=
DomUtils
.
saveParentsScrollTop
(
this
.
_textArea
);
let
scrollState
=
DomUtils
.
saveParentsScrollTop
(
this
.
_textArea
);
this
.
_textArea
.
focus
();
this
.
_textArea
.
setSelectionRange
(
selectionStart
,
selectionEnd
);
DomUtils
.
restoreParentsScrollTop
(
this
.
_textArea
,
scrollState
);
...
...
@@ -172,21 +176,6 @@ class TextAreaWrapper extends Lifecycle.Disposable implements ITextAreaWrapper {
}
}
public
setStyle
(
style
:
ITextAreaStyle
):
void
{
if
(
typeof
style
.
top
!==
'
undefined
'
)
{
this
.
_textArea
.
style
.
top
=
style
.
top
;
}
if
(
typeof
style
.
left
!==
'
undefined
'
)
{
this
.
_textArea
.
style
.
left
=
style
.
left
;
}
if
(
typeof
style
.
width
!==
'
undefined
'
)
{
this
.
_textArea
.
style
.
width
=
style
.
width
;
}
if
(
typeof
style
.
height
!==
'
undefined
'
)
{
this
.
_textArea
.
style
.
height
=
style
.
height
;
}
}
public
isInOverwriteMode
():
boolean
{
// In IE, pressing Insert will bring the typing into overwrite mode
if
(
Browser
.
isIE11orEarlier
&&
document
.
queryCommandValue
(
'
OverWrite
'
))
{
...
...
@@ -204,6 +193,11 @@ export class KeyboardHandler extends ViewEventHandler implements Lifecycle.IDisp
private
viewHelper
:
EditorBrowser
.
IKeyboardHandlerHelper
;
private
textArea
:
TextAreaWrapper
;
private
textAreaHandler
:
TextAreaHandler
;
private
_toDispose
:
Lifecycle
.
IDisposable
[];
private
contentLeft
:
number
;
private
contentWidth
:
number
;
private
scrollLeft
:
number
;
constructor
(
context
:
EditorBrowser
.
IViewContext
,
viewController
:
EditorBrowser
.
IViewController
,
viewHelper
:
EditorBrowser
.
IKeyboardHandlerHelper
)
{
super
();
...
...
@@ -213,38 +207,59 @@ export class KeyboardHandler extends ViewEventHandler implements Lifecycle.IDisp
this
.
textArea
=
new
TextAreaWrapper
(
viewHelper
.
textArea
);
this
.
viewHelper
=
viewHelper
;
this
.
textAreaHandler
=
new
TextAreaHandler
(
Platform
,
Browser
,
this
.
textArea
,
{
getModel
:
():
ISimpleModel
=>
this
.
context
.
model
,
emitKeyDown
:
(
e
:
IKeyboardEventWrapper
):
void
=>
this
.
viewController
.
emitKeyDown
(
<
DomUtils
.
IKeyboardEvent
>
e
.
_actual
),
emitKeyUp
:
(
e
:
IKeyboardEventWrapper
):
void
=>
this
.
viewController
.
emitKeyUp
(
<
DomUtils
.
IKeyboardEvent
>
e
.
_actual
),
paste
:
(
source
:
string
,
txt
:
string
,
pasteOnNewLine
:
boolean
):
void
=>
this
.
viewController
.
paste
(
source
,
txt
,
pasteOnNewLine
),
type
:
(
source
:
string
,
txt
:
string
):
void
=>
this
.
viewController
.
type
(
source
,
txt
),
replacePreviousChar
:
(
source
:
string
,
txt
:
string
):
void
=>
this
.
viewController
.
replacePreviousChar
(
source
,
txt
),
cut
:
(
source
:
string
):
void
=>
this
.
viewController
.
cut
(
source
),
visibleRangeForPositionRelativeToEditor
:
(
lineNumber
:
number
,
column1
:
number
,
column2
:
number
):
{
column1
:
EditorCommon
.
VisibleRange
;
column2
:
EditorCommon
.
VisibleRange
;
}
=>
{
var
revealInterestingColumn1Event
:
EditorCommon
.
IViewRevealRangeEvent
=
{
range
:
new
Range
(
lineNumber
,
column1
,
lineNumber
,
column1
),
verticalType
:
EditorCommon
.
VerticalRevealType
.
Simple
,
revealHorizontal
:
true
};
this
.
context
.
privateViewEventBus
.
emit
(
EditorCommon
.
ViewEventNames
.
RevealRangeEvent
,
revealInterestingColumn1Event
);
// Find range pixel position
var
visibleRange1
=
this
.
viewHelper
.
visibleRangeForPositionRelativeToEditor
(
lineNumber
,
column1
);
var
visibleRange2
=
this
.
viewHelper
.
visibleRangeForPositionRelativeToEditor
(
lineNumber
,
column2
);
return
{
column1
:
visibleRange1
,
column2
:
visibleRange2
}
},
startIME
:
():
void
=>
{
DomUtils
.
addClass
(
this
.
viewHelper
.
viewDomNode
,
'
ime-input
'
);
},
stopIME
:
():
void
=>
{
DomUtils
.
removeClass
(
this
.
viewHelper
.
viewDomNode
,
'
ime-input
'
);
this
.
contentLeft
=
0
;
this
.
contentWidth
=
0
;
this
.
scrollLeft
=
0
;
this
.
textAreaHandler
=
new
TextAreaHandler
(
Platform
,
Browser
,
this
.
textArea
,
this
.
context
.
model
);
this
.
_toDispose
=
[];
this
.
_toDispose
.
push
(
this
.
textAreaHandler
.
onKeyDown
((
e
)
=>
this
.
viewController
.
emitKeyDown
(
<
DomUtils
.
IKeyboardEvent
>
e
.
_actual
)));
this
.
_toDispose
.
push
(
this
.
textAreaHandler
.
onKeyUp
((
e
)
=>
this
.
viewController
.
emitKeyUp
(
<
DomUtils
.
IKeyboardEvent
>
e
.
_actual
)));
this
.
_toDispose
.
push
(
this
.
textAreaHandler
.
onPaste
((
e
)
=>
this
.
viewController
.
paste
(
'
keyboard
'
,
e
.
text
,
e
.
pasteOnNewLine
)));
this
.
_toDispose
.
push
(
this
.
textAreaHandler
.
onCut
((
e
)
=>
this
.
viewController
.
cut
(
'
keyboard
'
)));
this
.
_toDispose
.
push
(
this
.
textAreaHandler
.
onType
((
e
)
=>
{
if
(
e
.
replacePreviousCharacter
)
{
this
.
viewController
.
replacePreviousChar
(
'
keyboard
'
,
e
.
text
);
}
else
{
this
.
viewController
.
type
(
'
keyboard
'
,
e
.
text
);
}
},
this
.
context
.
configuration
);
}));
this
.
_toDispose
.
push
(
this
.
textAreaHandler
.
onCompositionStart
((
e
)
=>
{
let
lineNumber
=
e
.
showAtLineNumber
;
let
column
=
e
.
showAtColumn
;
let
revealPositionEvent
:
EditorCommon
.
IViewRevealRangeEvent
=
{
range
:
new
Range
(
lineNumber
,
column
,
lineNumber
,
column
),
verticalType
:
EditorCommon
.
VerticalRevealType
.
Simple
,
revealHorizontal
:
true
};
this
.
context
.
privateViewEventBus
.
emit
(
EditorCommon
.
ViewEventNames
.
RevealRangeEvent
,
revealPositionEvent
);
// Find range pixel position
let
visibleRange
=
this
.
viewHelper
.
visibleRangeForPositionRelativeToEditor
(
lineNumber
,
column
);
if
(
visibleRange
)
{
this
.
textArea
.
actual
.
style
.
top
=
visibleRange
.
top
+
'
px
'
;
this
.
textArea
.
actual
.
style
.
left
=
this
.
contentLeft
+
visibleRange
.
left
-
this
.
scrollLeft
+
'
px
'
;
}
if
(
Browser
.
isIE11orEarlier
)
{
this
.
textArea
.
actual
.
style
.
width
=
this
.
contentWidth
+
'
px
'
;
}
// Show the textarea
this
.
textArea
.
actual
.
style
.
height
=
this
.
context
.
configuration
.
editor
.
lineHeight
+
'
px
'
;
DomUtils
.
addClass
(
this
.
viewHelper
.
viewDomNode
,
'
ime-input
'
);
}));
this
.
_toDispose
.
push
(
this
.
textAreaHandler
.
onCompositionEnd
((
e
)
=>
{
this
.
textArea
.
actual
.
style
.
height
=
''
;
this
.
textArea
.
actual
.
style
.
width
=
''
;
this
.
textArea
.
actual
.
style
.
left
=
'
0px
'
;
this
.
textArea
.
actual
.
style
.
top
=
'
0px
'
;
DomUtils
.
removeClass
(
this
.
viewHelper
.
viewDomNode
,
'
ime-input
'
);
}));
this
.
context
.
addEventHandler
(
this
);
}
...
...
@@ -253,10 +268,11 @@ export class KeyboardHandler extends ViewEventHandler implements Lifecycle.IDisp
this
.
context
.
removeEventHandler
(
this
);
this
.
textAreaHandler
.
dispose
();
this
.
textArea
.
dispose
();
this
.
_toDispose
=
Lifecycle
.
disposeAll
(
this
.
_toDispose
);
}
public
onScrollChanged
(
e
:
EditorCommon
.
IScrollEvent
):
boolean
{
this
.
textAreaHandler
.
setScrollLeft
(
e
.
scrollLeft
)
;
this
.
scrollLeft
=
e
.
scrollLeft
;
return
false
;
}
...
...
@@ -276,7 +292,8 @@ export class KeyboardHandler extends ViewEventHandler implements Lifecycle.IDisp
}
public
onLayoutChanged
(
layoutInfo
:
EditorCommon
.
IEditorLayoutInfo
):
boolean
{
this
.
textAreaHandler
.
setLayoutInfo
(
layoutInfo
.
contentLeft
,
layoutInfo
.
contentWidth
);
this
.
contentLeft
=
layoutInfo
.
contentLeft
;
this
.
contentWidth
=
layoutInfo
.
contentWidth
;
return
false
;
}
...
...
src/vs/editor/common/controller/textAreaHandler.ts
浏览文件 @
b3314161
此差异已折叠。
点击以展开。
src/vs/editor/common/controller/textAreaState.ts
浏览文件 @
b3314161
...
...
@@ -7,13 +7,7 @@
import
*
as
EditorCommon
from
'
vs/editor/common/editorCommon
'
;
import
{
Range
}
from
'
vs/editor/common/core/range
'
;
import
Event
from
'
vs/base/common/event
'
;
export
interface
ITextAreaStyle
{
top
:
string
;
left
:
string
;
width
:
string
;
height
:
string
;
}
import
{
commonPrefixLength
,
commonSuffixLength
}
from
'
vs/base/common/strings
'
;
export
interface
IClipboardEvent
{
canUseTextData
():
boolean
;
...
...
@@ -44,7 +38,6 @@ export interface ITextAreaWrapper {
selectionEnd
:
number
;
setSelectionRange
(
selectionStart
:
number
,
selectionEnd
:
number
):
void
;
setStyle
(
style
:
ITextAreaStyle
):
void
;
isInOverwriteMode
():
boolean
;
}
...
...
@@ -57,13 +50,18 @@ export interface ISimpleModel {
}
export
class
TextAreaState
{
public
static
EMPTY
=
new
TextAreaState
(
null
,
''
,
0
,
0
,
false
,
0
);
private
previousState
:
TextAreaState
;
private
value
:
string
;
private
selectionStart
:
number
;
private
selectionEnd
:
number
;
private
isInOverwriteMode
:
boolean
;
private
selectionToken
:
number
;
constructor
(
value
:
string
,
selectionStart
:
number
,
selectionEnd
:
number
,
isInOverwriteMode
:
boolean
,
selectionToken
:
number
)
{
constructor
(
previousState
:
TextAreaState
,
value
:
string
,
selectionStart
:
number
,
selectionEnd
:
number
,
isInOverwriteMode
:
boolean
,
selectionToken
:
number
)
{
this
.
previousState
=
previousState
?
previousState
.
shallowClone
()
:
null
;
this
.
value
=
value
;
this
.
selectionStart
=
selectionStart
;
this
.
selectionEnd
=
selectionEnd
;
...
...
@@ -71,6 +69,10 @@ export class TextAreaState {
this
.
selectionToken
=
selectionToken
;
}
private
shallowClone
():
TextAreaState
{
return
new
TextAreaState
(
null
,
this
.
value
,
this
.
selectionStart
,
this
.
selectionEnd
,
this
.
isInOverwriteMode
,
this
.
selectionToken
);
}
public
toString
():
string
{
return
'
[ <
'
+
this
.
value
+
'
>, selectionStart:
'
+
this
.
selectionStart
+
'
, selectionEnd:
'
+
this
.
selectionEnd
+
'
, isInOverwriteMode:
'
+
this
.
isInOverwriteMode
+
'
, selectionToken:
'
+
this
.
selectionToken
+
'
]
'
;
}
...
...
@@ -85,11 +87,11 @@ export class TextAreaState {
);
}
public
static
fromTextArea
(
textArea
:
ITextAreaWrapper
,
selectionToken
:
numb
er
):
TextAreaState
{
return
new
TextAreaState
(
t
extArea
.
value
,
textArea
.
selectionStart
,
textArea
.
selectionEnd
,
textArea
.
isInOverwriteMode
(),
selectionToken
);
public
fromTextArea
(
textArea
:
ITextAreaWrapp
er
):
TextAreaState
{
return
new
TextAreaState
(
t
his
,
textArea
.
value
,
textArea
.
selectionStart
,
textArea
.
selectionEnd
,
textArea
.
isInOverwriteMode
(),
this
.
selectionToken
);
}
public
static
fromEditorSelectionAndPreviousState
(
model
:
ISimpleModel
,
selection
:
EditorCommon
.
IEditorRange
,
previousSelectionToken
:
number
):
TextAreaState
{
public
fromEditorSelection
(
model
:
ISimpleModel
,
selection
:
EditorCommon
.
IEditorRange
):
TextAreaState
{
let
LIMIT_CHARS
=
100
;
let
PADDING_LINES_COUNT
=
0
;
...
...
@@ -100,7 +102,7 @@ export class TextAreaState {
selectionEndLineNumberMaxColumn
=
model
.
getLineMaxColumn
(
selectionEndLineNumber
);
// If the selection is empty and we have switched line numbers, expand selection to full line (helps Narrator trigger a full line read)
if
(
selection
.
isEmpty
()
&&
previousS
electionToken
!==
selectionStartLineNumber
)
{
if
(
selection
.
isEmpty
()
&&
this
.
s
electionToken
!==
selectionStartLineNumber
)
{
selectionStartColumn
=
1
;
selectionEndColumn
=
selectionEndLineNumberMaxColumn
;
}
...
...
@@ -135,24 +137,23 @@ export class TextAreaState {
text
=
text
.
substring
(
0
,
LIMIT_CHARS
)
+
String
.
fromCharCode
(
8230
)
+
text
.
substring
(
text
.
length
-
LIMIT_CHARS
,
text
.
length
);
}
return
new
TextAreaState
(
pretext
+
text
+
posttext
,
pretext
.
length
,
pretext
.
length
+
text
.
length
,
false
,
selectionStartLineNumber
);
return
new
TextAreaState
(
this
,
pretext
+
text
+
posttext
,
pretext
.
length
,
pretext
.
length
+
text
.
length
,
false
,
selectionStartLineNumber
);
}
public
getSelectionStart
():
number
{
return
this
.
selectionStart
;
public
fromText
(
text
:
string
):
TextAreaState
{
return
new
TextAreaState
(
this
,
text
,
0
,
text
.
length
,
false
,
0
)
}
public
resetSelection
():
void
{
this
.
selectionStart
=
this
.
value
.
length
;
this
.
selectionEnd
=
this
.
value
.
length
;
public
resetSelection
():
TextAreaState
{
return
new
TextAreaState
(
this
.
previousState
,
this
.
value
,
this
.
value
.
length
,
this
.
value
.
length
,
this
.
isInOverwriteMode
,
this
.
selectionToken
);
}
public
get
Value
():
string
{
return
this
.
value
;
public
get
SelectionStart
():
number
{
return
this
.
selectionStart
;
}
public
get
SelectionToken
():
number
{
return
this
.
selectionToken
;
public
get
Value
():
string
{
return
this
.
value
;
}
public
applyToTextArea
(
textArea
:
ITextAreaWrapper
,
select
:
boolean
):
void
{
...
...
@@ -165,7 +166,7 @@ export class TextAreaState {
}
}
public
extractNewText
(
previousState
:
TextAreaState
):
string
{
public
extractNewText
():
string
{
// console.log('-----------')
// console.log('prev:' + String(previousState));
// console.log('curr:' + String(this));
...
...
@@ -173,11 +174,11 @@ export class TextAreaState {
// There is a selection in the textarea => ignore input
return
''
;
}
if
(
!
previousState
)
{
if
(
!
this
.
previousState
)
{
return
this
.
value
;
}
let
previousPrefix
=
previousState
.
value
.
substring
(
0
,
previousState
.
selectionStart
);
let
previousSuffix
=
previousState
.
value
.
substring
(
previousState
.
selectionEnd
,
previousState
.
value
.
length
);
let
previousPrefix
=
this
.
previousState
.
value
.
substring
(
0
,
this
.
previousState
.
selectionStart
);
let
previousSuffix
=
this
.
previousState
.
value
.
substring
(
this
.
previousState
.
selectionEnd
,
this
.
previousState
.
value
.
length
);
if
(
this
.
isInOverwriteMode
)
{
previousSuffix
=
previousSuffix
.
substr
(
1
);
...
...
@@ -192,4 +193,26 @@ export class TextAreaState {
}
return
value
;
}
public
extractMacReplacedText
():
string
{
// Ignore if the textarea has selection
if
(
this
.
selectionStart
!==
this
.
selectionEnd
)
{
return
''
;
}
if
(
!
this
.
previousState
)
{
return
''
;
}
if
(
this
.
previousState
.
value
.
length
!==
this
.
value
.
length
)
{
return
''
;
}
let
prefixLength
=
commonPrefixLength
(
this
.
previousState
.
value
,
this
.
value
);
let
suffixLength
=
commonSuffixLength
(
this
.
previousState
.
value
,
this
.
value
);
if
(
prefixLength
+
suffixLength
+
1
!==
this
.
value
.
length
)
{
return
''
;
}
return
this
.
value
.
charAt
(
prefixLength
);
}
}
src/vs/editor/contrib/find/browser/findWidget.ts
浏览文件 @
b3314161
...
...
@@ -316,11 +316,6 @@ export class FindWidget extends Widget implements EditorBrowser.IOverlayWidget {
e
.
preventDefault
();
return
;
}
// getValue() is not updated right away
setTimeout
(()
=>
{
this
.
_state
.
change
({
searchString
:
this
.
_findInput
.
getValue
()
},
true
);
},
10
);
}
private
_onReplaceInputKeyDown
(
e
:
DomUtils
.
IKeyboardEvent
):
void
{
...
...
@@ -351,10 +346,6 @@ export class FindWidget extends Widget implements EditorBrowser.IOverlayWidget {
e
.
preventDefault
();
return
;
}
setTimeout
(()
=>
{
this
.
_state
.
change
({
replaceString
:
this
.
_replaceInputBox
.
value
},
false
);
},
10
);
}
// ----- initialization
...
...
@@ -392,6 +383,9 @@ export class FindWidget extends Widget implements EditorBrowser.IOverlayWidget {
}
}));
this
.
_register
(
this
.
_findInput
.
onKeyDown
((
e
)
=>
this
.
_onFindInputKeyDown
(
e
)));
this
.
_register
(
this
.
_findInput
.
onInput
(()
=>
{
this
.
_state
.
change
({
searchString
:
this
.
_findInput
.
getValue
()
},
true
);
}));
this
.
_register
(
this
.
_findInput
.
onDidOptionChange
(()
=>
{
this
.
_state
.
change
({
isRegex
:
this
.
_findInput
.
getRegex
(),
...
...
@@ -484,6 +478,9 @@ export class FindWidget extends Widget implements EditorBrowser.IOverlayWidget {
}));
this
.
_register
(
DomUtils
.
addStandardDisposableListener
(
this
.
_replaceInputBox
.
inputElement
,
'
keydown
'
,
(
e
)
=>
this
.
_onReplaceInputKeyDown
(
e
)));
this
.
_register
(
DomUtils
.
addStandardDisposableListener
(
this
.
_replaceInputBox
.
inputElement
,
'
input
'
,
(
e
)
=>
{
this
.
_state
.
change
({
replaceString
:
this
.
_replaceInputBox
.
value
},
false
);
}));
// Replace one button
this
.
_replaceBtn
=
this
.
_register
(
new
SimpleButton
({
...
...
src/vs/editor/test/common/controller/textAreaState.test.ts
浏览文件 @
b3314161
...
...
@@ -14,7 +14,7 @@ import {MockTextAreaWrapper} from 'vs/editor/test/common/mocks/mockTextAreaWrapp
suite
(
'
TextAreaState
'
,
()
=>
{
function
assertTextAreaState
(
actual
:
TextAreaState
,
value
:
string
,
selectionStart
:
number
,
selectionEnd
:
number
,
isInOverwriteMode
:
boolean
,
selectionToken
:
number
):
void
{
let
desired
=
new
TextAreaState
(
value
,
selectionStart
,
selectionEnd
,
isInOverwriteMode
,
selectionToken
);
let
desired
=
new
TextAreaState
(
null
,
value
,
selectionStart
,
selectionEnd
,
isInOverwriteMode
,
selectionToken
);
assert
.
ok
(
desired
.
equals
(
actual
),
desired
.
toString
()
+
'
==
'
+
actual
.
toString
());
}
...
...
@@ -24,15 +24,14 @@ suite('TextAreaState', () => {
textArea
.
_selectionStart
=
1
;
textArea
.
_selectionEnd
=
12
;
textArea
.
_isInOverwriteMode
=
false
;
let
actual
=
TextAreaState
.
fromTextArea
(
textArea
,
3
);
let
actual
=
TextAreaState
.
EMPTY
.
fromTextArea
(
textArea
);
assertTextAreaState
(
actual
,
'
Hello world!
'
,
1
,
12
,
false
,
3
);
assertTextAreaState
(
actual
,
'
Hello world!
'
,
1
,
12
,
false
,
0
);
assert
.
equal
(
actual
.
getValue
(),
'
Hello world!
'
);
assert
.
equal
(
actual
.
getSelectionStart
(),
1
);
assert
.
equal
(
actual
.
getSelectionToken
(),
3
);
actual
.
resetSelection
();
assertTextAreaState
(
actual
,
'
Hello world!
'
,
12
,
12
,
false
,
3
);
actual
=
actual
.
resetSelection
();
assertTextAreaState
(
actual
,
'
Hello world!
'
,
12
,
12
,
false
,
0
);
textArea
.
dispose
();
});
...
...
@@ -44,21 +43,21 @@ suite('TextAreaState', () => {
textArea
.
_selectionEnd
=
12
;
textArea
.
_isInOverwriteMode
=
false
;
let
state
=
new
TextAreaState
(
'
Hi world!
'
,
2
,
2
,
false
,
0
);
let
state
=
new
TextAreaState
(
null
,
'
Hi world!
'
,
2
,
2
,
false
,
0
);
state
.
applyToTextArea
(
textArea
,
false
);
assert
.
equal
(
textArea
.
_value
,
'
Hi world!
'
);
assert
.
equal
(
textArea
.
_selectionStart
,
9
);
assert
.
equal
(
textArea
.
_selectionEnd
,
9
);
state
=
new
TextAreaState
(
'
Hi world!
'
,
3
,
3
,
false
,
0
);
state
=
new
TextAreaState
(
null
,
'
Hi world!
'
,
3
,
3
,
false
,
0
);
state
.
applyToTextArea
(
textArea
,
false
);
assert
.
equal
(
textArea
.
_value
,
'
Hi world!
'
);
assert
.
equal
(
textArea
.
_selectionStart
,
9
);
assert
.
equal
(
textArea
.
_selectionEnd
,
9
);
state
=
new
TextAreaState
(
'
Hi world!
'
,
0
,
2
,
false
,
0
);
state
=
new
TextAreaState
(
null
,
'
Hi world!
'
,
0
,
2
,
false
,
0
);
state
.
applyToTextArea
(
textArea
,
true
);
assert
.
equal
(
textArea
.
_value
,
'
Hi world!
'
);
...
...
@@ -75,9 +74,9 @@ suite('TextAreaState', () => {
textArea
.
_selectionEnd
=
selectionEnd
;
textArea
.
_isInOverwriteMode
=
isInOverwriteMode
;
let
newState
=
TextAreaState
.
fromTextArea
(
textArea
,
prevState
?
prevState
.
getSelectionToken
()
:
0
);
let
newState
=
(
prevState
||
TextAreaState
.
EMPTY
).
fromTextArea
(
textArea
);
let
actual
=
newState
.
extractNewText
(
prevState
);
let
actual
=
newState
.
extractNewText
();
assert
.
equal
(
actual
,
expected
);
...
...
@@ -104,7 +103,7 @@ suite('TextAreaState', () => {
test
(
'
extractNewText - typing does not cause a selection
'
,
()
=>
{
testExtractNewText
(
new
TextAreaState
(
''
,
0
,
0
,
false
,
0
),
new
TextAreaState
(
null
,
''
,
0
,
0
,
false
,
0
),
'
a
'
,
0
,
1
,
false
,
''
...
...
@@ -113,7 +112,7 @@ suite('TextAreaState', () => {
test
(
'
extractNewText - had the textarea empty
'
,
()
=>
{
testExtractNewText
(
new
TextAreaState
(
''
,
0
,
0
,
false
,
0
),
new
TextAreaState
(
null
,
''
,
0
,
0
,
false
,
0
),
'
a
'
,
1
,
1
,
false
,
'
a
'
...
...
@@ -122,7 +121,7 @@ suite('TextAreaState', () => {
test
(
'
extractNewText - had the entire line selected
'
,
()
=>
{
testExtractNewText
(
new
TextAreaState
(
'
Hello world!
'
,
0
,
12
,
false
,
0
),
new
TextAreaState
(
null
,
'
Hello world!
'
,
0
,
12
,
false
,
0
),
'
H
'
,
1
,
1
,
false
,
'
H
'
...
...
@@ -131,7 +130,7 @@ suite('TextAreaState', () => {
test
(
'
extractNewText - had previous text 1
'
,
()
=>
{
testExtractNewText
(
new
TextAreaState
(
'
Hello world!
'
,
12
,
12
,
false
,
0
),
new
TextAreaState
(
null
,
'
Hello world!
'
,
12
,
12
,
false
,
0
),
'
Hello world!a
'
,
13
,
13
,
false
,
'
a
'
...
...
@@ -140,7 +139,7 @@ suite('TextAreaState', () => {
test
(
'
extractNewText - had previous text 2
'
,
()
=>
{
testExtractNewText
(
new
TextAreaState
(
'
Hello world!
'
,
0
,
0
,
false
,
0
),
new
TextAreaState
(
null
,
'
Hello world!
'
,
0
,
0
,
false
,
0
),
'
aHello world!
'
,
1
,
1
,
false
,
'
a
'
...
...
@@ -149,7 +148,7 @@ suite('TextAreaState', () => {
test
(
'
extractNewText - had previous text 3
'
,
()
=>
{
testExtractNewText
(
new
TextAreaState
(
'
Hello world!
'
,
6
,
11
,
false
,
0
),
new
TextAreaState
(
null
,
'
Hello world!
'
,
6
,
11
,
false
,
0
),
'
Hello other!
'
,
11
,
11
,
false
,
'
other
'
...
...
@@ -158,7 +157,7 @@ suite('TextAreaState', () => {
test
(
'
extractNewText - IME
'
,
()
=>
{
testExtractNewText
(
new
TextAreaState
(
''
,
0
,
0
,
false
,
0
),
new
TextAreaState
(
null
,
''
,
0
,
0
,
false
,
0
),
'
これは
'
,
3
,
3
,
false
,
'
これは
'
...
...
@@ -167,16 +166,69 @@ suite('TextAreaState', () => {
test
(
'
extractNewText - isInOverwriteMode
'
,
()
=>
{
testExtractNewText
(
new
TextAreaState
(
'
Hello world!
'
,
0
,
0
,
false
,
0
),
new
TextAreaState
(
null
,
'
Hello world!
'
,
0
,
0
,
false
,
0
),
'
Aello world!
'
,
1
,
1
,
true
,
'
A
'
);
});
function
testExtractMacReplacedText
(
prevState
:
TextAreaState
,
value
:
string
,
selectionStart
:
number
,
selectionEnd
:
number
,
isInOverwriteMode
:
boolean
,
expected
:
string
):
void
{
let
textArea
=
new
MockTextAreaWrapper
();
textArea
.
_value
=
value
;
textArea
.
_selectionStart
=
selectionStart
;
textArea
.
_selectionEnd
=
selectionEnd
;
textArea
.
_isInOverwriteMode
=
isInOverwriteMode
;
let
newState
=
(
prevState
||
TextAreaState
.
EMPTY
).
fromTextArea
(
textArea
);
let
actual
=
newState
.
extractMacReplacedText
();
assert
.
equal
(
actual
,
expected
);
textArea
.
dispose
();
}
test
(
'
extractMacReplacedText - does nothing if there is selection
'
,
()
=>
{
testExtractMacReplacedText
(
new
TextAreaState
(
null
,
'
Hello world!
'
,
0
,
0
,
false
,
0
),
'
Hellö world!
'
,
4
,
5
,
false
,
''
);
});
test
(
'
extractMacReplacedText - does nothing if there is more than one extra char
'
,
()
=>
{
testExtractMacReplacedText
(
new
TextAreaState
(
null
,
'
Hello world!
'
,
0
,
0
,
false
,
0
),
'
Hellöö world!
'
,
6
,
6
,
false
,
''
);
});
test
(
'
extractMacReplacedText - does nothing if there is more than one changed char
'
,
()
=>
{
testExtractMacReplacedText
(
new
TextAreaState
(
null
,
'
Hello world!
'
,
0
,
0
,
false
,
0
),
'
Helöö world!
'
,
6
,
6
,
false
,
''
);
});
test
(
'
extractMacReplacedText
'
,
()
=>
{
testExtractMacReplacedText
(
new
TextAreaState
(
null
,
'
Hello world!
'
,
0
,
0
,
false
,
0
),
'
Hellö world!
'
,
5
,
5
,
false
,
'
ö
'
);
});
function
testFromEditorSelectionAndPreviousState
(
eol
:
string
,
lines
:
string
[],
range
:
Range
,
prevSelectionToken
:
number
):
TextAreaState
{
let
model
=
new
SimpleModel
(
lines
,
eol
);
return
TextAreaState
.
fromEditorSelectionAndPreviousState
(
model
,
range
,
prevSelectionToken
);
let
previousState
=
new
TextAreaState
(
null
,
''
,
0
,
0
,
false
,
prevSelectionToken
);
return
previousState
.
fromEditorSelection
(
model
,
range
);
}
test
(
'
fromEditorSelectionAndPreviousState - no selection on first line
'
,
()
=>
{
...
...
src/vs/editor/test/common/mocks/mockTextAreaWrapper.ts
浏览文件 @
b3314161
...
...
@@ -4,7 +4,7 @@
*--------------------------------------------------------------------------------------------*/
'
use strict
'
;
import
{
ITextAreaWrapper
,
IClipboardEvent
,
IKeyboardEventWrapper
,
ITextAreaStyle
}
from
'
vs/editor/common/controller/textAreaState
'
;
import
{
ITextAreaWrapper
,
IClipboardEvent
,
IKeyboardEventWrapper
}
from
'
vs/editor/common/controller/textAreaState
'
;
import
Event
,
{
Emitter
}
from
'
vs/base/common/event
'
;
import
{
Disposable
}
from
'
vs/base/common/lifecycle
'
;
...
...
@@ -40,7 +40,6 @@ export class MockTextAreaWrapper extends Disposable implements ITextAreaWrapper
public
_value
:
string
;
public
_selectionStart
:
number
;
public
_selectionEnd
:
number
;
public
_lastSetStyle
:
ITextAreaStyle
;
public
_isInOverwriteMode
:
boolean
;
constructor
()
{
...
...
@@ -48,7 +47,6 @@ export class MockTextAreaWrapper extends Disposable implements ITextAreaWrapper
this
.
_value
=
''
;
this
.
_selectionStart
=
0
;
this
.
_selectionEnd
=
0
;
this
.
_lastSetStyle
=
null
;
this
.
_isInOverwriteMode
=
false
;
}
...
...
@@ -87,10 +85,6 @@ export class MockTextAreaWrapper extends Disposable implements ITextAreaWrapper
this
.
_selectionEnd
=
selectionEnd
;
}
public
setStyle
(
style
:
ITextAreaStyle
):
void
{
this
.
_lastSetStyle
=
style
;
}
public
isInOverwriteMode
():
boolean
{
return
this
.
_isInOverwriteMode
;
}
...
...
src/vs/workbench/browser/viewlet.ts
浏览文件 @
b3314161
...
...
@@ -527,6 +527,8 @@ export class AdaptiveCollapsibleViewletView extends FixedCollapsibleView impleme
protected
actionRunner
:
IActionRunner
;
protected
isDisposed
:
boolean
;
private
dragHandler
:
DelayedDragHandler
constructor
(
actionRunner
:
IActionRunner
,
initialBodySize
:
number
,
...
...
@@ -560,7 +562,7 @@ export class AdaptiveCollapsibleViewletView extends FixedCollapsibleView impleme
this
.
toolBar
.
setActions
(
prepareActions
(
this
.
getActions
()),
prepareActions
(
this
.
getSecondaryActions
()))();
// Expand on drag over
new
DelayedDragHandler
(
container
,
()
=>
{
this
.
dragHandler
=
new
DelayedDragHandler
(
container
,
()
=>
{
if
(
!
this
.
isExpanded
())
{
this
.
expand
();
}
...
...
@@ -629,6 +631,8 @@ export class AdaptiveCollapsibleViewletView extends FixedCollapsibleView impleme
this
.
treeContainer
=
null
;
this
.
tree
.
dispose
();
this
.
dragHandler
.
dispose
();
this
.
toDispose
=
disposeAll
(
this
.
toDispose
);
if
(
this
.
toolBar
)
{
...
...
@@ -648,6 +652,8 @@ export class CollapsibleViewletView extends CollapsibleView implements IViewletV
protected
actionRunner
:
IActionRunner
;
protected
isDisposed
:
boolean
;
private
dragHandler
:
DelayedDragHandler
;
constructor
(
actionRunner
:
IActionRunner
,
collapsed
:
boolean
,
...
...
@@ -679,7 +685,7 @@ export class CollapsibleViewletView extends CollapsibleView implements IViewletV
this
.
toolBar
.
setActions
(
prepareActions
(
this
.
getActions
()),
prepareActions
(
this
.
getSecondaryActions
()))();
// Expand on drag over
new
DelayedDragHandler
(
container
,
()
=>
{
this
.
dragHandler
=
new
DelayedDragHandler
(
container
,
()
=>
{
if
(
!
this
.
isExpanded
())
{
this
.
expand
();
}
...
...
@@ -747,6 +753,8 @@ export class CollapsibleViewletView extends CollapsibleView implements IViewletV
this
.
isDisposed
=
true
;
this
.
treeContainer
=
null
;
this
.
tree
.
dispose
();
this
.
dragHandler
.
dispose
();
this
.
toDispose
=
disposeAll
(
this
.
toDispose
);
...
...
src/vs/workbench/parts/debug/node/rawDebugSession.ts
浏览文件 @
b3314161
...
...
@@ -174,7 +174,7 @@ export class RawDebugSession extends v8.V8Protocol implements debug.IRawDebugSes
private
connectServer
(
port
:
number
):
Promise
{
return
new
Promise
((
c
,
e
)
=>
{
this
.
socket
=
net
.
createConnection
(
port
,
null
,
()
=>
{
this
.
socket
=
net
.
createConnection
(
port
,
'
127.0.0.1
'
,
()
=>
{
this
.
connect
(
this
.
socket
,
<
any
>
this
.
socket
);
c
(
null
);
});
...
...
src/vs/workbench/parts/search/browser/searchViewlet.ts
浏览文件 @
b3314161
...
...
@@ -987,7 +987,7 @@ export class SearchViewlet extends Viewlet {
public
layout
(
dimension
:
Dimension
):
void
{
this
.
size
=
dimension
;
Promise
.
timeout
(
10
).
done
(()
=>
{
this
.
reLayout
();
},
errors
.
onUnexpectedError
);
this
.
reLayout
(
);
}
public
getControl
():
ITree
{
...
...
src/vs/workbench/test/browser/servicesTestUtils.ts
浏览文件 @
b3314161
...
...
@@ -447,7 +447,9 @@ export class TestQuickOpenService implements QuickOpenService.IQuickOpenService
}
show
(
prefix
?:
string
,
quickNavigateConfiguration
?:
any
):
Promise
{
this
.
callback
&&
this
.
callback
(
prefix
);
if
(
this
.
callback
)
{
this
.
callback
(
prefix
);
}
return
Promise
.
as
(
true
);
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录