From 9246f28c1ef2c5edcb4643265a367972517eaa96 Mon Sep 17 00:00:00 2001 From: Oliver Blanthorn Date: Sun, 31 May 2020 15:17:01 +0100 Subject: [PATCH] Extract key translation from keyMap --- src/lib/keyseq.ts | 13 +++++++++---- src/parsers/genericmode.ts | 3 ++- src/parsers/nmode.ts | 3 ++- 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/src/lib/keyseq.ts b/src/lib/keyseq.ts index afe79ffb..ac277d45 100644 --- a/src/lib/keyseq.ts +++ b/src/lib/keyseq.ts @@ -350,15 +350,20 @@ export function mapstrMapToKeyMap(mapstrMap: Map): KeyMap { return newKeyMap } -export function keyMap(conf, keys): KeyMap { - let maps: any = config.get(conf) - if (maps === undefined) throw new Error("No binds defined for this mode. Reload page with and add binds, e.g. :bind --mode=[mode] mode normal") - +export function translateKeysInPlace(keys, conf): void { // If so configured, translate keys using the key translation map if (config.get("keytranslatemodes")[conf] === "true") { const translationmap = config.get("keytranslatemap") translateKeysUsingKeyTranslateMap(keys, translationmap) } +} + +/** + * Return a "*maps" config converted into sequences of minimalkeys (e.g. "nmaps") + */ +export function keyMap(conf): KeyMap { + let maps: any = config.get(conf) + if (maps === undefined) throw new Error("No binds defined for this mode. Reload page with and add binds, e.g. :bind --mode=[mode] mode normal") // Convert to KeyMap maps = new Map(Object.entries(maps)) diff --git a/src/parsers/genericmode.ts b/src/parsers/genericmode.ts index be72cbb3..5b01bda2 100644 --- a/src/parsers/genericmode.ts +++ b/src/parsers/genericmode.ts @@ -3,6 +3,7 @@ import * as keyseq from "@src/lib/keyseq" export function parser(conf, keys): keyseq.ParserResponse { - const maps = keyseq.keyMap(conf, keys) + const maps = keyseq.keyMap(conf) + keyseq.translateKeysInPlace(keys, conf) return keyseq.parse(keys, maps) } diff --git a/src/parsers/nmode.ts b/src/parsers/nmode.ts index 5146bb90..a5bf8d66 100644 --- a/src/parsers/nmode.ts +++ b/src/parsers/nmode.ts @@ -29,7 +29,8 @@ export function parser(keys: KeyboardEvent[]) { keys = keyseq.stripOnlyModifiers(keys) if (keys.length === 0) return { keys: [], isMatch: false } const conf = mode2maps.get(modeState.mode) || modeState.mode + "maps" - const maps: any = keyseq.keyMap(conf, keys) + const maps: any = keyseq.keyMap(conf) + keyseq.translateKeysInPlace(keys, conf) const key = keys[0].key if (key === "Escape") {