diff --git a/denops/skkeleton/config.ts b/denops/skkeleton/config.ts index 6d59059..837bd3c 100644 --- a/denops/skkeleton/config.ts +++ b/denops/skkeleton/config.ts @@ -22,6 +22,7 @@ export const config: Omit & { kanaTable: "rom", keepMode: false, keepState: false, + lowercaseMap: {}, markerHenkan: "▽", markerHenkanSelect: "▼", registerConvertResult: false, @@ -94,6 +95,7 @@ const validators: Validators = { }, keepMode: (x) => ensure(x, is.Boolean), keepState: (x) => ensure(x, is.Boolean), + lowercaseMap: (x) => ensure(x, is.RecordOf(is.String)), markerHenkan: (x) => ensure(x, is.String), markerHenkanSelect: (x) => ensure(x, is.String), registerConvertResult: (x) => ensure(x, is.Boolean), diff --git a/denops/skkeleton/function/input.ts b/denops/skkeleton/function/input.ts index 65c0ae3..2246ab2 100644 --- a/denops/skkeleton/function/input.ts +++ b/denops/skkeleton/function/input.ts @@ -88,7 +88,7 @@ export async function kanaInput(context: Context, char: string) { context.state.type = "input"; const state = context.state as InputState; - const lower = char.toLowerCase(); + const lower = config.lowercaseMap[char] ?? char.toLowerCase(); if (!state.directInput && char !== lower) { const withShift = ``; if (state.table.some((e) => e[0].startsWith(state.feed + withShift))) { diff --git a/denops/skkeleton/function/input_test.ts b/denops/skkeleton/function/input_test.ts index 5e79b8f..ff39d96 100644 --- a/denops/skkeleton/function/input_test.ts +++ b/denops/skkeleton/function/input_test.ts @@ -89,6 +89,16 @@ Deno.test({ }, }); +Deno.test({ + name: "upper case input with lowercaseMap", + async fn() { + config.lowercaseMap = { "+": "a" }; + const context = new Context(); + await dispatch(context, "+"); + assertEquals(context.toString(), "▽あ"); + }, +}); + Deno.test({ name: "delete char", async fn() { diff --git a/denops/skkeleton/types.ts b/denops/skkeleton/types.ts index 0867d15..e268049 100644 --- a/denops/skkeleton/types.ts +++ b/denops/skkeleton/types.ts @@ -42,6 +42,7 @@ export type ConfigOptions = { kanaTable: string; keepMode: boolean; keepState: boolean; + lowercaseMap: Record; markerHenkan: string; markerHenkanSelect: string; registerConvertResult: boolean; diff --git a/doc/skkeleton.jax b/doc/skkeleton.jax index a364a40..d66731b 100644 --- a/doc/skkeleton.jax +++ b/doc/skkeleton.jax @@ -285,6 +285,20 @@ keepState *skkeleton-config-keepState* このオプションを有効にすると Insertモードを抜けても前回の状態を保持するようになります。 +lowercaseMap *skkeleton-config-lowercaseMap* + (デフォルト {}) + 仮名入力時に大文字を打つと、通常は対応する小文字に変換した上で変換ポイ + ントと同時に入力しますが、仮名テーブルをカスタマイズし、記号と被せてい + る場合、変換が上手く行きません。その場合、このオプションを指定すること + で変換規則を指定できます。 +> + 値の例: { + \ '+': ';', + \ ':': ';', + \ } + これは AZIK で「っ」を打つための JIS 及び US キーボード用の設定です +< + markerHenkan *skkeleton-config-markerHenkan* (デフォルト "▽") 変換入力中であることを示すため文字を指定します。