Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xxadev
vscode
提交
c8a6ce93
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,发现更多精彩内容 >>
提交
c8a6ce93
编写于
4月 03, 2018
作者:
R
Rob Lourens
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Fix #42120 - Implement Copy
上级
1dcb420e
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
77 addition
and
7 deletion
+77
-7
src/vs/workbench/parts/search/browser/searchActions.ts
src/vs/workbench/parts/search/browser/searchActions.ts
+55
-3
src/vs/workbench/parts/search/electron-browser/search.contribution.ts
...ench/parts/search/electron-browser/search.contribution.ts
+22
-4
未找到文件。
src/vs/workbench/parts/search/browser/searchActions.ts
浏览文件 @
c8a6ce93
...
@@ -18,7 +18,7 @@ import { IWorkbenchEditorService } from 'vs/workbench/services/editor/common/edi
...
@@ -18,7 +18,7 @@ import { IWorkbenchEditorService } from 'vs/workbench/services/editor/common/edi
import
{
ResolvedKeybinding
,
createKeybinding
}
from
'
vs/base/common/keyCodes
'
;
import
{
ResolvedKeybinding
,
createKeybinding
}
from
'
vs/base/common/keyCodes
'
;
import
{
IKeybindingService
}
from
'
vs/platform/keybinding/common/keybinding
'
;
import
{
IKeybindingService
}
from
'
vs/platform/keybinding/common/keybinding
'
;
import
{
ServicesAccessor
}
from
'
vs/platform/instantiation/common/instantiation
'
;
import
{
ServicesAccessor
}
from
'
vs/platform/instantiation/common/instantiation
'
;
import
{
OS
}
from
'
vs/base/common/platform
'
;
import
{
OS
,
isWindows
}
from
'
vs/base/common/platform
'
;
import
{
IContextKeyService
}
from
'
vs/platform/contextkey/common/contextkey
'
;
import
{
IContextKeyService
}
from
'
vs/platform/contextkey/common/contextkey
'
;
import
{
IPanelService
}
from
'
vs/workbench/services/panel/common/panelService
'
;
import
{
IPanelService
}
from
'
vs/workbench/services/panel/common/panelService
'
;
import
{
VIEW_ID
}
from
'
vs/platform/search/common/search
'
;
import
{
VIEW_ID
}
from
'
vs/platform/search/common/search
'
;
...
@@ -635,10 +635,62 @@ export class ReplaceAction extends AbstractSearchAndReplaceAction {
...
@@ -635,10 +635,62 @@ export class ReplaceAction extends AbstractSearchAndReplaceAction {
}
}
}
}
function
fileMatchUriToString
(
fileMatch
:
FileMatch
):
string
{
const
resource
=
fileMatch
.
resource
();
return
resource
.
scheme
===
Schemas
.
file
?
getPathLabel
(
resource
)
:
resource
.
toString
();
}
export
const
copyPathCommand
:
ICommandHandler
=
(
accessor
,
fileMatch
:
FileMatch
)
=>
{
export
const
copyPathCommand
:
ICommandHandler
=
(
accessor
,
fileMatch
:
FileMatch
)
=>
{
const
clipboardService
=
accessor
.
get
(
IClipboardService
);
const
clipboardService
=
accessor
.
get
(
IClipboardService
);
const
resource
=
fileMatch
.
resource
();
const
text
=
fileMatchUriToString
(
fileMatch
);
const
text
=
resource
.
scheme
===
Schemas
.
file
?
getPathLabel
(
resource
)
:
resource
.
toString
();
clipboardService
.
writeText
(
text
);
clipboardService
.
writeText
(
text
);
};
};
function
matchToString
(
match
:
Match
):
string
{
return
`
${
match
.
range
().
startLineNumber
}
,
${
match
.
range
().
startColumn
}
:
${
match
.
text
()}
`
;
}
const
lineDelimiter
=
isWindows
?
'
\r\n
'
:
'
\n
'
;
function
fileMatchToString
(
fileMatch
:
FileMatch
,
maxMatches
:
number
):
{
text
:
string
,
count
:
number
}
{
const
matchTextRows
=
fileMatch
.
matches
()
.
slice
(
0
,
maxMatches
)
.
map
(
matchToString
)
.
map
(
matchText
=>
'
'
+
matchText
);
return
{
text
:
`
${
fileMatchUriToString
(
fileMatch
)}${
lineDelimiter
}${
matchTextRows
.
join
(
lineDelimiter
)}
`
,
count
:
matchTextRows
.
length
};
}
function
folderMatchToString
(
folderMatch
:
FolderMatch
,
maxMatches
:
number
):
string
{
const
fileResults
:
string
[]
=
[];
let
numMatches
=
0
;
for
(
let
i
=
0
;
i
<
folderMatch
.
fileCount
()
&&
numMatches
<
maxMatches
;
i
++
)
{
const
fileResult
=
fileMatchToString
(
folderMatch
.
matches
()[
i
],
maxMatches
-
numMatches
);
numMatches
+=
fileResult
.
count
;
fileResults
.
push
(
fileResult
.
text
);
}
return
fileResults
.
join
(
lineDelimiter
+
lineDelimiter
);
}
const
maxClipboardMatches
=
1
e4
;
export
const
copyMatchCommand
:
ICommandHandler
=
(
accessor
,
match
:
RenderableMatch
)
=>
{
const
clipboardService
=
accessor
.
get
(
IClipboardService
);
let
text
:
string
;
if
(
match
instanceof
Match
)
{
text
=
matchToString
(
match
);
}
else
if
(
match
instanceof
FileMatch
)
{
text
=
fileMatchToString
(
match
,
maxClipboardMatches
).
text
;
}
else
if
(
match
instanceof
FolderMatch
)
{
text
=
folderMatchToString
(
match
,
maxClipboardMatches
);
}
if
(
text
)
{
clipboardService
.
writeText
(
text
);
}
};
src/vs/workbench/parts/search/electron-browser/search.contribution.ts
浏览文件 @
c8a6ce93
...
@@ -53,7 +53,7 @@ import { getMultiSelectedResources } from 'vs/workbench/parts/files/browser/file
...
@@ -53,7 +53,7 @@ import { getMultiSelectedResources } from 'vs/workbench/parts/files/browser/file
import
{
Schemas
}
from
'
vs/base/common/network
'
;
import
{
Schemas
}
from
'
vs/base/common/network
'
;
import
{
PanelRegistry
,
Extensions
as
PanelExtensions
,
PanelDescriptor
}
from
'
vs/workbench/browser/panel
'
;
import
{
PanelRegistry
,
Extensions
as
PanelExtensions
,
PanelDescriptor
}
from
'
vs/workbench/browser/panel
'
;
import
{
IPanelService
}
from
'
vs/workbench/services/panel/common/panelService
'
;
import
{
IPanelService
}
from
'
vs/workbench/services/panel/common/panelService
'
;
import
{
openSearchView
,
getSearchView
,
ReplaceAllInFolderAction
,
ReplaceAllAction
,
CloseReplaceAction
,
FocusNextInputAction
,
FocusPreviousInputAction
,
FocusNextSearchResultAction
,
FocusPreviousSearchResultAction
,
ReplaceInFilesAction
,
FindInFilesAction
,
FocusActiveEditorCommand
,
toggleCaseSensitiveCommand
,
ShowNextSearchTermAction
,
ShowPreviousSearchTermAction
,
toggleRegexCommand
,
ShowPreviousSearchIncludeAction
,
ShowNextSearchIncludeAction
,
CollapseDeepestExpandedLevelAction
,
toggleWholeWordCommand
,
RemoveAction
,
ReplaceAction
,
ClearSearchResultsAction
,
copyPathCommand
}
from
'
vs/workbench/parts/search/browser/searchActions
'
;
import
{
openSearchView
,
getSearchView
,
ReplaceAllInFolderAction
,
ReplaceAllAction
,
CloseReplaceAction
,
FocusNextInputAction
,
FocusPreviousInputAction
,
FocusNextSearchResultAction
,
FocusPreviousSearchResultAction
,
ReplaceInFilesAction
,
FindInFilesAction
,
FocusActiveEditorCommand
,
toggleCaseSensitiveCommand
,
ShowNextSearchTermAction
,
ShowPreviousSearchTermAction
,
toggleRegexCommand
,
ShowPreviousSearchIncludeAction
,
ShowNextSearchIncludeAction
,
CollapseDeepestExpandedLevelAction
,
toggleWholeWordCommand
,
RemoveAction
,
ReplaceAction
,
ClearSearchResultsAction
,
copyPathCommand
,
copyMatchCommand
}
from
'
vs/workbench/parts/search/browser/searchActions
'
;
import
{
VIEW_ID
,
ISearchConfigurationProperties
}
from
'
vs/platform/search/common/search
'
;
import
{
VIEW_ID
,
ISearchConfigurationProperties
}
from
'
vs/platform/search/common/search
'
;
import
{
IWorkbenchContributionsRegistry
,
Extensions
as
WorkbenchExtensions
}
from
'
vs/workbench/common/contributions
'
;
import
{
IWorkbenchContributionsRegistry
,
Extensions
as
WorkbenchExtensions
}
from
'
vs/workbench/common/contributions
'
;
import
{
LifecyclePhase
}
from
'
vs/platform/lifecycle/common/lifecycle
'
;
import
{
LifecyclePhase
}
from
'
vs/platform/lifecycle/common/lifecycle
'
;
...
@@ -235,6 +235,24 @@ MenuRegistry.appendMenuItem(MenuId.SearchContext, {
...
@@ -235,6 +235,24 @@ MenuRegistry.appendMenuItem(MenuId.SearchContext, {
order
:
2
order
:
2
});
});
KeybindingsRegistry
.
registerCommandAndKeybindingRule
({
id
:
Constants
.
CopyMatchCommandId
,
weight
:
KeybindingsRegistry
.
WEIGHT
.
workbenchContrib
(),
when
:
Constants
.
FileMatchOrMatchFocusKey
,
primary
:
KeyMod
.
CtrlCmd
|
KeyCode
.
KEY_C
,
handler
:
copyMatchCommand
});
MenuRegistry
.
appendMenuItem
(
MenuId
.
SearchContext
,
{
command
:
{
id
:
Constants
.
CopyMatchCommandId
,
title
:
nls
.
localize
(
'
copyMatchLabel
'
,
"
Copy
"
)
},
when
:
Constants
.
FileMatchOrMatchFocusKey
,
group
:
'
search_2
'
,
order
:
3
});
KeybindingsRegistry
.
registerCommandAndKeybindingRule
({
KeybindingsRegistry
.
registerCommandAndKeybindingRule
({
id
:
Constants
.
CopyPathCommandId
,
id
:
Constants
.
CopyPathCommandId
,
weight
:
KeybindingsRegistry
.
WEIGHT
.
workbenchContrib
(),
weight
:
KeybindingsRegistry
.
WEIGHT
.
workbenchContrib
(),
...
@@ -252,8 +270,8 @@ MenuRegistry.appendMenuItem(MenuId.SearchContext, {
...
@@ -252,8 +270,8 @@ MenuRegistry.appendMenuItem(MenuId.SearchContext, {
title
:
nls
.
localize
(
'
copyPathLabel
'
,
"
Copy Path
"
)
title
:
nls
.
localize
(
'
copyPathLabel
'
,
"
Copy Path
"
)
},
},
when
:
Constants
.
FileFocusKey
,
when
:
Constants
.
FileFocusKey
,
group
:
'
search
'
,
group
:
'
search
_2
'
,
order
:
3
order
:
4
});
});
CommandsRegistry
.
registerCommand
({
CommandsRegistry
.
registerCommand
({
...
@@ -274,7 +292,7 @@ MenuRegistry.appendMenuItem(MenuId.SearchContext, {
...
@@ -274,7 +292,7 @@ MenuRegistry.appendMenuItem(MenuId.SearchContext, {
title
:
toggleSearchViewPositionLabel
title
:
toggleSearchViewPositionLabel
},
},
when
:
Constants
.
SearchViewVisibleKey
,
when
:
Constants
.
SearchViewVisibleKey
,
group
:
'
search_
2
'
,
group
:
'
search_
9
'
,
order
:
1
order
:
1
});
});
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录