Fix Ctrl+Alt key matching in tmux (#2989)
This commit is contained in:
@@ -1130,8 +1130,10 @@ export function matchesKey(data: string, keyId: KeyId): boolean {
|
|||||||
const isDigit = isDigitKey(key);
|
const isDigit = isDigitKey(key);
|
||||||
|
|
||||||
if (ctrl && alt && !shift && !_kittyProtocolActive && rawCtrl) {
|
if (ctrl && alt && !shift && !_kittyProtocolActive && rawCtrl) {
|
||||||
// Legacy: ctrl+alt+key is ESC followed by the control character
|
// Legacy: ctrl+alt+key is ESC followed by the control character.
|
||||||
return data === `\x1b${rawCtrl}`;
|
// If that legacy form does not match, continue so CSI-u and
|
||||||
|
// modifyOtherKeys sequences from tmux can still be recognized.
|
||||||
|
if (data === `\x1b${rawCtrl}`) return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (alt && !ctrl && !shift && !_kittyProtocolActive && (isLetter || isDigit)) {
|
if (alt && !ctrl && !shift && !_kittyProtocolActive && (isLetter || isDigit)) {
|
||||||
|
|||||||
@@ -239,6 +239,18 @@ describe("matchesKey", () => {
|
|||||||
assert.strictEqual(parseKey("\x1b[27;5;49~"), "ctrl+1");
|
assert.strictEqual(parseKey("\x1b[27;5;49~"), "ctrl+1");
|
||||||
assert.strictEqual(parseKey("\x1b[27;2;49~"), "shift+1");
|
assert.strictEqual(parseKey("\x1b[27;2;49~"), "shift+1");
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it("should match Ctrl+Alt+letter via CSI-u when kitty inactive", () => {
|
||||||
|
setKittyProtocolActive(false);
|
||||||
|
assert.strictEqual(matchesKey("\x1b[104;7u", "ctrl+alt+h"), true);
|
||||||
|
assert.strictEqual(parseKey("\x1b[104;7u"), "ctrl+alt+h");
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should match Ctrl+Alt+letter via xterm modifyOtherKeys", () => {
|
||||||
|
setKittyProtocolActive(false);
|
||||||
|
assert.strictEqual(matchesKey("\x1b[27;7;104~", "ctrl+alt+h"), true);
|
||||||
|
assert.strictEqual(parseKey("\x1b[27;7;104~"), "ctrl+alt+h");
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe("Legacy key matching", () => {
|
describe("Legacy key matching", () => {
|
||||||
|
|||||||
Reference in New Issue
Block a user