diff --git a/web/src/reader/reader.ts b/web/src/reader/reader.ts index 805e99b..2af8020 100644 --- a/web/src/reader/reader.ts +++ b/web/src/reader/reader.ts @@ -2493,11 +2493,18 @@ document.addEventListener("alpine:init", () => { }, handleKeydown(event: KeyboardEvent) { const k = event.key; - // Never hijack keys while the user is typing in a form control. - const tag = (event.target as HTMLElement)?.tagName; + // Never hijack keys while the user is typing in a form control: the + // field must receive h/l page turns, +/− zoom, and caret arrows. + // Escape stays live so popovers/drawers can still be dismissed from + // the keyboard even mid-note. + const t = event.target as HTMLElement | null; const typing = - tag === "INPUT" || tag === "SELECT" || tag === "TEXTAREA"; + t?.tagName === "INPUT" || + t?.tagName === "SELECT" || + t?.tagName === "TEXTAREA" || + !!t?.isContentEditable; this.pokeChrome(); + if (typing && k !== "Escape") return; if (k === "ArrowLeft" || k === "h") { if (event.altKey) { event.preventDefault(); @@ -2526,7 +2533,7 @@ document.addEventListener("alpine:init", () => { } else if (k === "F1") { event.preventDefault(); this.toggleHelp(); - } else if (!typing) { + } else { if (k === "t") this.toggleTOC(); else if (k === "s") this.toggleSettings(); else if (k === "b") this.addBookmark();