vscode: keyboard shortcuts: wrong interpretations of special keys (e.g. `[Equal]` is mistaken for `V`)

Type: Bug

  1. Update VS Code (for me, it was from 1.74.1 to 1.75)
  2. User defined keybindings using scan codes (e.g. [Equal] or [Semicolon]) are interpreted incorrectly

Screenshot from 2023-02-03 17-18-58

More details

I was literally unable to copy-paste inside VS Code because pasting was also ctrl+v

VS Code version: Code 1.75.0 (e2816fe719a4026ffa1ee0189dc89bdfdbafb164, 2023-02-01T15:29:17.766Z) OS version: Linux x64 5.15.0-58-generic Modes: Sandboxed: No

System Info
Item Value
CPUs Intel® Core™ i7-4770K CPU @ 3.50GHz (8 x 3899)
GPU Status 2d_canvas: enabled
canvas_oop_rasterization: disabled_off
direct_rendering_display_compositor: disabled_off_ok
gpu_compositing: enabled
multiple_raster_threads: enabled_on
opengl: enabled_on
rasterization: enabled
raw_draw: disabled_off_ok
skia_renderer: enabled_on
video_decode: disabled_software
video_encode: disabled_software
vulkan: disabled_off
webgl: enabled
webgl2: enabled
webgpu: disabled_off
Load (avg) 0, 0, 0
Memory (System) 15.57GB (11.48GB free)
Process Argv –disable-extensions --crash-reporter-id 82449883-a908-4a7a-be3e-fc9cf8042ab0
Screen Reader no
VM 0%
DESKTOP_SESSION regolith
XDG_CURRENT_DESKTOP Regolith:GNOME-Flashback:GNOME
XDG_SESSION_DESKTOP regolith
XDG_SESSION_TYPE x11
Extensions disabled

superseeds #173324



Known workarounds:

About this issue

  • Original URL
  • State: closed
  • Created a year ago
  • Reactions: 29
  • Comments: 31 (7 by maintainers)

Commits related to this issue

Most upvoted comments

This is a rather urgent and serious bug 🤔 is there a way to give priority to this issue? @georglauterbach

Potential fix here. The issue was introduced here. The hashcode for scan codes and simple keys was not updated to distinguish between them.

When is it possible to release this hotfix? It’s pretty urgent.

The fix was merged. Thanks @alexdima and Thank you @hamzahamidi for the quick fix

Potential fix here. The issue was introduced here. The hashcode for scan codes and simple keys was not updated to distinguish between them.

When is it possible to release this hotfix? It’s pretty urgent.

I’m super sorry for this regression! I’m trying to get the change into tomorrow’s Insiders and we’ll very likely ship it with 1.75.1. I’ve updated the issue description with a potential workaround which consists of editing the scan code based user bindings to use key code.

ping @alexdima; this should probably have high priority as broken keyboard shortcuts really cut the experience of using VS Code short

Hi, I don’t mean to put pressure, but I’d like to ask how long it will take to take the fix to stable.

We plan to release 1.75.1 tomorrow.

The issue has messed up a lot of my custom shortcuts and is incredibly annoying:

  • [BracketRight] is mapped to X.
  • [BracketLeft] is mapped to W.
  • [Comma] is mapped to F2.
  • [Equal] is mapped to V.
  • [Minus] is mapped to U.

These are the ones that have been affected for me from a quick glance. I’m shocked that this was released :0

Verified in stable release candidate (Version: 1.75.1 Commit: 30b39f04b4b323377f4131bc76a3b7bc5f60475d)

For me on a german layout, cmd+y is cmd+# for some reason, now I can’t redo anymore.

image

edit: just confirmed that this issue isn’t present on 1.74.3

I have the same issue on VSCodium, on a US keyboard layout

Version: 1.75.0
Release: 23033
Commit: d48b950f7741008f7fb375881b45188dd73ecac4
Date: 2023-02-02T22:14:58.243Z
Electron: 19.1.9
Chromium: 102.0.5005.167
Node.js: 16.14.2
V8: 10.2.154.15-electron.0
OS: Linux x64 6.1.6-arch1-g14-1
Sandboxed: No

Additionally, these keycodes are also broken:

  • [Backquote] is mapped to F1 but not when used with ctrl+alt+[Backquote] (that works as intended)
  • [Backslash] is mapped to Y on both IT and US layouts (I assume it’s the same for all layouts then)

any workaround for azerty keyboards ?

downgrading to 1.74.3 works

@hamzahamidi Thank you for tracking this down! This is indeed caused by the implementations of KeyCodeChord.getHashCode() and ScanCodeChord.getHashCode(), which produce strings which overlap.

For example:

  • a key code based binding like ctrl+v will have the hash code 100052.
  • a scan code based binding like ctrl+[Equal] will also have the hash code 100052.

For me on a german layout, cmd+y is cmd+# for some reason, now I can’t redo anymore.

image

edit: just confirmed that this issue isn’t present on 1.74.3

Can confirm.

Pressing [Ctrl]+[#] on the keyboard shortcut settings page with a German keyboard adds "key": "ctrl+[Backslash]" to keybindings.json. This behavior (config write) is the same on 1.74.x as well as 1.75.0. However, the interpretation of this (config read) is different:

On 1.74.x, this used to work, i.e. ctrl+[Backslash] in the config did correspond to a physical key press of [Ctrl]+[#] in the editor using a German keyboard.

However, on 1.75.0 this config entry reacts to a physical keypress of [Ctrl]+[Y] only. Thus, VSCode does not correctly interpret the keybindings.json entry it wrote itself (even if written with 1.75.0, this is not a config migration problem):

  • config write: [Ctrl]+[#] -> “ctrl+[Backslash]”
  • config read: “ctrl+[Backslash]” -> [Ctrl]+[Y]

I’m hoping this gets a high priority. It completely messed up a lot of my key bindings.

These are the ones that have been affected for me from a quick glance. I’m shocked that this was released :0

Released on a friday 😉 Have a nice weekend ya’ll!

Same here. [Minus] is replaced by U and [Equal] by V. That’s really annoying.

image

image