From d1ac265d79f65ec75618839a52dd7b1e806822bb Mon Sep 17 00:00:00 2001 From: Eugene Pankov Date: Wed, 23 Feb 2022 21:47:46 +0100 Subject: [PATCH] xterm: passthrough arrows with modifiers when in alternate mode - fixes #2328 --- tabby-terminal/src/frontends/frontend.ts | 1 + tabby-terminal/src/frontends/xtermFrontend.ts | 14 ++++++++++++++ 2 files changed, 15 insertions(+) diff --git a/tabby-terminal/src/frontends/frontend.ts b/tabby-terminal/src/frontends/frontend.ts index ee3018ed..340a126e 100644 --- a/tabby-terminal/src/frontends/frontend.ts +++ b/tabby-terminal/src/frontends/frontend.ts @@ -82,4 +82,5 @@ export abstract class Frontend { abstract restoreState (state: string): void abstract supportsBracketedPaste (): boolean + abstract isAlternateScreenActive (): boolean } diff --git a/tabby-terminal/src/frontends/xtermFrontend.ts b/tabby-terminal/src/frontends/xtermFrontend.ts index 4ce6eddd..99eac0a3 100644 --- a/tabby-terminal/src/frontends/xtermFrontend.ts +++ b/tabby-terminal/src/frontends/xtermFrontend.ts @@ -86,6 +86,16 @@ export class XTermFrontend extends Frontend { this.xterm.unicode.activeVersion = '11' const keyboardEventHandler = (name: string, event: KeyboardEvent) => { + if (this.isAlternateScreenActive()) { + let modifiers = 0 + modifiers += event.ctrlKey ? 1 : 0 + modifiers += event.altKey ? 1 : 0 + modifiers += event.shiftKey ? 1 : 0 + modifiers += event.metaKey ? 1 : 0 + if (event.key.startsWith('Arrow') && modifiers === 1) { + return true + } + } this.hotkeysService.pushKeyEvent(name, event) let ret = true if (this.hotkeysService.matchActiveHotkey(true) !== null) { @@ -331,6 +341,10 @@ export class XTermFrontend extends Frontend { return this.xterm.modes.bracketedPasteMode } + isAlternateScreenActive (): boolean { + return this.xterm.buffer.active.type === 'alternate' + } + private setFontSize () { const scale = Math.pow(1.1, this.zoom) this.xterm.options.fontSize = this.configuredFontSize * scale