Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xxadev
vscode
提交
8609a070
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,体验更适合开发者的 AI 搜索 >>
提交
8609a070
编写于
9月 28, 2016
作者:
J
Joao Moreno
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
implement open-url in windows
related to #10340
上级
f6d0cc16
变更
8
隐藏空白更改
内联
并排
Showing
8 changed file
with
43 addition
and
12 deletion
+43
-12
src/vs/base/common/event.ts
src/vs/base/common/event.ts
+3
-3
src/vs/code/electron-main/env.ts
src/vs/code/electron-main/env.ts
+1
-0
src/vs/code/electron-main/launch.ts
src/vs/code/electron-main/launch.ts
+11
-1
src/vs/code/electron-main/main.ts
src/vs/code/electron-main/main.ts
+3
-1
src/vs/platform/environment/node/argv.ts
src/vs/platform/environment/node/argv.ts
+3
-1
src/vs/platform/url/common/url.ts
src/vs/platform/url/common/url.ts
+1
-0
src/vs/platform/url/common/urlIpc.ts
src/vs/platform/url/common/urlIpc.ts
+4
-0
src/vs/platform/url/electron-main/urlService.ts
src/vs/platform/url/electron-main/urlService.ts
+17
-6
未找到文件。
src/vs/base/common/event.ts
浏览文件 @
8609a070
...
...
@@ -217,12 +217,12 @@ export function once<T>(event: Event<T>): Event<T> {
};
}
export
function
any
(...
events
:
Event
<
any
>
[]):
Event
<
void
>
{
export
function
any
<
T
>
(...
events
:
Event
<
T
>
[]):
Event
<
T
>
{
let
listeners
=
[];
const
emitter
=
new
Emitter
<
void
>
({
const
emitter
=
new
Emitter
<
T
>
({
onFirstListenerAdd
()
{
listeners
=
events
.
map
(
e
=>
e
(
()
=>
emitter
.
fire
(),
null
));
listeners
=
events
.
map
(
e
=>
e
(
r
=>
emitter
.
fire
(
r
)
));
},
onLastListenerRemove
()
{
listeners
=
dispose
(
listeners
);
...
...
src/vs/code/electron-main/env.ts
浏览文件 @
8609a070
...
...
@@ -121,6 +121,7 @@ export class EnvService implements IEnvService {
extensionDevelopmentPath
:
normalizePath
(
argv
.
extensionDevelopmentPath
),
extensionTestsPath
:
normalizePath
(
argv
.
extensionTestsPath
),
'
disable-extensions
'
:
argv
[
'
disable-extensions
'
],
'
open-url
'
:
argv
[
'
open-url
'
],
locale
:
argv
.
locale
,
wait
:
argv
.
wait
});
...
...
src/vs/code/electron-main/launch.ts
浏览文件 @
8609a070
...
...
@@ -11,6 +11,7 @@ import { VSCodeWindow } from 'vs/code/electron-main/window';
import
{
TPromise
}
from
'
vs/base/common/winjs.base
'
;
import
{
IChannel
}
from
'
vs/base/parts/ipc/common/ipc
'
;
import
{
ILogService
}
from
'
vs/code/electron-main/log
'
;
import
{
IURLService
}
from
'
vs/platform/url/common/url
'
;
export
interface
IStartArguments
{
args
:
ICommandLineArguments
;
...
...
@@ -52,12 +53,21 @@ export class LaunchService implements ILaunchService {
constructor
(
@
ILogService
private
logService
:
ILogService
,
@
IWindowsService
private
windowsService
:
IWindowsService
@
IWindowsService
private
windowsService
:
IWindowsService
,
@
IURLService
private
urlService
:
IURLService
)
{}
start
(
args
:
ICommandLineArguments
,
userEnv
:
IProcessEnvironment
):
TPromise
<
void
>
{
this
.
logService
.
log
(
'
Received data from other instance:
'
,
args
,
userEnv
);
const
openUrlArg
=
args
[
'
open-url
'
]
||
[];
const
openUrl
=
typeof
openUrlArg
===
'
string
'
?
[
openUrlArg
]
:
openUrlArg
;
if
(
openUrl
.
length
>
0
)
{
openUrl
.
forEach
(
url
=>
this
.
urlService
.
open
(
url
));
return
TPromise
.
as
(
null
);
}
// Otherwise handle in windows service
let
usedWindows
:
VSCodeWindow
[];
if
(
!!
args
.
extensionDevelopmentPath
)
{
...
...
src/vs/code/electron-main/main.ts
浏览文件 @
8609a070
...
...
@@ -40,6 +40,7 @@ import { IRequestService } from 'vs/platform/request/common/request';
import
{
RequestService
}
from
'
vs/platform/request/node/requestService
'
;
import
{
generateUuid
}
from
'
vs/base/common/uuid
'
;
import
{
getPathLabel
}
from
'
vs/base/common/labels
'
;
import
{
IURLService
}
from
'
vs/platform/url/common/url
'
;
import
{
URLChannel
}
from
'
vs/platform/url/common/urlIpc
'
;
import
{
URLService
}
from
'
vs/platform/url/electron-main/urlService
'
;
...
...
@@ -125,7 +126,7 @@ function main(accessor: ServicesAccessor, mainIpcServer: Server, userEnv: IProce
const
electronIpcServer
=
new
ElectronIPCServer
(
ipc
);
// Register Electron IPC services
const
urlService
=
instantiationService
.
createInstance
(
URLService
);
const
urlService
=
accessor
.
get
(
I
URLService
);
const
urlChannel
=
instantiationService
.
createInstance
(
URLChannel
,
urlService
);
electronIpcServer
.
registerChannel
(
'
url
'
,
urlChannel
);
...
...
@@ -455,6 +456,7 @@ function start(): void {
services
.
set
(
IConfigurationService
,
new
SyncDescriptor
(
ConfigurationService
));
services
.
set
(
IRequestService
,
new
SyncDescriptor
(
RequestService
));
services
.
set
(
IUpdateService
,
new
SyncDescriptor
(
UpdateManager
));
services
.
set
(
IURLService
,
new
SyncDescriptor
(
URLService
,
args
[
'
open-url
'
]));
const
instantiationService
=
new
InstantiationService
(
services
);
...
...
src/vs/platform/environment/node/argv.ts
浏览文件 @
8609a070
...
...
@@ -31,6 +31,7 @@ export interface ParsedArgs extends minimist.ParsedArgs {
'
list-extensions
'
?:
boolean
;
'
install-extension
'
?:
string
|
string
[];
'
uninstall-extension
'
?:
string
|
string
[];
'
open-url
'
?:
string
|
string
[];
}
const
options
:
minimist
.
Opts
=
{
...
...
@@ -43,7 +44,8 @@ const options: minimist.Opts = {
'
install-extension
'
,
'
uninstall-extension
'
,
'
debugBrkPluginHost
'
,
'
debugPluginHost
'
'
debugPluginHost
'
,
'
open-url
'
],
boolean
:
[
'
help
'
,
...
...
src/vs/platform/url/common/url.ts
浏览文件 @
8609a070
...
...
@@ -14,5 +14,6 @@ export const IURLService = createDecorator<IURLService>(ID);
export
interface
IURLService
{
_serviceBrand
:
any
;
open
(
url
:
string
):
void
;
onOpenURL
:
Event
<
URI
>
;
}
src/vs/platform/url/common/urlIpc.ts
浏览文件 @
8609a070
...
...
@@ -55,4 +55,8 @@ export class URLChannelClient implements IURLService {
private
_onOpenURL
=
eventFromCall
<
URI
>
(
this
.
channel
,
'
event:onOpenURL
'
,
this
.
windowID
,
URIDeserializer
);
get
onOpenURL
():
Event
<
URI
>
{
return
this
.
_onOpenURL
;
}
open
(
url
:
string
):
void
{
return
;
// not implemented
}
}
\ No newline at end of file
src/vs/platform/url/electron-main/urlService.ts
浏览文件 @
8609a070
...
...
@@ -5,7 +5,7 @@
'
use strict
'
;
import
Event
,
{
chain
,
mapEvent
,
buffer
}
from
'
vs/base/common/event
'
;
import
Event
,
{
mapEvent
,
chain
,
buffer
,
Emitter
,
any
}
from
'
vs/base/common/event
'
;
import
{
fromEventEmitter
}
from
'
vs/base/node/event
'
;
import
{
IURLService
}
from
'
vs/platform/url/common/url
'
;
import
product
from
'
vs/platform/product
'
;
...
...
@@ -16,23 +16,30 @@ export class URLService implements IURLService {
_serviceBrand
:
any
;
private
openUrlEmitter
:
Emitter
<
string
>
=
new
Emitter
<
string
>
();
onOpenURL
:
Event
<
URI
>
;
constructor
()
{
app
.
setAsDefaultProtocolClient
(
product
.
urlProtocol
);
constructor
(
initial
:
string
|
string
[]
=
[])
{
const
globalBuffer
=
(
global
.
getOpenUrls
()
||
[])
as
string
[];
const
initialBuffer
=
[
...(
typeof
initial
===
'
string
'
?
[
initial
]
:
initial
),
...
globalBuffer
];
app
.
setAsDefaultProtocolClient
(
product
.
urlProtocol
,
process
.
execPath
,
[
'
--open-url
'
]);
const
rawOnOpenUrl
=
fromEventEmitter
(
app
,
'
open-url
'
,
(
event
:
Electron
.
Event
,
url
:
string
)
=>
({
event
,
url
}));
// always prevent default and return the url as string
const
o
nOpenUrl
=
mapEvent
(
rawOnOpenUrl
,
({
event
,
url
})
=>
{
const
preventedO
nOpenUrl
=
mapEvent
(
rawOnOpenUrl
,
({
event
,
url
})
=>
{
event
.
preventDefault
();
return
url
;
});
// buffer all `onOpenUrl` events until someone starts listening
const
bufferedOnOpenUrl
=
buffer
(
onOpenUrl
,
true
,
global
.
getOpenUrls
()
);
const
bufferedOnOpenUrl
=
buffer
(
preventedOnOpenUrl
,
true
,
initialBuffer
);
this
.
onOpenURL
=
chain
(
bufferedOnOpenUrl
)
this
.
onOpenURL
=
chain
(
any
(
bufferedOnOpenUrl
,
this
.
openUrlEmitter
.
event
)
)
.
map
(
url
=>
{
try
{
return
URI
.
parse
(
url
);
...
...
@@ -43,4 +50,8 @@ export class URLService implements IURLService {
.
filter
(
uri
=>
!!
uri
)
.
event
;
}
open
(
url
:
string
):
void
{
this
.
openUrlEmitter
.
fire
(
url
);
}
}
\ No newline at end of file
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录