Skip to content

Commit 08abcca

Browse files
committed
👍 allow eval values in helper/keymap
1 parent e82376a commit 08abcca

File tree

2 files changed

+28
-20
lines changed

2 files changed

+28
-20
lines changed

helper/keymap.ts

Lines changed: 12 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,15 @@
11
import type { Denops } from "@denops/core";
22
import { isArray } from "@core/unknownutil/is/array";
33
import { isString } from "@core/unknownutil/is/string";
4-
import {
5-
exprQuote as q,
6-
type ExprString,
7-
isExprString,
8-
useExprString,
9-
} from "./expr_string.ts";
104
import { batch } from "../batch/mod.ts";
11-
import { register } from "../lambda/mod.ts";
5+
import { isRawString, type RawString, rawString } from "../eval/string.ts";
6+
import { useEval } from "../eval/use_eval.ts";
127
import { feedkeys } from "../function/mod.ts";
8+
import { type ExprString, isExprString } from "../helper/expr_string.ts";
9+
import { add } from "../lambda/mod.ts";
1310

1411
export type Keys = {
15-
keys: string | ExprString;
12+
keys: string | RawString | ExprString;
1613
remap: boolean;
1714
};
1815

@@ -23,7 +20,7 @@ function toArray<T>(x: T | T[]): T[] {
2320
}
2421

2522
function toKeys(keys: KeysSpecifier): Keys {
26-
if (isString(keys) || isExprString(keys)) {
23+
if (isString(keys) || isRawString(keys) || isExprString(keys)) {
2724
return { keys, remap: false };
2825
}
2926
return keys;
@@ -36,7 +33,7 @@ function toKeys(keys: KeysSpecifier): Keys {
3633
* ```typescript
3734
* import type { Entrypoint } from "jsr:@denops/std";
3835
* import * as fn from "jsr:@denops/std/function";
39-
* import { exprQuote as q } from "jsr:@denops/std/helper/expr_string";
36+
* import { rawString } from "jsr:@denops/std/eval";
4037
* import { send } from "jsr:@denops/std/helper/keymap";
4138
*
4239
* export const main: Entrypoint = async (denops) => {
@@ -50,14 +47,14 @@ function toKeys(keys: KeysSpecifier): Keys {
5047
*
5148
* // Send special keys.
5249
* await send(denops, [
53-
* q`${"\\<BS>".repeat(6)}`,
50+
* rawString`${"\\<BS>".repeat(6)}`,
5451
* "baz",
5552
* ]);
5653
* // "baz"
5754
* console.log(await fn.getline(denops, "."));
5855
*
5956
* // Send remaped keys.
60-
* await send(denops, { keys: q`\<C-l>`, remap: true });
57+
* await send(denops, { keys: rawString`\<C-l>`, remap: true });
6158
* // "bazsend"
6259
* console.log(await fn.getline(denops, "."));
6360
* },
@@ -72,19 +69,15 @@ export async function send(
7269
keys: KeysSpecifier | KeysSpecifier[],
7370
): Promise<void> {
7471
const { promise: waiter, resolve } = Promise.withResolvers<void>();
75-
const id = register(denops, () => resolve(), { once: true });
72+
using lo = add(denops, () => resolve());
7673
await Promise.all([
77-
useExprString(denops, async (denops) => {
74+
useEval(denops, async (denops) => {
7875
await batch(denops, async (denops) => {
7976
const normKeys = toArray(keys).map(toKeys);
8077
for (const key of normKeys) {
8178
await feedkeys(denops, key.keys, key.remap ? "m" : "n");
8279
}
83-
await feedkeys(
84-
denops,
85-
q`\<Cmd>call denops#notify('${denops.name}', '${id}', [])\<CR>`,
86-
"n",
87-
);
80+
await feedkeys(denops, rawString`\<Cmd>call ${lo.notify(1)}\<CR>`, "n");
8881
});
8982
}),
9083
waiter,

helper/keymap_test.ts

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { assertEquals } from "@std/assert";
22
import { test } from "@denops/test";
33
import { AsyncDisposableStack } from "@nick/dispose";
44
import * as fn from "../function/mod.ts";
5+
import { rawString } from "../eval/string.ts";
56
import { exprQuote } from "./expr_string.ts";
67
import { send } from "./keymap.ts";
78

@@ -21,6 +22,20 @@ test({
2122
await send(denops, ["gg0lll", "hh", "lll"]);
2223
assertEquals(await fn.getpos(denops, "."), [0, 1, 5, 0]);
2324
});
25+
await t.step("sends special keys with RawString", async () => {
26+
await fn.deletebufline(denops, "%", 1, "$");
27+
await send(denops, rawString`\<Cmd>call setline(1, 'foo')\<CR>`);
28+
assertEquals(await fn.getline(denops, 1), "foo");
29+
});
30+
await t.step("sends special keys with RawString[]", async () => {
31+
await fn.deletebufline(denops, "%", 1, "$");
32+
await send(denops, [
33+
rawString`\<Cmd>call setline(1, 'foo')\<CR>`,
34+
rawString`\<Cmd>call append(0, 'bar')\<CR>`,
35+
rawString`\<Cmd>call append(0, 'baz')\<CR>`,
36+
]);
37+
assertEquals(await fn.getline(denops, 1, "$"), ["baz", "bar", "foo"]);
38+
});
2439
await t.step("sends special keys with ExprString", async () => {
2540
await fn.deletebufline(denops, "%", 1, "$");
2641
await send(denops, exprQuote`\<Cmd>call setline(1, 'foo')\<CR>`);
@@ -60,7 +75,7 @@ test({
6075
await fn.deletebufline(denops, "%", 1, "$");
6176
await fn.setline(denops, 1, ["foo", "bar", "baz"]);
6277
await send(denops, [
63-
{ keys: exprQuote`gg0\<Down>lk`, remap: false },
78+
{ keys: rawString`gg0\<Down>lk`, remap: false },
6479
{ keys: "k", remap: true },
6580
{ keys: "k", remap: false },
6681
]);

0 commit comments

Comments
 (0)