Only warn about mouse movement when the mouse is down. (#13101)

This commit is contained in:
Jacob Richman
2025-11-14 14:55:05 -08:00
committed by GitHub
parent 472e775a13
commit ab6b2293e1
5 changed files with 66 additions and 2 deletions

View File

@@ -27,6 +27,7 @@ describe('mouse utils', () => {
shift: false,
meta: false,
ctrl: false,
button: 'left',
});
expect(result!.length).toBe(input.length);
});
@@ -43,6 +44,7 @@ describe('mouse utils', () => {
shift: false,
meta: false,
ctrl: false,
button: 'left',
});
});
@@ -58,6 +60,7 @@ describe('mouse utils', () => {
shift: true,
meta: true,
ctrl: true,
button: 'left',
});
});
@@ -67,6 +70,7 @@ describe('mouse utils', () => {
const result = parseSGRMouseEvent(input);
expect(result).not.toBeNull();
expect(result!.event.name).toBe('move');
expect(result!.event.button).toBe('left');
});
it('parses SGR scroll events', () => {
@@ -100,6 +104,7 @@ describe('mouse utils', () => {
shift: false,
meta: false,
ctrl: false,
button: 'left',
});
expect(result!.length).toBe(6);
});

View File

@@ -33,6 +33,7 @@ export interface MouseEvent {
shift: boolean;
meta: boolean;
ctrl: boolean;
button: 'left' | 'middle' | 'right' | 'none';
}
export type MouseHandler = (event: MouseEvent) => void | boolean;
@@ -71,6 +72,20 @@ export function getMouseEventName(
}
}
function getButtonFromCode(code: number): MouseEvent['button'] {
const button = code & 3;
switch (button) {
case 0:
return 'left';
case 1:
return 'middle';
case 2:
return 'right';
default:
return 'none';
}
}
export function parseSGRMouseEvent(
buffer: string,
): { event: MouseEvent; length: number } | null {
@@ -98,6 +113,7 @@ export function parseSGRMouseEvent(
shift,
col,
row,
button: getButtonFromCode(buttonCode),
},
length: match[0].length,
};
@@ -165,8 +181,21 @@ export function parseX11MouseEvent(
}
if (name) {
let button = getButtonFromCode(b);
if (name === 'left-release' && button === 'none') {
button = 'left';
}
return {
event: { name, ctrl, meta, shift, col, row },
event: {
name,
ctrl,
meta,
shift,
col,
row,
button,
},
length: match[0].length,
};
}