@@ -92,9 +92,7 @@ export class AccessibilityManager extends Disposable {
92
92
this . _accessiblityBuffer = document . createElement ( 'div' ) ;
93
93
this . _accessiblityBuffer . ariaLabel = Strings . accessibilityBuffer ;
94
94
this . _accessiblityBuffer . classList . add ( 'xterm-accessibility-buffer' ) ;
95
-
96
- // HACK: this is needed when content editable is false
97
- this . _refreshAccessibilityBuffer ( ) ;
95
+ this . _accessiblityBuffer . contentEditable = 'true' ;
98
96
this . _accessiblityBuffer . addEventListener ( 'focus' , ( ) => this . _refreshAccessibilityBuffer ( ) ) ;
99
97
this . _terminal . element . insertAdjacentElement ( 'afterbegin' , this . _accessiblityBuffer ) ;
100
98
@@ -325,16 +323,24 @@ export class AccessibilityManager extends Disposable {
325
323
return ;
326
324
}
327
325
328
- const { bufferElements } = this . _terminal . viewport . getBufferElements ( 0 ) ;
326
+ const { bufferElements, cursorElement } = this . _terminal . viewport . getBufferElements ( 0 ) ;
329
327
for ( const element of bufferElements ) {
330
328
if ( element . textContent ) {
331
329
element . textContent = element . textContent . replace ( new RegExp ( ' ' , 'g' ) , '\xA0' ) ;
332
330
}
333
331
}
334
- this . _accessiblityBuffer . tabIndex = 0 ;
335
332
this . _accessiblityBuffer . ariaRoleDescription = 'document' ;
336
333
this . _accessiblityBuffer . replaceChildren ( ...bufferElements ) ;
337
334
this . _accessiblityBuffer . scrollTop = this . _accessiblityBuffer . scrollHeight ;
335
+ const s = document . getSelection ( ) ;
336
+ if ( s && cursorElement ) {
337
+ s . removeAllRanges ( ) ;
338
+ const r = document . createRange ( ) ;
339
+ r . selectNode ( bufferElements [ bufferElements . length - 1 ] ) ;
340
+ r . setStart ( cursorElement , 0 ) ;
341
+ r . setEnd ( cursorElement , 0 ) ;
342
+ s . addRange ( r ) ;
343
+ }
338
344
this . _accessiblityBuffer . focus ( ) ;
339
345
}
340
346
0 commit comments