diff --git a/packages/opencode/src/cli/cmd/tui/context/keybind.tsx b/packages/opencode/src/cli/cmd/tui/context/keybind.tsx index 4e1c07b7e..8008ca61c 100644 --- a/packages/opencode/src/cli/cmd/tui/context/keybind.tsx +++ b/packages/opencode/src/cli/cmd/tui/context/keybind.tsx @@ -73,13 +73,13 @@ export const { use: useKeybind, provider: KeybindProvider } = createSimpleContex get leader() { return store.leader }, - parse(evt: ParsedKey) { + parse(evt: ParsedKey): Keybind.Info { return { ctrl: evt.ctrl, name: evt.name, shift: evt.shift, leader: store.leader, - option: evt.option, + meta: evt.meta, } }, match(key: keyof KeybindsConfig, evt: ParsedKey) { diff --git a/packages/opencode/src/util/keybind.ts b/packages/opencode/src/util/keybind.ts index d6ff7b26a..245284e05 100644 --- a/packages/opencode/src/util/keybind.ts +++ b/packages/opencode/src/util/keybind.ts @@ -3,7 +3,7 @@ import { isDeepEqual } from "remeda" export namespace Keybind { export type Info = { ctrl: boolean - option: boolean + meta: boolean shift: boolean leader: boolean name: string @@ -17,7 +17,7 @@ export namespace Keybind { const parts: string[] = [] if (info.ctrl) parts.push("ctrl") - if (info.option) parts.push("alt") + if (info.meta) parts.push("alt") if (info.shift) parts.push("shift") if (info.name) { if (info.name === "delete") parts.push("del") @@ -42,7 +42,7 @@ export namespace Keybind { const parts = normalized.toLowerCase().split("+") const info: Info = { ctrl: false, - option: false, + meta: false, shift: false, leader: false, name: "", @@ -55,7 +55,7 @@ export namespace Keybind { break case "alt": case "option": - info.option = true + info.meta = true break case "shift": info.shift = true diff --git a/packages/opencode/test/keybind.test.ts b/packages/opencode/test/keybind.test.ts index ee8b626b7..7ef36f2c5 100644 --- a/packages/opencode/test/keybind.test.ts +++ b/packages/opencode/test/keybind.test.ts @@ -3,107 +3,107 @@ import { Keybind } from "../src/util/keybind" describe("Keybind.toString", () => { test("should convert simple key to string", () => { - const info: Keybind.Info = { ctrl: false, option: false, shift: false, leader: false, name: "f" } + const info: Keybind.Info = { ctrl: false, meta: false, shift: false, leader: false, name: "f" } expect(Keybind.toString(info)).toBe("f") }) test("should convert ctrl modifier to string", () => { - const info: Keybind.Info = { ctrl: true, option: false, shift: false, leader: false, name: "x" } + const info: Keybind.Info = { ctrl: true, meta: false, shift: false, leader: false, name: "x" } expect(Keybind.toString(info)).toBe("ctrl+x") }) test("should convert leader key to string", () => { - const info: Keybind.Info = { ctrl: false, option: false, shift: false, leader: true, name: "f" } + const info: Keybind.Info = { ctrl: false, meta: false, shift: false, leader: true, name: "f" } expect(Keybind.toString(info)).toBe(" f") }) test("should convert multiple modifiers to string", () => { - const info: Keybind.Info = { ctrl: true, option: true, shift: false, leader: false, name: "g" } + const info: Keybind.Info = { ctrl: true, meta: true, shift: false, leader: false, name: "g" } expect(Keybind.toString(info)).toBe("ctrl+alt+g") }) test("should convert all modifiers to string", () => { - const info: Keybind.Info = { ctrl: true, option: true, shift: true, leader: true, name: "h" } + const info: Keybind.Info = { ctrl: true, meta: true, shift: true, leader: true, name: "h" } expect(Keybind.toString(info)).toBe(" ctrl+alt+shift+h") }) test("should convert shift modifier to string", () => { - const info: Keybind.Info = { ctrl: false, option: false, shift: true, leader: false, name: "enter" } + const info: Keybind.Info = { ctrl: false, meta: false, shift: true, leader: false, name: "enter" } expect(Keybind.toString(info)).toBe("shift+enter") }) test("should convert function key to string", () => { - const info: Keybind.Info = { ctrl: false, option: false, shift: false, leader: false, name: "f2" } + const info: Keybind.Info = { ctrl: false, meta: false, shift: false, leader: false, name: "f2" } expect(Keybind.toString(info)).toBe("f2") }) test("should convert special key to string", () => { - const info: Keybind.Info = { ctrl: false, option: false, shift: false, leader: false, name: "pgup" } + const info: Keybind.Info = { ctrl: false, meta: false, shift: false, leader: false, name: "pgup" } expect(Keybind.toString(info)).toBe("pgup") }) test("should handle empty name", () => { - const info: Keybind.Info = { ctrl: true, option: false, shift: false, leader: false, name: "" } + const info: Keybind.Info = { ctrl: true, meta: false, shift: false, leader: false, name: "" } expect(Keybind.toString(info)).toBe("ctrl") }) test("should handle only modifiers", () => { - const info: Keybind.Info = { ctrl: true, option: true, shift: true, leader: true, name: "" } + const info: Keybind.Info = { ctrl: true, meta: true, shift: true, leader: true, name: "" } expect(Keybind.toString(info)).toBe(" ctrl+alt+shift") }) test("should handle only leader with no other parts", () => { - const info: Keybind.Info = { ctrl: false, option: false, shift: false, leader: true, name: "" } + const info: Keybind.Info = { ctrl: false, meta: false, shift: false, leader: true, name: "" } expect(Keybind.toString(info)).toBe("") }) }) describe("Keybind.match", () => { test("should match identical keybinds", () => { - const a: Keybind.Info = { ctrl: true, option: false, shift: false, leader: false, name: "x" } - const b: Keybind.Info = { ctrl: true, option: false, shift: false, leader: false, name: "x" } + const a: Keybind.Info = { ctrl: true, meta: false, shift: false, leader: false, name: "x" } + const b: Keybind.Info = { ctrl: true, meta: false, shift: false, leader: false, name: "x" } expect(Keybind.match(a, b)).toBe(true) }) test("should not match different key names", () => { - const a: Keybind.Info = { ctrl: true, option: false, shift: false, leader: false, name: "x" } - const b: Keybind.Info = { ctrl: true, option: false, shift: false, leader: false, name: "y" } + const a: Keybind.Info = { ctrl: true, meta: false, shift: false, leader: false, name: "x" } + const b: Keybind.Info = { ctrl: true, meta: false, shift: false, leader: false, name: "y" } expect(Keybind.match(a, b)).toBe(false) }) test("should not match different modifiers", () => { - const a: Keybind.Info = { ctrl: true, option: false, shift: false, leader: false, name: "x" } - const b: Keybind.Info = { ctrl: false, option: false, shift: false, leader: false, name: "x" } + const a: Keybind.Info = { ctrl: true, meta: false, shift: false, leader: false, name: "x" } + const b: Keybind.Info = { ctrl: false, meta: false, shift: false, leader: false, name: "x" } expect(Keybind.match(a, b)).toBe(false) }) test("should match leader keybinds", () => { - const a: Keybind.Info = { ctrl: false, option: false, shift: false, leader: true, name: "f" } - const b: Keybind.Info = { ctrl: false, option: false, shift: false, leader: true, name: "f" } + const a: Keybind.Info = { ctrl: false, meta: false, shift: false, leader: true, name: "f" } + const b: Keybind.Info = { ctrl: false, meta: false, shift: false, leader: true, name: "f" } expect(Keybind.match(a, b)).toBe(true) }) test("should not match leader vs non-leader", () => { - const a: Keybind.Info = { ctrl: false, option: false, shift: false, leader: true, name: "f" } - const b: Keybind.Info = { ctrl: false, option: false, shift: false, leader: false, name: "f" } + const a: Keybind.Info = { ctrl: false, meta: false, shift: false, leader: true, name: "f" } + const b: Keybind.Info = { ctrl: false, meta: false, shift: false, leader: false, name: "f" } expect(Keybind.match(a, b)).toBe(false) }) test("should match complex keybinds", () => { - const a: Keybind.Info = { ctrl: true, option: true, shift: false, leader: false, name: "g" } - const b: Keybind.Info = { ctrl: true, option: true, shift: false, leader: false, name: "g" } + const a: Keybind.Info = { ctrl: true, meta: true, shift: false, leader: false, name: "g" } + const b: Keybind.Info = { ctrl: true, meta: true, shift: false, leader: false, name: "g" } expect(Keybind.match(a, b)).toBe(true) }) test("should not match with one modifier different", () => { - const a: Keybind.Info = { ctrl: true, option: true, shift: false, leader: false, name: "g" } - const b: Keybind.Info = { ctrl: true, option: true, shift: true, leader: false, name: "g" } + const a: Keybind.Info = { ctrl: true, meta: true, shift: false, leader: false, name: "g" } + const b: Keybind.Info = { ctrl: true, meta: true, shift: true, leader: false, name: "g" } expect(Keybind.match(a, b)).toBe(false) }) test("should match simple key without modifiers", () => { - const a: Keybind.Info = { ctrl: false, option: false, shift: false, leader: false, name: "a" } - const b: Keybind.Info = { ctrl: false, option: false, shift: false, leader: false, name: "a" } + const a: Keybind.Info = { ctrl: false, meta: false, shift: false, leader: false, name: "a" } + const b: Keybind.Info = { ctrl: false, meta: false, shift: false, leader: false, name: "a" } expect(Keybind.match(a, b)).toBe(true) }) }) @@ -114,7 +114,7 @@ describe("Keybind.parse", () => { expect(result).toEqual([ { ctrl: false, - option: false, + meta: false, shift: false, leader: false, name: "f", @@ -127,7 +127,7 @@ describe("Keybind.parse", () => { expect(result).toEqual([ { ctrl: false, - option: false, + meta: false, shift: false, leader: true, name: "f", @@ -140,7 +140,7 @@ describe("Keybind.parse", () => { expect(result).toEqual([ { ctrl: true, - option: false, + meta: false, shift: false, leader: false, name: "x", @@ -153,7 +153,7 @@ describe("Keybind.parse", () => { expect(result).toEqual([ { ctrl: true, - option: true, + meta: true, shift: false, leader: false, name: "u", @@ -166,7 +166,7 @@ describe("Keybind.parse", () => { expect(result).toEqual([ { ctrl: false, - option: false, + meta: false, shift: true, leader: false, name: "f2", @@ -174,12 +174,12 @@ describe("Keybind.parse", () => { ]) }) - test("should parse option/alt modifier", () => { - const result = Keybind.parse("option+g") + test("should parse meta/alt modifier", () => { + const result = Keybind.parse("meta+g") expect(result).toEqual([ { ctrl: false, - option: true, + meta: true, shift: false, leader: false, name: "g", @@ -192,7 +192,7 @@ describe("Keybind.parse", () => { expect(result).toEqual([ { ctrl: false, - option: false, + meta: false, shift: false, leader: true, name: "h", @@ -205,14 +205,14 @@ describe("Keybind.parse", () => { expect(result).toEqual([ { ctrl: true, - option: false, + meta: false, shift: false, leader: false, name: "c", }, { ctrl: false, - option: false, + meta: false, shift: false, leader: true, name: "q", @@ -225,7 +225,7 @@ describe("Keybind.parse", () => { expect(result).toEqual([ { ctrl: false, - option: false, + meta: false, shift: true, leader: false, name: "enter", @@ -238,7 +238,7 @@ describe("Keybind.parse", () => { expect(result).toEqual([ { ctrl: true, - option: false, + meta: false, shift: false, leader: false, name: "j", @@ -256,7 +256,7 @@ describe("Keybind.parse", () => { expect(result).toEqual([ { ctrl: false, - option: false, + meta: false, shift: false, leader: false, name: "pgup", @@ -269,7 +269,7 @@ describe("Keybind.parse", () => { expect(result).toEqual([ { ctrl: false, - option: false, + meta: false, shift: false, leader: false, name: "f2", @@ -282,7 +282,7 @@ describe("Keybind.parse", () => { expect(result).toEqual([ { ctrl: true, - option: true, + meta: true, shift: false, leader: false, name: "g", @@ -295,7 +295,7 @@ describe("Keybind.parse", () => { expect(result).toEqual([ { ctrl: true, - option: false, + meta: false, shift: false, leader: false, name: "x",