@@ -1156,9 +1156,10 @@ export class CoreBrowserTerminal extends CoreTerminal implements ITerminal {
11561156 this . textarea ! . value = '' ;
11571157 }
11581158
1159+ const wasModifierOnly = this . _keyboardService . useWin32InputMode && wasModifierKeyOnlyEvent ( event ) ;
11591160 this . _onKey . fire ( { key : result . key , domEvent : event } ) ;
11601161 this . _showCursor ( ) ;
1161- this . coreService . triggerDataEvent ( result . key , true ) ;
1162+ this . coreService . triggerDataEvent ( result . key , ! wasModifierOnly ) ;
11621163
11631164 // Cancel events when not in screen reader mode so events don't get bubbled up and handled by
11641165 // other listeners. When screen reader mode is enabled, we don't cancel them (unless ctrl or alt
@@ -1199,7 +1200,8 @@ export class CoreBrowserTerminal extends CoreTerminal implements ITerminal {
11991200 // Handle key release for Kitty keyboard protocol
12001201 const result = this . _keyboardService . evaluateKeyUp ( ev ) ;
12011202 if ( result ?. key ) {
1202- this . coreService . triggerDataEvent ( result . key , true ) ;
1203+ const wasModifierOnly = this . _keyboardService . useWin32InputMode && wasModifierKeyOnlyEvent ( ev ) ;
1204+ this . coreService . triggerDataEvent ( result . key , ! wasModifierOnly ) ;
12031205 }
12041206
12051207 this . updateCursorStyle ( ev ) ;
@@ -1410,5 +1412,10 @@ export class CoreBrowserTerminal extends CoreTerminal implements ITerminal {
14101412function wasModifierKeyOnlyEvent ( ev : KeyboardEvent ) : boolean {
14111413 return ev . keyCode === 16 || // Shift
14121414 ev . keyCode === 17 || // Ctrl
1413- ev . keyCode === 18 ; // Alt
1415+ ev . keyCode === 18 || // Alt
1416+ ev . keyCode === 91 || // Meta (Left)
1417+ ev . keyCode === 92 || // Meta (Right)
1418+ ev . keyCode === 93 || // Meta (Menu)
1419+ ev . keyCode === 224 || // Meta (Firefox)
1420+ ev . key === 'Meta' ;
14141421}
0 commit comments