Skip to content

Commit e84ac63

Browse files
committed
feat: add ~System autocmd to controll the timing
Now default mappings are defined prior to user mappings so that user can overwrite the default mappings if they want.
1 parent 3154bac commit e84ac63

File tree

6 files changed

+43
-27
lines changed

6 files changed

+43
-27
lines changed

denops/fall/picker.ts

+7-4
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,10 @@ import { Scheduler } from "./lib/scheduler.ts";
2121
import { Cmdliner } from "./util/cmdliner.ts";
2222
import { isIncrementalMatcher } from "./util/predicate.ts";
2323
import { buildMappingHelpPages } from "./util/mapping.ts";
24-
import { emitPickerEnter, emitPickerLeave } from "./util/emitter.ts";
24+
import {
25+
emitPickerEnterSystem,
26+
emitPickerLeaveSystem,
27+
} from "./util/emitter.ts";
2528
import { CollectProcessor } from "./processor/collect.ts";
2629
import { MatchProcessor } from "./processor/match.ts";
2730
import { SortProcessor } from "./processor/sort.ts";
@@ -276,11 +279,11 @@ export class Picker<T extends Detail> implements AsyncDisposable {
276279
},
277280
);
278281

279-
// Emit 'FallPickerEnter/FallPickerLeave' autocmd
282+
// Emit 'FallPickerEnterSystem/FallPickerLeaveSystem' autocmd
280283
stack.defer(async () => {
281-
await emitPickerLeave(denops, this.#name);
284+
await emitPickerLeaveSystem(denops, this.#name);
282285
});
283-
await emitPickerEnter(denops, this.#name);
286+
await emitPickerEnterSystem(denops, this.#name);
284287

285288
return stack.move();
286289
}

denops/fall/util/emitter.ts

+12-10
Original file line numberDiff line numberDiff line change
@@ -2,31 +2,33 @@ import type { Denops } from "jsr:@denops/std@^7.3.2";
22
import { emit } from "jsr:@denops/std@^7.3.2/autocmd";
33

44
/**
5-
* Save current cmap and emit `User FallPickerEnter:{name}` autocmd.
6-
*
7-
* The saved cmap will be restored by `emitPickerLeave`.
5+
* Emit `User FallPickerEnterSystem:{name}` autocmd.
86
*/
9-
export async function emitPickerEnter(
7+
export async function emitPickerEnterSystem(
108
denops: Denops,
119
name: string,
1210
): Promise<void> {
1311
try {
14-
await emit(denops, "User", `FallPickerEnter:${name}`, { nomodeline: true });
12+
await emit(denops, "User", `FallPickerEnterSystem:${name}`, {
13+
nomodeline: true,
14+
});
1515
} catch (err) {
16-
console.warn(`[fall] Failed to emit FallPickerEnter:${name}`, err);
16+
console.warn(`[fall] Failed to emit FallPickerEnterSystem:${name}`, err);
1717
}
1818
}
1919

2020
/**
21-
* Restore saved cmap and emit `User FallPickerLeave:{name}` autocmd.
21+
* Emit `User FallPickerLeaveSystem:{name}` autocmd.
2222
*/
23-
export async function emitPickerLeave(
23+
export async function emitPickerLeaveSystem(
2424
denops: Denops,
2525
name: string,
2626
): Promise<void> {
2727
try {
28-
await emit(denops, "User", `FallPickerLeave:${name}`, { nomodeline: true });
28+
await emit(denops, "User", `FallPickerLeaveSystem:${name}`, {
29+
nomodeline: true,
30+
});
2931
} catch (err) {
30-
console.warn(`[fall] Failed to emit FallPickerLeave:${name}`, err);
32+
console.warn(`[fall] Failed to emit FallPickerLeaveSystem:${name}`, err);
3133
}
3234
}

denops/fall/util/emitter_test.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { assertEquals } from "jsr:@std/assert@^1.0.6";
22
import { DenopsStub } from "jsr:@denops/test@^3.0.4/stub";
33

4-
import { emitPickerEnter, emitPickerLeave } from "./emitter.ts";
4+
import { emitPickerEnterSystem, emitPickerLeaveSystem } from "./emitter.ts";
55

66
Deno.test("emitPickerEnter", async (t) => {
77
await t.step("emit 'User FallPickerEnter:{name}'", async () => {
@@ -12,7 +12,7 @@ Deno.test("emitPickerEnter", async (t) => {
1212
return Promise.resolve();
1313
},
1414
});
15-
await emitPickerEnter(denops, "test");
15+
await emitPickerEnterSystem(denops, "test");
1616
assertEquals(called, [
1717
["do <nomodeline> User FallPickerEnter:test", {}],
1818
]);
@@ -28,7 +28,7 @@ Deno.test("emitPickerLeave", async (t) => {
2828
return Promise.resolve();
2929
},
3030
});
31-
await emitPickerLeave(denops, "test");
31+
await emitPickerLeaveSystem(denops, "test");
3232
assertEquals(called, [
3333
["do <nomodeline> User FallPickerLeave:test", {}],
3434
]);

plugin/fall.vim

-9
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,6 @@ command! -nargs=0 FallCustom call fall#command#FallCustom#call()
1111
command! -nargs=0 FallCustomReload call fall#command#FallCustomReload#call()
1212
command! -nargs=0 FallCustomRecache call fall#command#FallCustomRecache#call()
1313

14-
augroup fall_plugin
15-
autocmd! *
16-
autocmd User FallPickerEnter:* :
17-
autocmd User FallPickerLeave:* :
18-
autocmd User FallCustomLoaded :
19-
autocmd User FallCustomRecached :
20-
autocmd User FallPreviewRendered:* :
21-
augroup END
22-
2314
if !exists('g:fall_custom_path')
2415
let g:fall_custom_path = has('nvim')
2516
\ ? expand(join([stdpath('config'), 'fall', 'custom.ts'], s:sep))

plugin/fall/autocmd.vim

+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
if exists('g:loaded_fall_autocmd')
2+
finish
3+
endif
4+
let g:loaded_fall_autocmd = 1
5+
6+
function! s:bypass(event) abort
7+
let l:name = matchstr(expand('<amatch>'), '^.\+:\zs.*$')
8+
execute printf('doautocmd <nomodeline> User %s:%s', a:event, l:name)
9+
endfunction
10+
11+
augroup fall_plugin_autocmd
12+
autocmd! *
13+
autocmd User FallPickerEnterSystem:* ++nested call s:bypass('FallPickerEnter')
14+
autocmd User FallPickerLeaveSystem:* ++nested call s:bypass('FallPickerLeave')
15+
autocmd User FallPickerEnter:* :
16+
autocmd User FallPickerLeave:* :
17+
autocmd User FallCustomLoaded :
18+
autocmd User FallCustomRecached :
19+
autocmd User FallPreviewRendered:* :
20+
augroup END

plugin/fall/mapping.vim

+1-1
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,6 @@ if !get(g:, 'fall_disable_default_mapping')
108108

109109
augroup fall_mapping_plugin
110110
autocmd!
111-
autocmd User FallPickerEnter:* call s:map_picker()
111+
autocmd User FallPickerEnterSystem:* call s:map_picker()
112112
augroup END
113113
endif

0 commit comments

Comments
 (0)