Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xxadev
vscode
提交
37a7ec0e
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,发现更多精彩内容 >>
提交
37a7ec0e
编写于
5月 15, 2020
作者:
I
isidor
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
editor: introduce anchor selection
上级
4b60ba1f
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
182 addition
and
0 deletion
+182
-0
src/vs/editor/contrib/anchorSelect/anchorSelect.css
src/vs/editor/contrib/anchorSelect/anchorSelect.css
+9
-0
src/vs/editor/contrib/anchorSelect/anchorSelect.ts
src/vs/editor/contrib/anchorSelect/anchorSelect.ts
+172
-0
src/vs/editor/editor.all.ts
src/vs/editor/editor.all.ts
+1
-0
未找到文件。
src/vs/editor/contrib/anchorSelect/anchorSelect.css
0 → 100644
浏览文件 @
37a7ec0e
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
.monaco-editor
.selection-anchor
{
background-color
:
#007ACC
;
width
:
2px
!important
;
}
src/vs/editor/contrib/anchorSelect/anchorSelect.ts
0 → 100644
浏览文件 @
37a7ec0e
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import
'
vs/css!./anchorSelect
'
;
import
{
EditorAction
,
ServicesAccessor
,
registerEditorAction
,
registerEditorContribution
}
from
'
vs/editor/browser/editorExtensions
'
;
import
{
localize
}
from
'
vs/nls
'
;
import
{
EditorContextKeys
}
from
'
vs/editor/common/editorContextKeys
'
;
import
{
Selection
}
from
'
vs/editor/common/core/selection
'
;
import
{
KeyMod
,
KeyCode
,
KeyChord
}
from
'
vs/base/common/keyCodes
'
;
import
{
KeybindingWeight
}
from
'
vs/platform/keybinding/common/keybindingsRegistry
'
;
import
{
ICodeEditor
}
from
'
vs/editor/browser/editorBrowser
'
;
import
{
RawContextKey
,
IContextKeyService
,
IContextKey
}
from
'
vs/platform/contextkey/common/contextkey
'
;
import
{
IEditorContribution
}
from
'
vs/editor/common/editorCommon
'
;
import
{
TrackedRangeStickiness
}
from
'
vs/editor/common/model
'
;
import
{
MarkdownString
}
from
'
vs/base/common/htmlContent
'
;
export
const
SelectionAnchorSet
=
new
RawContextKey
(
'
selectionAnchorSet
'
,
false
);
class
SelectionAnchorController
implements
IEditorContribution
{
public
static
readonly
ID
=
'
editor.contrib.selectionAnchorController
'
;
static
get
(
editor
:
ICodeEditor
):
SelectionAnchorController
{
return
editor
.
getContribution
<
SelectionAnchorController
>
(
SelectionAnchorController
.
ID
);
}
private
decorationId
:
string
|
undefined
;
private
selectionAnchorSetContextKey
:
IContextKey
<
boolean
>
;
constructor
(
private
editor
:
ICodeEditor
,
@
IContextKeyService
contextKeyService
:
IContextKeyService
)
{
this
.
selectionAnchorSetContextKey
=
SelectionAnchorSet
.
bindTo
(
contextKeyService
);
}
setSelectionAnchor
():
void
{
if
(
this
.
editor
.
hasModel
())
{
const
position
=
this
.
editor
.
getPosition
();
const
previousDecorations
=
this
.
decorationId
?
[
this
.
decorationId
]
:
[];
const
newDecorationId
=
this
.
editor
.
deltaDecorations
(
previousDecorations
,
[{
range
:
Selection
.
fromPositions
(
position
,
position
),
options
:
{
stickiness
:
TrackedRangeStickiness
.
NeverGrowsWhenTypingAtEdges
,
hoverMessage
:
new
MarkdownString
().
appendText
(
localize
(
'
selectionAnchor
'
,
"
Selection Anchor
"
)),
className
:
'
selection-anchor
'
}
}]);
this
.
decorationId
=
newDecorationId
.
length
===
1
?
newDecorationId
[
0
]
:
undefined
;
this
.
selectionAnchorSetContextKey
.
set
(
!!
this
.
decorationId
);
}
}
goToSelectionAnchor
():
void
{
if
(
this
.
editor
.
hasModel
()
&&
this
.
decorationId
)
{
const
anchorPosition
=
this
.
editor
.
getModel
().
getDecorationRange
(
this
.
decorationId
);
if
(
anchorPosition
)
{
this
.
editor
.
setPosition
(
anchorPosition
.
getStartPosition
());
}
}
}
selectFromAnchorToCursor
():
void
{
if
(
this
.
editor
.
hasModel
()
&&
this
.
decorationId
)
{
const
start
=
this
.
editor
.
getModel
().
getDecorationRange
(
this
.
decorationId
);
if
(
start
)
{
const
end
=
this
.
editor
.
getPosition
();
this
.
editor
.
setSelection
(
Selection
.
fromPositions
(
start
.
getStartPosition
(),
end
));
this
.
cancelSelectionAnchor
();
}
}
}
cancelSelectionAnchor
():
void
{
if
(
this
.
decorationId
)
{
this
.
editor
.
deltaDecorations
([
this
.
decorationId
],
[]);
this
.
decorationId
=
undefined
;
this
.
selectionAnchorSetContextKey
.
set
(
false
);
}
}
dispose
():
void
{
this
.
cancelSelectionAnchor
();
}
}
class
SetSelectionAnchor
extends
EditorAction
{
constructor
()
{
super
({
id
:
'
editor.action.setSelectionAnchor
'
,
label
:
localize
(
'
setSelectionAnchor
'
,
"
Set Selection Anchor
"
),
alias
:
'
Set Selection Anchor
'
,
precondition
:
undefined
,
kbOpts
:
{
kbExpr
:
EditorContextKeys
.
editorTextFocus
,
primary
:
KeyChord
(
KeyMod
.
CtrlCmd
|
KeyCode
.
KEY_K
,
KeyCode
.
KEY_B
),
weight
:
KeybindingWeight
.
EditorContrib
}
});
}
async
run
(
_accessor
:
ServicesAccessor
,
editor
:
ICodeEditor
):
Promise
<
void
>
{
const
controller
=
SelectionAnchorController
.
get
(
editor
);
controller
.
setSelectionAnchor
();
}
}
class
GoToSelectionAnchor
extends
EditorAction
{
constructor
()
{
super
({
id
:
'
editor.action.goToSelectionAnchor
'
,
label
:
localize
(
'
goToSelectionAnchor
'
,
"
Go to Selection Anchor
"
),
alias
:
'
Go to Selection Anchor
'
,
precondition
:
SelectionAnchorSet
,
});
}
async
run
(
_accessor
:
ServicesAccessor
,
editor
:
ICodeEditor
):
Promise
<
void
>
{
const
controller
=
SelectionAnchorController
.
get
(
editor
);
controller
.
goToSelectionAnchor
();
}
}
class
SelectFromAnchorToCursor
extends
EditorAction
{
constructor
()
{
super
({
id
:
'
editor.action.selectFromAnchorToCursor
'
,
label
:
localize
(
'
selectFromAnchorToCursor
'
,
"
Select from Anchor to Cursor
"
),
alias
:
'
Select from Anchor to Cursor
'
,
precondition
:
SelectionAnchorSet
,
kbOpts
:
{
kbExpr
:
EditorContextKeys
.
editorTextFocus
,
primary
:
KeyChord
(
KeyMod
.
CtrlCmd
|
KeyCode
.
KEY_K
,
KeyCode
.
KEY_K
),
weight
:
KeybindingWeight
.
EditorContrib
}
});
}
async
run
(
_accessor
:
ServicesAccessor
,
editor
:
ICodeEditor
):
Promise
<
void
>
{
const
controller
=
SelectionAnchorController
.
get
(
editor
);
controller
.
selectFromAnchorToCursor
();
}
}
class
CancelSelectionAnchor
extends
EditorAction
{
constructor
()
{
super
({
id
:
'
editor.action.cancelSelectionAnchor
'
,
label
:
localize
(
'
cancelSelectionAnchor
'
,
"
Cancel Selection Anchor
"
),
alias
:
'
Cancel Selection Anchor
'
,
precondition
:
SelectionAnchorSet
,
kbOpts
:
{
kbExpr
:
EditorContextKeys
.
editorTextFocus
,
primary
:
KeyCode
.
Escape
,
weight
:
KeybindingWeight
.
EditorContrib
}
});
}
async
run
(
_accessor
:
ServicesAccessor
,
editor
:
ICodeEditor
):
Promise
<
void
>
{
const
controller
=
SelectionAnchorController
.
get
(
editor
);
controller
.
cancelSelectionAnchor
();
}
}
registerEditorContribution
(
SelectionAnchorController
.
ID
,
SelectionAnchorController
);
registerEditorAction
(
SetSelectionAnchor
);
registerEditorAction
(
GoToSelectionAnchor
);
registerEditorAction
(
SelectFromAnchorToCursor
);
registerEditorAction
(
CancelSelectionAnchor
);
src/vs/editor/editor.all.ts
浏览文件 @
37a7ec0e
...
...
@@ -45,6 +45,7 @@ import 'vs/editor/contrib/viewportSemanticTokens/viewportSemanticTokens';
import
'
vs/editor/contrib/wordHighlighter/wordHighlighter
'
;
import
'
vs/editor/contrib/wordOperations/wordOperations
'
;
import
'
vs/editor/contrib/wordPartOperations/wordPartOperations
'
;
import
'
vs/editor/contrib/anchorSelect/anchorSelect
'
;
// Load up these strings even in VSCode, even if they are not used
// in order to get them translated
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录