mirror of
https://github.com/Termix-SSH/Termix.git
synced 2026-08-29 18:31:33 +00:00
fix: recognize Windows terminal Tab events (#1109)
* fix: recognize Windows terminal Tab events * style: format terminal key event test
This commit is contained in:
@@ -65,6 +65,7 @@ import {
|
|||||||
getNextTerminalFontSize,
|
getNextTerminalFontSize,
|
||||||
getTerminalFontZoomDirection,
|
getTerminalFontZoomDirection,
|
||||||
} from "./terminal-font-zoom.ts";
|
} from "./terminal-font-zoom.ts";
|
||||||
|
import { isTabKeyEvent } from "./terminal-key-event.ts";
|
||||||
import {
|
import {
|
||||||
getUserPreferences,
|
getUserPreferences,
|
||||||
parseCustomKeybindings,
|
parseCustomKeybindings,
|
||||||
@@ -2328,7 +2329,7 @@ const TerminalInner = forwardRef<TerminalHandle, SSHTerminalProps>(
|
|||||||
// the capture phase blocks that traversal while still allowing the event to
|
// the capture phase blocks that traversal while still allowing the event to
|
||||||
// reach xterm.js's internal handler (which fires our attachCustomKeyEventHandler).
|
// reach xterm.js's internal handler (which fires our attachCustomKeyEventHandler).
|
||||||
const handleTabCapture = (e: KeyboardEvent) => {
|
const handleTabCapture = (e: KeyboardEvent) => {
|
||||||
if (e.key === "Tab") {
|
if (isTabKeyEvent(e)) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -2678,7 +2679,7 @@ const TerminalInner = forwardRef<TerminalHandle, SSHTerminalProps>(
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (
|
if (
|
||||||
e.key === "Tab" &&
|
isTabKeyEvent(e) &&
|
||||||
!e.ctrlKey &&
|
!e.ctrlKey &&
|
||||||
!e.altKey &&
|
!e.altKey &&
|
||||||
!e.metaKey &&
|
!e.metaKey &&
|
||||||
@@ -2701,7 +2702,7 @@ const TerminalInner = forwardRef<TerminalHandle, SSHTerminalProps>(
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (
|
if (
|
||||||
e.key === "Tab" &&
|
isTabKeyEvent(e) &&
|
||||||
e.shiftKey &&
|
e.shiftKey &&
|
||||||
!e.ctrlKey &&
|
!e.ctrlKey &&
|
||||||
!e.altKey &&
|
!e.altKey &&
|
||||||
@@ -2718,7 +2719,7 @@ const TerminalInner = forwardRef<TerminalHandle, SSHTerminalProps>(
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (
|
if (
|
||||||
e.key === "Tab" &&
|
isTabKeyEvent(e) &&
|
||||||
!e.ctrlKey &&
|
!e.ctrlKey &&
|
||||||
!e.altKey &&
|
!e.altKey &&
|
||||||
!e.metaKey &&
|
!e.metaKey &&
|
||||||
|
|||||||
@@ -0,0 +1,3 @@
|
|||||||
|
export function isTabKeyEvent(event: KeyboardEvent): boolean {
|
||||||
|
return event.key === "Tab" || event.code === "Tab" || event.keyCode === 9;
|
||||||
|
}
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
import { describe, expect, it } from "vitest";
|
||||||
|
import { isTabKeyEvent } from "@/features/terminal/terminal-key-event";
|
||||||
|
|
||||||
|
describe("isTabKeyEvent", () => {
|
||||||
|
it.each([
|
||||||
|
["key", new KeyboardEvent("keydown", { key: "Tab" })],
|
||||||
|
["code", new KeyboardEvent("keydown", { code: "Tab" })],
|
||||||
|
[
|
||||||
|
"legacy keyCode",
|
||||||
|
new KeyboardEvent("keydown", { keyCode: 9 } as KeyboardEventInit),
|
||||||
|
],
|
||||||
|
])("recognizes Tab from %s", (_source, event) => {
|
||||||
|
expect(isTabKeyEvent(event)).toBe(true);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("does not treat another key as Tab", () => {
|
||||||
|
expect(isTabKeyEvent(new KeyboardEvent("keydown", { key: "Enter" }))).toBe(
|
||||||
|
false,
|
||||||
|
);
|
||||||
|
});
|
||||||
|
});
|
||||||
Reference in New Issue
Block a user