@@ -92,9 +92,7 @@ export class AccessibilityManager extends Disposable {
9292 this . _accessiblityBuffer = document . createElement ( 'div' ) ;
9393 this . _accessiblityBuffer . ariaLabel = Strings . accessibilityBuffer ;
9494 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' ;
9896 this . _accessiblityBuffer . addEventListener ( 'focus' , ( ) => this . _refreshAccessibilityBuffer ( ) ) ;
9997 this . _terminal . element . insertAdjacentElement ( 'afterbegin' , this . _accessiblityBuffer ) ;
10098
@@ -325,16 +323,24 @@ export class AccessibilityManager extends Disposable {
325323 return ;
326324 }
327325
328- const { bufferElements } = this . _terminal . viewport . getBufferElements ( 0 ) ;
326+ const { bufferElements, cursorElement } = this . _terminal . viewport . getBufferElements ( 0 ) ;
329327 for ( const element of bufferElements ) {
330328 if ( element . textContent ) {
331329 element . textContent = element . textContent . replace ( new RegExp ( ' ' , 'g' ) , '\xA0' ) ;
332330 }
333331 }
334- this . _accessiblityBuffer . tabIndex = 0 ;
335332 this . _accessiblityBuffer . ariaRoleDescription = 'document' ;
336333 this . _accessiblityBuffer . replaceChildren ( ...bufferElements ) ;
337334 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+ }
338344 this . _accessiblityBuffer . focus ( ) ;
339345 }
340346
0 commit comments