feat: add Ctrl+Alt key remapping for browser-blocked shortcuts (#501)
Browsers intercept Ctrl+W/T/N/Q, making them unusable in terminal. This adds Ctrl+Alt+<key> as an alternative that sends Ctrl+<key>. - Ctrl+Alt+W → Ctrl+W (nano search, delete word) - Ctrl+Alt+T → Ctrl+T (transpose chars) - Ctrl+Alt+N → Ctrl+N (next line) - Ctrl+Alt+Q → Ctrl+Q (XON flow control) Fixes Termix-SSH/Support#407
This commit was merged in pull request #501.
This commit is contained in:
@@ -1349,6 +1349,24 @@ export const Terminal = forwardRef<TerminalHandle, SSHTerminalProps>(
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Ctrl+Alt+<key> → Ctrl+<key> remapping for browser-blocked shortcuts
|
||||||
|
// Browsers intercept Ctrl+W/T/N/Q, so we use Ctrl+Alt as an alternative
|
||||||
|
if (e.ctrlKey && e.altKey && !e.metaKey && !e.shiftKey) {
|
||||||
|
const key = e.key.toLowerCase();
|
||||||
|
const blockedKeys = ["w", "t", "n", "q"];
|
||||||
|
if (blockedKeys.includes(key)) {
|
||||||
|
e.preventDefault();
|
||||||
|
e.stopPropagation();
|
||||||
|
const ctrlCode = key.charCodeAt(0) - 96;
|
||||||
|
if (webSocketRef.current?.readyState === 1) {
|
||||||
|
webSocketRef.current.send(
|
||||||
|
JSON.stringify({ type: "input", data: String.fromCharCode(ctrlCode) }),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (showAutocompleteRef.current) {
|
if (showAutocompleteRef.current) {
|
||||||
if (e.key === "Escape") {
|
if (e.key === "Escape") {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
|
|||||||
Reference in New Issue
Block a user