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. --<!-- Launch with to check. --Does this issue occur when all extensions are disabled?: Yes/No 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 directly to the extension publisher. The 'Help Report Issue' dialog can assist with this. --- VS Code Version: 1.77.1 OS Version: Mac OS 12.6.3 Until recently, it was possible to configure the "screencast mode" settings so that the overlay was only displayed when a keyboard shortcut was used. Now, the overlay shows every single keystroke all the time, and there appears to be no way to change this. Steps to reproduce: screencast mode by running "Developer: Toggle screencast mode" from the Command Palette. settings. for "screencast" to filter to just the screencast properties. any combination of properties to limit to only showing the overlay when keyboard shortcuts are entered. typing code into a file and see that every single key stroke displays in the overlay.
According to this is as designed. You reported it as a regression. In which version did you get different behaviour?
I don't know what version of VS Code this was, but in this screencast recording I made on March 18th you'll see that the overlay only appears when I use keyboard shortcuts, Tab, or Backspace (which is my desired behavior.) I have other videos as well if they would be helpful. https://user-
It's possible the specific individual setting ("onlyKeyboardShortcuts") referenced by the author of the previous issue is working as designed, but it may be one (or more) of the other Screencast mode settings that is no longer working as designed.
My comment in should clarify because I'm having same problem as Regression took place from 1.76 -1.77
Fully agree with It is a regression and the comment they referred to backs this up and it's weird that the original bug got closed immediately. The description of the feature in the settings is too ambiguous: it's called "only keyboard shortcuts" suggesting it configures WHEN it's shown it has "do not include action names" in the text suggesting it configures WHAT is shown To me only the first interpretation makes sense because we have (Keyboard Shortcuts Format) for the second. I think the description text should be updated and the functionality reinstated.
I agree. I suggest having a tri-state setting here: Commands only Keyboard shortcuts only Commands and keyboard shortcuts PR welcome.
I'll resolve this issue
hi , I'd like to ask a small question, which behavior is the command in 'Commands only' you are referring to, is it a single key stroke? I'm afraid I'm misunderstanding, I would change this option to control when the screencast is displayed based on these three options
When the user presses a certain key combo, let's say , that means when in the editor. If mode is enabled, I would expect only to appear.
This has been driving me wild, I teach at an online bootcamp and showing key presses for shortcuts is helpful, showing every single keystroke is not!
Surely there is no reason to show all keystrokes. We can already see non-shortcut keystrokes-- they appear in the editor window...
Going with a full options bag that allows users to mix and match what the keyboard overlay displays: <img width="736" alt="image" src=""Verification: Make sure all combinations of the property bag work as expected.
I tested things out with the settings available in the latest release (1.81.0), and I still see ALL keystrokes regardless of whether it's a shortcut/command or not. If I uncheck "Show raw keys" and execute a shortcut or command action, it only shows the name of the command action and doesn't show the keystroke combination to execute it. If I check "Show raw keys" back on, it shows the keystroke combination for commands but will also show general keystrokes when typing. While it's certainly nice to see the simplified screencast mode keyboard options, I think the reasoning behind this issue is missed and should be re-opened.
Simply: we need to present shortcuts but not all keystrokes (and it was working in 1.76.2)
! With these options, no display of commands currently happens. The only option seemingly working is show raw keys. Again, the desire is to be able to only show commands of shortcuts with their command name, as of 1.81.1 this is still not working. I want nothing to show unless I hit a command such as Ctrl+S to save, display should be "Ctrl + S Save" -- as others have said, this was the behavior available in 1.76
I was also disappointed to not be able to show the keys that are part of a command, without also showing all keys (even when typing in the editor).
You guys are absolutely right. Pushing one more setting flag:
Tested insiders and problem persist: Version: 1.83.0-insider (user setup) Commit: Date: 2023-09-21T05:34:38.227Z Electron: 25.8.1 ElectronBuildId: Chromium: 114.0.5735.289 18.15.0 V8: 11.4.183.29-electron.0 OS: Windows_NT x64 10.0. "screencastMode.keyboardOptions": { "showKeys": false, "showCommandGroups": true } ! When typing i.e. CTRL+SHIFT+R (code refactoring in editor) with above settings I cannot get this keys/shortcut displayed. Same as for CTRL + . and so on.
maybe you are seeing
exactly, and as is fixed finally after half year waiting I can get my shortcut displayed without single key logging

Discussion:
} } <ins> interface IScreencastKeyboardOptions { readonly showKeys?: boolean; readonly showCommands?: boolean; readonly showCommandGroups?: boolean; readonly showSingleEditorCursorMoves?: boolean; } </ins> class ToggleScreencastModeAction extends Action2 { static disposable: IDisposable | undefined;

return; } <ins> const options = configurationService.getValue<IScreencastKeyboardOptions>('screencastMode.keyboardOptions'); </ins> const event = new StandardKeyboardEvent(e); const shortcut = keybindingService.softDispatch(event, event.target); // Hide the single arrow key pressed <del> if (shortcut.kind === ResultKind.KbFound && shortcut.commandId && configurationService.getValue('screencastMode.hideSingleEditorCursorMoves') && ( </del> <ins> if (shortcut.kind === ResultKind.KbFound && shortcut.commandId && !(options.showSingleEditorCursorMoves ?? true) && ( </ins> ['cursorLeft', 'cursorRight', 'cursorUp', 'cursorDown'].includes(shortcut.commandId)) ) { return;

length = 0; } <del> const format = configurationService.getValue<'keys' | 'command' | 'commandWithGroup' | 'commandAndKeys' | 'commandWithGroupAndKeys'>('screencastMode.keyboardShortcutsFormat'); </del> const keybinding = keybindingService.resolveKeyboardEvent(event); const command = (this._isKbFound(shortcut) && shortcut.commandId) ? MenuRegistry.getCommand(shortcut.commandId) : null; <del> let titleLabel = ''; </del> <ins> let commandAndGroupLabel = ''; </ins> let keyLabel: string | undefined | null = keybinding.getLabel(); if (command) { <del> titleLabel = typeof command.title === 'string' ? command.title : command.title.value; </del> <ins> commandAndGroupLabel = typeof command.title === 'string' ? command.title : command.title.value; </ins> <del> if ((format === 'commandWithGroup' || format === 'commandWithGroupAndKeys') && command.category) { titleLabel = `${typeof command.category === 'string' ? command.category : command.category.value}: ${titleLabel} `; </del> <ins> if ((options.showCommandGroups ?? false) && command.category) { commandAndGroupLabel = `${typeof command.category === 'string' ? command.category : command.category.value}: ${commandAndGroupLabel} `; </ins> } if (this._isKbFound(shortcut) && shortcut.commandId) {

} } <del> const onlyKeyboardShortcuts = configurationService.getValue('screencastMode.onlyKeyboardShortcuts'); if (format !== 'keys' && titleLabel && !onlyKeyboardShortcuts) { append(keyboardMarker, $('span.title', {}, `${titleLabel} `)); </del> <ins> if ((options.showCommands ?? true) && commandAndGroupLabel) { append(keyboardMarker, $('span.title', {}, `${commandAndGroupLabel} `)); </ins> } <del> if (onlyKeyboardShortcuts || !titleLabel || (this._isKbFound(shortcut) && shortcut.commandId) && (format === 'keys' || format === 'commandAndKeys' || format === 'commandWithGroupAndKeys')) { </del> <ins> if (options.showKeys ?? true) { </ins> // Fix label for arrow keys keyLabel = keyLabel?.replace('UpArrow', '↑') ?.replace('DownArrow', '↓')

maximum: 100, description: localize('screencastMode.fontSize', "Controls the font size (in pixels) of the screencast mode keyboard.") }, <del> 'screencastMode.keyboardShortcutsFormat': { enum: ['keys', 'command', 'commandWithGroup', 'commandAndKeys', 'commandWithGroupAndKeys'], enumDescriptions: [ localize('keyboardShortcutsFormat.keys', "Keys."), localize('keyboardShortcutsFormat.command', "Command title."), localize('keyboardShortcutsFormat.commandWithGroup', "Command title prefixed by its group."), localize('keyboardShortcutsFormat.commandAndKeys', "Command title and keys."), localize('keyboardShortcutsFormat.commandWithGroupAndKeys', "Command title and keys, with the command prefixed by its group.") ], description: localize('screencastMode.keyboardShortcutsFormat', "Controls what is displayed in the keyboard overlay when showing shortcuts."), default: 'commandAndKeys' }, 'screencastMode.onlyKeyboardShortcuts': { type: 'boolean', description: localize('screencastMode.onlyKeyboardShortcuts', "Show only keyboard shortcuts in screencast mode (do not include action names)."), default: false }, 'screencastMode.hideSingleEditorCursorMoves': { type: 'boolean', description: localize('screencastMode.hideSingleEditorCursorMoves', "Hide the single editor cursor move commands in screencast mode."), default: false </del> <ins> 'screencastMode.keyboardOptions': { type: 'object', description: localize('screencastMode.keyboardOptions.description', "Options for customizing the keyboard overlay in screencast mode."), properties: { 'showKeys': { type: 'boolean', default: true, description: localize('screencastMode.keyboardOptions.showKeys', "Show raw keys.") }, 'showCommands': { type: 'boolean', default: true, description: localize('screencastMode.keyboardOptions.showCommands', "Show command names.") }, 'showCommandGroups': { type: 'boolean', default: false, description: localize('screencastMode.keyboardOptions.showCommandGroups', "Show command group names, when commands are also shown.") }, 'showSingleEditorCursorMoves': { type: 'boolean', default: true, description: localize('screencastMode.keyboardOptions.showSingleEditorCursorMoves', "Show single editor cursor move commands.") } }, default: { 'showKeys': true, 'showCommands': true, 'showCommandGroups': false, 'showSingleEditorCursorMoves': true }, additionalProperties: false </ins> }, 'screencastMode.keyboardOverlayTimeout': { type: 'number',