@@ -28,7 +28,7 @@ export class AccessibilityManager extends Disposable {
2828 private _rowElements : HTMLElement [ ] ;
2929 private _liveRegion : HTMLElement ;
3030 private _liveRegionLineCount : number = 0 ;
31- private _accessiblityBuffer : HTMLElement ;
31+ private _accessiblityBuffer : HTMLTextAreaElement ;
3232
3333 private _renderRowsDebouncer : IRenderDebouncer ;
3434 private _screenDprMonitor : ScreenDprMonitor ;
@@ -89,7 +89,7 @@ export class AccessibilityManager extends Disposable {
8989 throw new Error ( 'Cannot enable accessibility before Terminal.open' ) ;
9090 }
9191
92- this . _accessiblityBuffer = document . createElement ( 'div ' ) ;
92+ this . _accessiblityBuffer = document . createElement ( 'textarea ' ) ;
9393 this . _accessiblityBuffer . ariaLabel = Strings . accessibilityBuffer ;
9494 this . _accessiblityBuffer . classList . add ( 'xterm-accessibility-buffer' ) ;
9595 this . _accessiblityBuffer . contentEditable = 'true' ;
@@ -323,25 +323,23 @@ export class AccessibilityManager extends Disposable {
323323 return ;
324324 }
325325
326- const { bufferElements, cursorElement } = this . _terminal . viewport . getBufferElements ( 0 ) ;
326+ const { bufferElements } = this . _terminal . viewport . getBufferElements ( 0 ) ;
327+ const content = [ ] ;
327328 for ( const element of bufferElements ) {
328329 if ( element . textContent ) {
329- element . textContent = element . textContent . replace ( new RegExp ( ' ' , 'g' ) , '\xA0' ) ;
330+ content . push ( element . textContent . replace ( new RegExp ( ' ' , 'g' ) , '\xA0' ) ) ;
330331 }
331332 }
332- this . _accessiblityBuffer . ariaRoleDescription = 'document' ;
333- this . _accessiblityBuffer . replaceChildren ( ...bufferElements ) ;
333+ this . _accessiblityBuffer . textContent = content . join ( '\n' ) ;
334+ this . _accessiblityBuffer . tabIndex = 0 ;
335+ this . _accessiblityBuffer . ariaRoleDescription = 'textbox' ;
336+ this . _accessibilityTreeRoot . spellcheck = false ;
334337 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- }
344338 this . _accessiblityBuffer . focus ( ) ;
339+
340+ const end = this . _accessiblityBuffer . value . length ;
341+ this . _accessiblityBuffer . scrollTop = this . _accessiblityBuffer . scrollHeight ;
342+ this . _accessiblityBuffer . setSelectionRange ( end , end ) ;
345343 }
346344
347345 private _handleColorChange ( colorSet : ReadonlyColorSet ) : void {
0 commit comments