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);
|
||||
|
||||
if (ctrl && alt && !shift && !_kittyProtocolActive && rawCtrl) {
|
||||
// Legacy: ctrl+alt+key is ESC followed by the control character
|
||||
return data === `\x1b${rawCtrl}`;
|
||||
// Legacy: ctrl+alt+key is ESC followed by the control character.
|
||||
// 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)) {
|
||||
|
||||
@@ -239,6 +239,18 @@ describe("matchesKey", () => {
|
||||
assert.strictEqual(parseKey("\x1b[27;5;49~"), "ctrl+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", () => {
|
||||
|
||||
Reference in New Issue
Block a user