Change:
<!-- Do Not Delete This! bugreporttemplate --<!-- Please read our Rules of Conduct: --<!-- Read our guide about submitting issues: --<!-- Search existing issues to avoid creating duplicates. --<!-- Test using the latest Insiders build to see if your issue has already been fixed: --<!-- Instead of creating your report here, use 'Report Issue' from the 'Help' menu in VS Code to pre-fill useful information. --- VS Code Version: OS Version: Steps to Reproduce: a browser version vscode a editor with readonly mode extension who use the API would be invalid This issue won't be occured on desktop version. Follow code show more details: the attribute is used to disable keyboard popping in mobile devices, but it break the event too. Change the to may be better <!-- Launch with to check. --Does this issue occur when all extensions are disabled?: Yes <!-- If you answered No above, use 'Help: Start Extension Bisect' from Command Palette to try to identify the cause. --<!-- Issues caused by an extension need to be reported direct to the extension publisher. The 'Help Report Issue' dialog can assist with this. --
Can you please give an example of how behaves differently? I am not 100% convinced that there is a bug here. I would expect that is never called, not in desktop and also not in web.
There is a way that are relatively easy to reproduce this bug, when someone use GitHub CodeSpaces (because the bug only occured in browser version): the extension and the Extension. (the extension require the API for basic cursor motion, and the GitLens extension will provide can readonly mode editor) any file which has at least two commit, click in the editor menu title. ! we will get a readonly editor, but extension can not move cursor by pressing key here. The readonly attribute was in this commit: As the message describe, it used to disable keyboard popping up on mobile devices, and there is no condition at the earliest time. and then add the condition at this commit by you , I guess that's the readonly attribute cause some bug at desktop version at that time? Another thing, I think when we need consider the mobile devices, I think change the to may be better, but there is not a option named in , so I just change it to at .
To verify, install vim in the browser and use it in a readonly editor (e.g. left side of a diff editor).

Discussion:
this.textArea.setAttribute('aria-haspopup', 'false'); this.textArea.setAttribute('aria-autocomplete', 'both'); <del> if (platform.isWeb && options.get(EditorOption.readOnly)) { </del> <ins> if (options.get(EditorOption.domReadOnly)) { </ins> this.textArea.setAttribute('readonly', 'true'); }

this.textArea.setAttribute('aria-label', this._getAriaLabel(options)); this.textArea.setAttribute('tabindex', String(options.get(EditorOption.tabIndex))); <del> if (platform.isWeb && e.hasChanged(EditorOption.readOnly)) { if (options.get(EditorOption.readOnly)) { </del> <ins> if (e.hasChanged(EditorOption.domReadOnly)) { if (options.get(EditorOption.domReadOnly)) { </ins> this.textArea.setAttribute('readonly', 'true'); } else { this.textArea.removeAttribute('readonly');

cursorWidth, disableLayerHinting, disableMonospaceOptimizations, <ins> domReadOnly, </ins> dragAndDrop, emptySelectionClipboard, extraEditorClassName,

disableMonospaceOptimizations: register(new EditorBooleanOption( EditorOption.disableMonospaceOptimizations, 'disableMonospaceOptimizations', false )), <ins> domReadOnly: register(new EditorBooleanOption( EditorOption.domReadOnly, 'domReadOnly', false, )), </ins> dragAndDrop: register(new EditorBooleanOption( EditorOption.dragAndDrop, 'dragAndDrop', true, { description: nls.localize('dragAndDrop', "Controls whether the editor should allow moving selections via drag and drop.") }

cursorWidth = 25, disableLayerHinting = 26, disableMonospaceOptimizations = 27, <del> dragAndDrop = 28, emptySelectionClipboard = 29, extraEditorClassName = 30, fastScrollSensitivity = 31, find = 32, fixedOverflowWidgets = 33, folding = 34, foldingStrategy = 35, foldingHighlight = 36, unfoldOnClickAfterEndOfLine = 37, fontFamily = 38, fontInfo = 39, fontLigatures = 40, fontSize = 41, fontWeight = 42, formatOnPaste = 43, formatOnType = 44, glyphMargin = 45, gotoLocation = 46, hideCursorInOverviewRuler = 47, highlightActiveIndentGuide = 48, hover = 49, inDiffEditor = 50, letterSpacing = 51, lightbulb = 52, lineDecorationsWidth = 53, lineHeight = 54, lineNumbers = 55, lineNumbersMinChars = 56, linkedEditing = 57, links = 58, matchBrackets = 59, minimap = 60, mouseStyle = 61, mouseWheelScrollSensitivity = 62, mouseWheelZoom = 63, multiCursorMergeOverlapping = 64, multiCursorModifier = 65, multiCursorPaste = 66, occurrencesHighlight = 67, overviewRulerBorder = 68, overviewRulerLanes = 69, padding = 70, parameterHints = 71, peekWidgetDefaultFocus = 72, definitionLinkOpensInPeek = 73, quickSuggestions = 74, quickSuggestionsDelay = 75, readOnly = 76, renameOnType = 77, renderControlCharacters = 78, renderIndentGuides = 79, renderFinalNewline = 80, renderLineHighlight = 81, renderLineHighlightOnlyWhenFocus = 82, renderValidationDecorations = 83, renderWhitespace = 84, revealHorizontalRightPadding = 85, roundedSelection = 86, rulers = 87, scrollbar = 88, scrollBeyondLastColumn = 89, scrollBeyondLastLine = 90, scrollPredominantAxis = 91, selectionClipboard = 92, selectionHighlight = 93, selectOnLineNumbers = 94, showFoldingControls = 95, showUnused = 96, snippetSuggestions = 97, smartSelect = 98, smoothScrolling = 99, stickyTabStops = 100, stopRenderingLineAfter = 101, suggest = 102, suggestFontSize = 103, suggestLineHeight = 104, suggestOnTriggerCharacters = 105, suggestSelection = 106, tabCompletion = 107, tabIndex = 108, unusualLineTerminators = 109, useTabStops = 110, wordSeparators = 111, wordWrap = 112, wordWrapBreakAfterCharacters = 113, wordWrapBreakBeforeCharacters = 114, wordWrapColumn = 115, wordWrapOverride1 = 116, wordWrapOverride2 = 117, wrappingIndent = 118, wrappingStrategy = 119, showDeprecated = 120, inlineHints = 121, editorClassName = 122, pixelRatio = 123, tabFocusMode = 124, layoutInfo = 125, wrappingInfo = 126 </del> <ins> domReadOnly = 28, dragAndDrop = 29, emptySelectionClipboard = 30, extraEditorClassName = 31, fastScrollSensitivity = 32, find = 33, fixedOverflowWidgets = 34, folding = 35, foldingStrategy = 36, foldingHighlight = 37, unfoldOnClickAfterEndOfLine = 38, fontFamily = 39, fontInfo = 40, fontLigatures = 41, fontSize = 42, fontWeight = 43, formatOnPaste = 44, formatOnType = 45, glyphMargin = 46, gotoLocation = 47, hideCursorInOverviewRuler = 48, highlightActiveIndentGuide = 49, hover = 50, inDiffEditor = 51, letterSpacing = 52, lightbulb = 53, lineDecorationsWidth = 54, lineHeight = 55, lineNumbers = 56, lineNumbersMinChars = 57, linkedEditing = 58, links = 59, matchBrackets = 60, minimap = 61, mouseStyle = 62, mouseWheelScrollSensitivity = 63, mouseWheelZoom = 64, multiCursorMergeOverlapping = 65, multiCursorModifier = 66, multiCursorPaste = 67, occurrencesHighlight = 68, overviewRulerBorder = 69, overviewRulerLanes = 70, padding = 71, parameterHints = 72, peekWidgetDefaultFocus = 73, definitionLinkOpensInPeek = 74, quickSuggestions = 75, quickSuggestionsDelay = 76, readOnly = 77, renameOnType = 78, renderControlCharacters = 79, renderIndentGuides = 80, renderFinalNewline = 81, renderLineHighlight = 82, renderLineHighlightOnlyWhenFocus = 83, renderValidationDecorations = 84, renderWhitespace = 85, revealHorizontalRightPadding = 86, roundedSelection = 87, rulers = 88, scrollbar = 89, scrollBeyondLastColumn = 90, scrollBeyondLastLine = 91, scrollPredominantAxis = 92, selectionClipboard = 93, selectionHighlight = 94, selectOnLineNumbers = 95, showFoldingControls = 96, showUnused = 97, snippetSuggestions = 98, smartSelect = 99, smoothScrolling = 100, stickyTabStops = 101, stopRenderingLineAfter = 102, suggest = 103, suggestFontSize = 104, suggestLineHeight = 105, suggestOnTriggerCharacters = 106, suggestSelection = 107, tabCompletion = 108, tabIndex = 109, unusualLineTerminators = 110, useTabStops = 111, wordSeparators = 112, wordWrap = 113, wordWrapBreakAfterCharacters = 114, wordWrapBreakBeforeCharacters = 115, wordWrapColumn = 116, wordWrapOverride1 = 117, wordWrapOverride2 = 118, wrappingIndent = 119, wrappingStrategy = 120, showDeprecated = 121, inlineHints = 122, editorClassName = 123, pixelRatio = 124, tabFocusMode = 125, layoutInfo = 126, wrappingInfo = 127 </ins> } /**

*/ extraEditorClassName?: string; /** <del> * Should the editor be read only. </del> <ins> * Should the editor be read only. See also `domReadOnly`. </ins> * Defaults to false. */ readOnly?: boolean; /** <ins> * Should the textarea used for input use the DOM `readonly` attribute. * Defaults to false. */ domReadOnly?: boolean; /** </ins> * Enable linked editing. * Defaults to false. */

cursorWidth = 25, disableLayerHinting = 26, disableMonospaceOptimizations = 27, <del> dragAndDrop = 28, emptySelectionClipboard = 29, extraEditorClassName = 30, fastScrollSensitivity = 31, find = 32, fixedOverflowWidgets = 33, folding = 34, foldingStrategy = 35, foldingHighlight = 36, unfoldOnClickAfterEndOfLine = 37, fontFamily = 38, fontInfo = 39, fontLigatures = 40, fontSize = 41, fontWeight = 42, formatOnPaste = 43, formatOnType = 44, glyphMargin = 45, gotoLocation = 46, hideCursorInOverviewRuler = 47, highlightActiveIndentGuide = 48, hover = 49, inDiffEditor = 50, letterSpacing = 51, lightbulb = 52, lineDecorationsWidth = 53, lineHeight = 54, lineNumbers = 55, lineNumbersMinChars = 56, linkedEditing = 57, links = 58, matchBrackets = 59, minimap = 60, mouseStyle = 61, mouseWheelScrollSensitivity = 62, mouseWheelZoom = 63, multiCursorMergeOverlapping = 64, multiCursorModifier = 65, multiCursorPaste = 66, occurrencesHighlight = 67, overviewRulerBorder = 68, overviewRulerLanes = 69, padding = 70, parameterHints = 71, peekWidgetDefaultFocus = 72, definitionLinkOpensInPeek = 73, quickSuggestions = 74, quickSuggestionsDelay = 75, readOnly = 76, renameOnType = 77, renderControlCharacters = 78, renderIndentGuides = 79, renderFinalNewline = 80, renderLineHighlight = 81, renderLineHighlightOnlyWhenFocus = 82, renderValidationDecorations = 83, renderWhitespace = 84, revealHorizontalRightPadding = 85, roundedSelection = 86, rulers = 87, scrollbar = 88, scrollBeyondLastColumn = 89, scrollBeyondLastLine = 90, scrollPredominantAxis = 91, selectionClipboard = 92, selectionHighlight = 93, selectOnLineNumbers = 94, showFoldingControls = 95, showUnused = 96, snippetSuggestions = 97, smartSelect = 98, smoothScrolling = 99, stickyTabStops = 100, stopRenderingLineAfter = 101, suggest = 102, suggestFontSize = 103, suggestLineHeight = 104, suggestOnTriggerCharacters = 105, suggestSelection = 106, tabCompletion = 107, tabIndex = 108, unusualLineTerminators = 109, useTabStops = 110, wordSeparators = 111, wordWrap = 112, wordWrapBreakAfterCharacters = 113, wordWrapBreakBeforeCharacters = 114, wordWrapColumn = 115, wordWrapOverride1 = 116, wordWrapOverride2 = 117, wrappingIndent = 118, wrappingStrategy = 119, showDeprecated = 120, inlineHints = 121, editorClassName = 122, pixelRatio = 123, tabFocusMode = 124, layoutInfo = 125, wrappingInfo = 126 </del> <ins> domReadOnly = 28, dragAndDrop = 29, emptySelectionClipboard = 30, extraEditorClassName = 31, fastScrollSensitivity = 32, find = 33, fixedOverflowWidgets = 34, folding = 35, foldingStrategy = 36, foldingHighlight = 37, unfoldOnClickAfterEndOfLine = 38, fontFamily = 39, fontInfo = 40, fontLigatures = 41, fontSize = 42, fontWeight = 43, formatOnPaste = 44, formatOnType = 45, glyphMargin = 46, gotoLocation = 47, hideCursorInOverviewRuler = 48, highlightActiveIndentGuide = 49, hover = 50, inDiffEditor = 51, letterSpacing = 52, lightbulb = 53, lineDecorationsWidth = 54, lineHeight = 55, lineNumbers = 56, lineNumbersMinChars = 57, linkedEditing = 58, links = 59, matchBrackets = 60, minimap = 61, mouseStyle = 62, mouseWheelScrollSensitivity = 63, mouseWheelZoom = 64, multiCursorMergeOverlapping = 65, multiCursorModifier = 66, multiCursorPaste = 67, occurrencesHighlight = 68, overviewRulerBorder = 69, overviewRulerLanes = 70, padding = 71, parameterHints = 72, peekWidgetDefaultFocus = 73, definitionLinkOpensInPeek = 74, quickSuggestions = 75, quickSuggestionsDelay = 76, readOnly = 77, renameOnType = 78, renderControlCharacters = 79, renderIndentGuides = 80, renderFinalNewline = 81, renderLineHighlight = 82, renderLineHighlightOnlyWhenFocus = 83, renderValidationDecorations = 84, renderWhitespace = 85, revealHorizontalRightPadding = 86, roundedSelection = 87, rulers = 88, scrollbar = 89, scrollBeyondLastColumn = 90, scrollBeyondLastLine = 91, scrollPredominantAxis = 92, selectionClipboard = 93, selectionHighlight = 94, selectOnLineNumbers = 95, showFoldingControls = 96, showUnused = 97, snippetSuggestions = 98, smartSelect = 99, smoothScrolling = 100, stickyTabStops = 101, stopRenderingLineAfter = 102, suggest = 103, suggestFontSize = 104, suggestLineHeight = 105, suggestOnTriggerCharacters = 106, suggestSelection = 107, tabCompletion = 108, tabIndex = 109, unusualLineTerminators = 110, useTabStops = 111, wordSeparators = 112, wordWrap = 113, wordWrapBreakAfterCharacters = 114, wordWrapBreakBeforeCharacters = 115, wordWrapColumn = 116, wordWrapOverride1 = 117, wordWrapOverride2 = 118, wrappingIndent = 119, wrappingStrategy = 120, showDeprecated = 121, inlineHints = 122, editorClassName = 123, pixelRatio = 124, tabFocusMode = 125, layoutInfo = 126, wrappingInfo = 127 </ins> } export const EditorOptions: { acceptSuggestionOnCommitCharacter: IEditorOption<EditorOption.acceptSuggestionOnCommitCharacter, boolean>;

cursorWidth: IEditorOption<EditorOption.cursorWidth, number>; disableLayerHinting: IEditorOption<EditorOption.disableLayerHinting, boolean>; disableMonospaceOptimizations: IEditorOption<EditorOption.disableMonospaceOptimizations, boolean>; <ins> domReadOnly: IEditorOption<EditorOption.domReadOnly, boolean>; </ins> dragAndDrop: IEditorOption<EditorOption.dragAndDrop, boolean>; emptySelectionClipboard: IEditorOption<EditorOption.emptySelectionClipboard, boolean>; extraEditorClassName: IEditorOption<EditorOption.extraEditorClassName, string>;