mirror of
https://github.com/binaricat/Netcatty.git
synced 2026-10-09 15:58:34 +00:00
88142d2a92
* fix: let Ctrl+C send SIGINT when no text is selected in terminal When the copy shortcut is customized to Ctrl+C (default Ctrl+Shift+C), the terminal always consumed the event for copy even without a text selection, preventing the standard Ctrl+C → SIGINT interrupt signal. Added a guard in attachCustomKeyEventHandler: if the matched action is 'copy' and term.hasSelection() is false, return true to pass the event through to xterm.js, which encodes it as \x03 (ETX) for normal SIGINT delivery. When text IS selected, copy proceeds as before. This change is platform-agnostic (renderer-side only) and does not affect any other terminal actions or default key bindings. * fix: gate copy passthrough on Ctrl+C/⌃C interrupt chord specifically The previous fix passed ALL no-selection copy bindings through to xterm, which would send unintended escape/control sequences to the remote process if copy were bound to keys like F5 or Ctrl+L. Now gate the passthrough on the exact interrupt chord: Ctrl+C (PC) or ⌃C (Mac) — key 'c' with only Ctrl pressed, no Shift/Alt/Meta. Any other copy binding with no selection is consumed as a safe no-op. * fix: preserve Ctrl-C passthrough for copy shortcut --------- Co-authored-by: bincxz <16399091+binaricat@users.noreply.github.com>
21 lines
544 B
TypeScript
21 lines
544 B
TypeScript
type CopyShortcutKeyEvent = Pick<
|
|
KeyboardEvent,
|
|
"key" | "code" | "ctrlKey" | "shiftKey" | "altKey" | "metaKey"
|
|
>;
|
|
|
|
export function isPlainCtrlCInterruptChord(e: CopyShortcutKeyEvent): boolean {
|
|
return e.ctrlKey
|
|
&& !e.shiftKey
|
|
&& !e.altKey
|
|
&& !e.metaKey
|
|
&& (e.key.toLowerCase() === "c" || e.code === "KeyC");
|
|
}
|
|
|
|
export function shouldPassThroughCopyShortcut(
|
|
action: string,
|
|
hasSelection: boolean,
|
|
e: CopyShortcutKeyEvent,
|
|
): boolean {
|
|
return action === "copy" && !hasSelection && isPlainCtrlCInterruptChord(e);
|
|
}
|