Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xxadev
vscode
提交
b233d909
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,发现更多精彩内容 >>
提交
b233d909
编写于
2月 25, 2016
作者:
A
Alex Dima
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Fixes #3463
上级
7e96c99d
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
66 addition
and
36 deletion
+66
-36
src/vs/editor/common/controller/oneCursor.ts
src/vs/editor/common/controller/oneCursor.ts
+45
-36
src/vs/editor/test/common/controller/cursor.test.ts
src/vs/editor/test/common/controller/cursor.test.ts
+21
-0
未找到文件。
src/vs/editor/common/controller/oneCursor.ts
浏览文件 @
b233d909
...
...
@@ -78,6 +78,26 @@ export interface IFindWordResult extends editorCommon.IWordRange {
wordType
:
WordType
;
}
export
enum
WordType
{
None
=
0
,
Regular
=
1
,
Separator
=
2
};
enum
CharacterClass
{
Regular
=
0
,
Whitespace
=
1
,
WordSeparator
=
2
};
const
CH_REGULAR
=
CharacterClass
.
Regular
;
const
CH_WHITESPACE
=
CharacterClass
.
Whitespace
;
const
CH_WORD_SEPARATOR
=
CharacterClass
.
WordSeparator
;
const
W_NONE
=
WordType
.
None
;
const
W_REGULAR
=
WordType
.
Regular
;
const
W_SEPARATOR
=
WordType
.
Separator
;
export
class
OneCursor
{
// --- contextual state
...
...
@@ -476,6 +496,9 @@ export class OneCursor {
public
getColumnAtEndOfLine
(
lineNumber
:
number
,
column
:
number
):
number
{
return
this
.
helper
.
getColumnAtEndOfLine
(
this
.
model
,
lineNumber
,
column
);
}
public
getVisibleColumnFromColumn
(
lineNumber
:
number
,
column
:
number
):
number
{
return
this
.
helper
.
visibleColumnFromColumn
(
this
.
model
,
lineNumber
,
column
);
}
// -- view
public
getViewLineCount
():
number
{
...
...
@@ -1337,20 +1360,22 @@ export class OneCursorOp {
}
public
static
tab
(
cursor
:
OneCursor
,
ctx
:
IOneCursorOperationContext
):
boolean
{
var
selection
=
cursor
.
getSelection
();
let
selection
=
cursor
.
getSelection
();
if
(
selection
.
isEmpty
())
{
var
typeText
=
''
;
let
typeText
=
''
;
if
(
cursor
.
model
.
getLineMaxColumn
(
selection
.
startLineNumber
)
===
1
)
{
// Line is empty => indent straight to the right place
typeText
=
cursor
.
configuration
.
normalizeIndentation
(
this
.
_goodIndentForLine
(
cursor
,
selection
.
startLineNumber
));
}
else
{
var
position
=
cursor
.
getPosition
();
let
position
=
cursor
.
getPosition
();
if
(
cursor
.
configuration
.
getIndentationOptions
().
insertSpaces
)
{
var
nextTabColumn
=
CursorMoveHelper
.
nextTabColumn
(
position
.
column
-
1
,
cursor
.
configuration
.
getIndentationOptions
().
tabSize
);
for
(
var
i
=
position
.
column
;
i
<=
nextTabColumn
;
i
++
)
{
let
visibleColumnFromColumn
=
cursor
.
getVisibleColumnFromColumn
(
position
.
lineNumber
,
position
.
column
);
let
tabSize
=
cursor
.
configuration
.
getIndentationOptions
().
tabSize
;
let
spacesCnt
=
tabSize
-
(
visibleColumnFromColumn
%
tabSize
);
for
(
let
i
=
0
;
i
<
spacesCnt
;
i
++
)
{
typeText
+=
'
'
;
}
}
else
{
...
...
@@ -1786,19 +1811,23 @@ class CursorHelper {
return
this
.
moveHelper
.
getColumnAtEndOfLine
(
model
,
lineNumber
,
column
);
}
/**
* ATTENTION: This works with 0-based columns (as oposed to the regular 1-based columns)
*/
public
nextTabColumn
(
column
:
number
):
number
{
return
CursorMoveHelper
.
nextTabColumn
(
column
,
this
.
configuration
.
getIndentationOptions
().
tabSize
);
public
visibleColumnFromColumn
(
model
:
ICursorMoveHelperModel
,
lineNumber
:
number
,
column
:
number
):
number
{
return
this
.
moveHelper
.
visibleColumnFromColumn
(
model
,
lineNumber
,
column
);
}
/**
* ATTENTION: This works with 0-based columns (as oposed to the regular 1-based columns)
*/
public
prevTabColumn
(
column
:
number
):
number
{
return
CursorMoveHelper
.
prevTabColumn
(
column
,
this
.
configuration
.
getIndentationOptions
().
tabSize
);
}
// /**
// * ATTENTION: This works with 0-based columns (as oposed to the regular 1-based columns)
// */
// public nextTabColumn(column:number): number {
// return CursorMoveHelper.nextTabColumn(column, this.configuration.getIndentationOptions().tabSize);
// }
// /**
// * ATTENTION: This works with 0-based columns (as oposed to the regular 1-based columns)
// */
// public prevTabColumn(column:number): number {
// return CursorMoveHelper.prevTabColumn(column, this.configuration.getIndentationOptions().tabSize);
// }
// public findWord(position:editorCommon.IEditorPosition, preference:string, skipSyntaxTokens:boolean=false): editorCommon.IWordRange {
// var words = this.model.getWords(position.lineNumber);
...
...
@@ -1955,26 +1984,6 @@ class CursorHelper {
}
}
export
enum
WordType
{
None
=
0
,
Regular
=
1
,
Separator
=
2
};
enum
CharacterClass
{
Regular
=
0
,
Whitespace
=
1
,
WordSeparator
=
2
};
const
CH_REGULAR
=
CharacterClass
.
Regular
;
const
CH_WHITESPACE
=
CharacterClass
.
Whitespace
;
const
CH_WORD_SEPARATOR
=
CharacterClass
.
WordSeparator
;
const
W_NONE
=
WordType
.
None
;
const
W_REGULAR
=
WordType
.
Regular
;
const
W_SEPARATOR
=
WordType
.
Separator
;
function
once
<
T
,
R
>
(
keyFn
:(
input
:
T
)
=>
string
,
computeFn
:(
input
:
T
)
=>
R
):(
input
:
T
)
=>
R
{
let
cache
:
{[
key
:
string
]:
R
;}
=
{};
return
(
input
:
T
):
R
=>
{
...
...
src/vs/editor/test/common/controller/cursor.test.ts
浏览文件 @
b233d909
...
...
@@ -1131,6 +1131,27 @@ suite('Editor Controller - Regression tests', () => {
});
});
test
(
'
issue #3463: pressing tab adds spaces, but not as many as for a tab
'
,
()
=>
{
usingCursor
({
text
:
[
'
function a() {
'
,
'
\t
var a = {
'
,
'
\t\t
x: 3
'
,
'
\t
};
'
,
'
}
'
,
],
mode
:
null
,
config
:
{
insertSpaces
:
true
,
tabSize
:
4
}
},
(
model
,
cursor
)
=>
{
moveTo
(
cursor
,
3
,
2
,
false
);
cursorCommand
(
cursor
,
H
.
Tab
);
assert
.
equal
(
model
.
getLineContent
(
3
),
'
\t
\t
x: 3
'
);
});
});
test
(
'
issue #832: deleteWordLeft
'
,
()
=>
{
usingCursor
({
text
:
[
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录