Merge pull request #5625 from Tyriar/kitty_shift_disambiguate
Don't disambiguous kitty keyboard on shift only
This commit is contained in:
@@ -33,12 +33,14 @@ describe('KittyKeyboard', () => {
|
|||||||
describe('modifier encoding (value = 1 + modifiers)', () => {
|
describe('modifier encoding (value = 1 + modifiers)', () => {
|
||||||
const flags = KittyKeyboardFlags.DISAMBIGUATE_ESCAPE_CODES;
|
const flags = KittyKeyboardFlags.DISAMBIGUATE_ESCAPE_CODES;
|
||||||
|
|
||||||
it('shift=2 (1+1)', () => {
|
it('shift+letter sends plain character in DISAMBIGUATE mode', () => {
|
||||||
const result = evaluateKeyboardEventKitty(createEvent({ key: 'a', shiftKey: true }), flags);
|
// Kitty spec: DISAMBIGUATE only encodes keys ambiguous in legacy encoding
|
||||||
assert.strictEqual(result.key, '\x1b[97;2u');
|
// Shift+a → "A" is not ambiguous, so send plain "A"
|
||||||
|
const result = evaluateKeyboardEventKitty(createEvent({ key: 'A', shiftKey: true }), flags);
|
||||||
|
assert.strictEqual(result.key, 'A');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('alt=3 (1+2)', () => {
|
it('alt=3 (1+2) still uses CSI u', () => {
|
||||||
const result = evaluateKeyboardEventKitty(createEvent({ key: 'a', altKey: true }), flags);
|
const result = evaluateKeyboardEventKitty(createEvent({ key: 'a', altKey: true }), flags);
|
||||||
assert.strictEqual(result.key, '\x1b[97;3u');
|
assert.strictEqual(result.key, '\x1b[97;3u');
|
||||||
});
|
});
|
||||||
@@ -598,9 +600,10 @@ describe('KittyKeyboard', () => {
|
|||||||
describe('edge cases', () => {
|
describe('edge cases', () => {
|
||||||
const flags = KittyKeyboardFlags.DISAMBIGUATE_ESCAPE_CODES;
|
const flags = KittyKeyboardFlags.DISAMBIGUATE_ESCAPE_CODES;
|
||||||
|
|
||||||
it('always uses lowercase codepoint for letters', () => {
|
it('shift+letter sends plain character in DISAMBIGUATE mode', () => {
|
||||||
|
// Shift+A produces printable "A", not ambiguous, so send plain character
|
||||||
const result = evaluateKeyboardEventKitty(createEvent({ key: 'A', shiftKey: true }), flags);
|
const result = evaluateKeyboardEventKitty(createEvent({ key: 'A', shiftKey: true }), flags);
|
||||||
assert.strictEqual(result.key, '\x1b[97;2u');
|
assert.strictEqual(result.key, 'A');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('ctrl+shift+a sends lowercase codepoint 97', () => {
|
it('ctrl+shift+a sends lowercase codepoint 97', () => {
|
||||||
|
|||||||
@@ -351,8 +351,13 @@ export function evaluateKeyboardEventKitty(
|
|||||||
} else if (isFunc) {
|
} else if (isFunc) {
|
||||||
useCsiU = true;
|
useCsiU = true;
|
||||||
} else if (modifiers > 0) {
|
} else if (modifiers > 0) {
|
||||||
// Any modified key
|
// Shift-only + printable character (e.g., Shift+a → "A") should NOT use CSI u
|
||||||
useCsiU = true;
|
// per Kitty spec: DISAMBIGUATE only encodes keys ambiguous in legacy encoding
|
||||||
|
if (ev.shiftKey && !ev.ctrlKey && !ev.altKey && !ev.metaKey && ev.key.length === 1) {
|
||||||
|
useCsiU = false;
|
||||||
|
} else {
|
||||||
|
useCsiU = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user