microsoft / vscode

Visual Studio Code
https://code.visualstudio.com
MIT License
162.16k stars 28.54k forks source link

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

Closed georglauterbach closed 1 year ago

georglauterbach commented 1 year ago

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(R) Core(TM) 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: * update to [latest Insiders](https://code.visualstudio.com/insiders/) or [latest stable 1.75.1](https://code.visualstudio.com/updates/v1_75).
georglauterbach commented 1 year ago

related: https://stackoverflow.com/questions/75336265/vscode-says-equal-key-is-v-keyboard-layout-messed-up

goktan commented 1 year ago

I think this is not only ctrl+v but I have other keybindings stopped working just after this upgrade.

georglauterbach commented 1 year ago

I think this is not only ctrl+v but I have other keybindings stopped working just after this upgrade.

I adjusted the issue title accordingly. If you find out which one exactly, please let us know :)

fernandosmither commented 1 year ago

Seriousloy annoying. Does anybody have a quick fix? beyond losing the [Equal] keybindings or downgrading versions

fernandosmither commented 1 year ago

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

gmarsano commented 1 year ago

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

image

image

riidom commented 1 year ago

I have an affected ctrl+equal shortcut, remapped it to ctrl+alt+equal, which stays as-is. If you need a quick workaround.

georglauterbach commented 1 year ago

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

I cannot adjust the issue (labels, etc.) myself, but I agree that this should have high priority.

timoklein commented 1 year ago

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

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

Baldomo commented 1 year ago

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:

georglauterbach commented 1 year ago

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

birgersp commented 1 year ago

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 :wink: Have a nice weekend ya'll!

vaaski commented 1 year ago

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

M4he commented 1 year ago

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):

hamzahamidi commented 1 year ago

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

alexdima commented 1 year ago

@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:

russbert commented 1 year ago

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.

alexdima commented 1 year ago

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.

Snouzy commented 1 year ago

any workaround for azerty keyboards ?

vaaski commented 1 year ago

any workaround for azerty keyboards ?

downgrading to 1.74.3 works

russbert commented 1 year ago

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

mrth2 commented 1 year ago

anyone knows when will new version release to fix 1.75 key bindings issue?

georglauterbach commented 1 year ago

anyone knows when will new version release to fix 1.75 key bindings issue?

Most likely with 1.75.1.

alexdima commented 1 year ago

Reopening to track the merge to stable

FernandoMiguel commented 1 year ago

this seems to be fixed in the latest nightly

Version: 1.76.0-insider
Commit: c9e3ef865539061b5602c6b9ac6030332aa1ce70
Date: 2023-02-06T05:39:44.179Z
Electron: 19.1.9
Chromium: 102.0.5005.194
Node.js: 16.14.2
V8: 10.2.154.23-electron.0
OS: Darwin arm64 22.3.0
Sandboxed: Yes
Dexmaxter18 commented 1 year ago

same here [backquote] replaced by [F1] Captura de pantalla de 2023-02-06 14-44-08

173325

A7mdFathi commented 1 year ago

we can use vscode insider here as temporary replacement for stable version bug fixes in this version and we can use settings sync to get extensions and settings from stable

alexdima commented 1 year ago

Verification steps:

niccolomineo commented 1 year ago

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.

Thank you for your work.

alexdima commented 1 year ago

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.

aeschli commented 1 year ago

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