Skip to content

Commit 8e580f0

Browse files
authored
Merge pull request #310 from vim-denops/add-internal-events
👍 Add `DenopsPluginWorkerPre` and `DenopsPluginWorkerPost`
2 parents 4f0bbc9 + 6f7cae4 commit 8e580f0

File tree

5 files changed

+23
-14
lines changed

5 files changed

+23
-14
lines changed

autoload/denops/plugin.vim

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -141,14 +141,9 @@ function! s:find_plugin(plugin) abort
141141
throw printf('No denops plugin for "%s" exists', a:plugin)
142142
endfunction
143143

144-
function! s:DenopsSystemPluginPre() abort
145-
let l:plugin = matchstr(expand('<amatch>'), 'DenopsSystemPluginPre:\zs.*')
146-
execute printf('doautocmd <nomodeline> User DenopsPluginPre:%s', l:plugin)
147-
endfunction
148-
149-
function! s:DenopsSystemPluginPost() abort
150-
let l:plugin = matchstr(expand('<amatch>'), 'DenopsSystemPluginPost:\zs.*')
151-
execute printf('doautocmd <nomodeline> User DenopsPluginPost:%s', l:plugin)
144+
function! s:relay_autocmd(name) abort
145+
let l:plugin = matchstr(expand('<amatch>'), '^[^:]\+:\zs.*')
146+
execute printf('doautocmd <nomodeline> User %s:%s', a:name, l:plugin)
152147
endfunction
153148

154149
function! s:DenopsSystemPluginFail() abort
@@ -172,8 +167,10 @@ endfunction
172167

173168
augroup denops_autoload_plugin_internal
174169
autocmd!
175-
autocmd User DenopsSystemPluginPre:* call s:DenopsSystemPluginPre()
176-
autocmd User DenopsSystemPluginPost:* call s:DenopsSystemPluginPost()
170+
autocmd User DenopsSystemPluginWorkerPre:* call s:relay_autocmd('DenopsPluginWorkerPre')
171+
autocmd User DenopsSystemPluginWorkerPost:* call s:relay_autocmd('DenopsPluginWorkerPost')
172+
autocmd User DenopsSystemPluginPre:* call s:relay_autocmd('DenopsPluginPre')
173+
autocmd User DenopsSystemPluginPost:* call s:relay_autocmd('DenopsPluginPost')
177174
autocmd User DenopsSystemPluginFail:* call s:DenopsSystemPluginFail()
178175
autocmd User DenopsPluginPost:* ++nested call s:DenopsPluginPost()
179176
autocmd User DenopsClosed let s:loaded_plugins = {}

denops/@denops-private/host/invoker.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,9 @@ export class Invoker {
1212
name: string,
1313
script: string,
1414
): void {
15-
this.#service.load(name, script);
15+
this.#service.load(name, script).catch((err) => {
16+
console.error(`Failed to load plugin '${name}`, err);
17+
});
1618
}
1719

1820
reload(

denops/@denops-private/service.ts

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,25 +36,33 @@ export class Service implements Disposable {
3636
this.meta = meta;
3737
}
3838

39-
load(
39+
async load(
4040
name: string,
4141
script: string,
4242
suffix = "",
43-
): void {
43+
): Promise<void> {
4444
const plugin = this.#plugins.get(name);
4545
if (plugin) {
4646
if (this.meta.mode === "debug") {
4747
console.log(`A denops plugin '${name}' is already loaded. Skip`);
4848
}
4949
return;
5050
}
51+
await this.host.call(
52+
"execute",
53+
`doautocmd <nomodeline> User DenopsSystemPluginWorkerPre:${name}`,
54+
);
5155
const worker = new Worker(
5256
new URL(workerScript, import.meta.url).href,
5357
{
5458
name,
5559
type: "module",
5660
},
5761
);
62+
await this.host.call(
63+
"execute",
64+
`doautocmd <nomodeline> User DenopsSystemPluginWorkerPost:${name}`,
65+
);
5866
const scriptUrl = resolveScriptUrl(script);
5967
worker.postMessage({
6068
scriptUrl: `${scriptUrl}${suffix}`,

denops/@denops-private/worker/script.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,8 +71,8 @@ async function main(
7171
},
7272
});
7373
try {
74-
const mod = await import(scriptUrl);
7574
await emit(denops, `DenopsSystemPluginPre:${worker.name}`);
75+
const mod = await import(scriptUrl);
7676
await mod.main(denops);
7777
await emit(denops, `DenopsSystemPluginPost:${worker.name}`);
7878
await session.wait();

plugin/denops.vim

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ endif
1919

2020
augroup denops_plugin_internal
2121
autocmd!
22+
autocmd User DenopsPluginWorkerPre:* :
23+
autocmd User DenopsPluginWorkerPost:* :
2224
autocmd User DenopsPluginPre:* :
2325
autocmd User DenopsPluginPost:* :
2426
autocmd User DenopsPluginFail:* :

0 commit comments

Comments
 (0)