Fix legacy pgup/pgdown TUI keybind aliases (#28275)
This commit is contained in:
@@ -29,6 +29,8 @@ export type OpenTuiKeymap = ReturnType<typeof useKeymap>
|
|||||||
const KEY_ALIASES = {
|
const KEY_ALIASES = {
|
||||||
enter: "return",
|
enter: "return",
|
||||||
esc: "escape",
|
esc: "escape",
|
||||||
|
pgdown: "pagedown",
|
||||||
|
pgup: "pageup",
|
||||||
} as const
|
} as const
|
||||||
|
|
||||||
function expandKeyAliases(input: string) {
|
function expandKeyAliases(input: string) {
|
||||||
|
|||||||
@@ -0,0 +1,54 @@
|
|||||||
|
/** @jsxImportSource @opentui/solid */
|
||||||
|
import { createDefaultOpenTuiKeymap } from "@opentui/keymap/opentui"
|
||||||
|
import { testRender, useRenderer } from "@opentui/solid"
|
||||||
|
import { expect, test } from "bun:test"
|
||||||
|
import { onCleanup } from "solid-js"
|
||||||
|
import { createTuiResolvedConfig } from "../../fixture/tui-runtime"
|
||||||
|
import { OpencodeKeymapProvider, registerOpencodeKeymap } from "@/cli/cmd/tui/keymap"
|
||||||
|
|
||||||
|
test("legacy page key aliases compile as page keys", async () => {
|
||||||
|
const sequences: Record<string, string[][]> = {}
|
||||||
|
|
||||||
|
function Harness() {
|
||||||
|
const renderer = useRenderer()
|
||||||
|
const keymap = createDefaultOpenTuiKeymap(renderer)
|
||||||
|
const config = createTuiResolvedConfig({
|
||||||
|
keybinds: {
|
||||||
|
messages_page_up: "pgup",
|
||||||
|
messages_page_down: "pgdown",
|
||||||
|
},
|
||||||
|
})
|
||||||
|
const offKeymap = registerOpencodeKeymap(keymap, renderer, config)
|
||||||
|
const offLayer = keymap.registerLayer({
|
||||||
|
bindings: config.keybinds.gather("session", ["session.page.up", "session.page.down"]),
|
||||||
|
})
|
||||||
|
const bindings = keymap.getCommandBindings({
|
||||||
|
visibility: "registered",
|
||||||
|
commands: ["session.page.up", "session.page.down"],
|
||||||
|
})
|
||||||
|
sequences.up =
|
||||||
|
bindings.get("session.page.up")?.map((binding) => binding.sequence.map((part) => part.stroke.name)) ?? []
|
||||||
|
sequences.down =
|
||||||
|
bindings.get("session.page.down")?.map((binding) => binding.sequence.map((part) => part.stroke.name)) ?? []
|
||||||
|
onCleanup(() => {
|
||||||
|
offLayer()
|
||||||
|
offKeymap()
|
||||||
|
})
|
||||||
|
|
||||||
|
return (
|
||||||
|
<OpencodeKeymapProvider keymap={keymap}>
|
||||||
|
<box />
|
||||||
|
</OpencodeKeymapProvider>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
const app = await testRender(() => <Harness />)
|
||||||
|
try {
|
||||||
|
expect(sequences).toEqual({
|
||||||
|
up: [["pageup"]],
|
||||||
|
down: [["pagedown"]],
|
||||||
|
})
|
||||||
|
} finally {
|
||||||
|
app.renderer.destroy()
|
||||||
|
}
|
||||||
|
})
|
||||||
Reference in New Issue
Block a user