jupyterlab / jupyterlab-desktop

JupyterLab desktop application, based on Electron.
BSD 3-Clause "New" or "Revised" License
3.76k stars 366 forks source link

Keyboard shortcuts not working as intended for international keyboard layouts (i.e., ABNT2) #826

Closed vinmir closed 6 months ago

vinmir commented 6 months ago

Description

The Activate Previous Tab hotkey is not correctly bound to non-ANSI layouts. What JupyterLab Desktop refers to ] is actually ~ in my ABNT2 keyboard (reference image).

image

I tried removing the keybinding and setting it manually. However, the default hotkey combination stays alongside my custom combination. If it were possible to manually override all hotkeys (in a .json or similar), it'd solve the problem even without official international support. See the gif below for an example.

binding_hotkey

Reproduce

  1. Use an ABNT2 keyboard;
  2. Open two tabs in JupyterLab Desktop
  3. Press the combination Ctrl-Shift-]
  4. Nothing will happen, as the actual combination expected is Ctrl-Shift-~ in ABNT2.

Expected behavior

Ctrl-Shift-] should be mapped correctly regardless of keyboard layout, as in VS Code, for instance.

Context

System:

Distributor ID: Linuxmint
Description:    Linux Mint 20.3
Release:    20.3
Codename:   una

JupyterLab: Version 4.1.6 JL Desktop: Version 4.1.8-1

Troubleshoot Output
$PATH:
        /home/usrname/.npm-global/bin
        /home/usrname/.local/bin
        ~/.config/emacs/bin
        /home/usrname/anaconda3/bin
        /home/usrname/anaconda3/condabin
        /home/usrname/.npm-global/bin
        /home/usrname/.local/bin
        /usr/local/sbin
        /usr/local/bin
        /usr/sbin
        /usr/bin
        /sbin
        /bin
        /usr/games
        /usr/local/games
        /snap/bin

sys.path:
        /home/usrname/anaconda3/bin
        /home/usrname/anaconda3/lib/python311.zip
        /home/usrname/anaconda3/lib/python3.11
        /home/usrname/anaconda3/lib/python3.11/lib-dynload
        /home/usrname/.local/lib/python3.11/site-packages
        /home/usrname/anaconda3/lib/python3.11/site-packages

sys.executable:
        /home/usrname/anaconda3/bin/python

sys.version:
        3.11.7 (main, Dec 15 2023, 18:12:31) [GCC 11.2.0]

platform.platform():
        Linux-5.15.0-102-generic-x86_64-with-glibc2.31

which -a jupyter:
        /home/usrname/anaconda3/bin/jupyter

pip list:
        --snip--: had to remove installed packages due to exceeding the maximum of 65536 characters.
Browser Output (required for interface issues after loading)
jlab_core.0c882064cb12a87cda90.js?v=0c882064cb12a87cda90:1 Language pack 'en_US' not installed!
fetch @ jlab_core.0c882064cb12a87cda90.js?v=0c882064cb12a87cda90:1
jlab_core.0c882064cb12a87cda90.js?v=0c882064cb12a87cda90:1 Skipping this shortcut because there are no actionable keys on this platform Object
(anonymous) @ jlab_core.0c882064cb12a87cda90.js?v=0c882064cb12a87cda90:1
jlab_core.0c882064cb12a87cda90.js?v=0c882064cb12a87cda90:1 Skipping this shortcut because there are no actionable keys on this platform Object
(anonymous) @ jlab_core.0c882064cb12a87cda90.js?v=0c882064cb12a87cda90:1
jlab_core.0c882064cb12a87cda90.js?v=0c882064cb12a87cda90:1 Skipping this shortcut because there are no actionable keys on this platform Object
(anonymous) @ jlab_core.0c882064cb12a87cda90.js?v=0c882064cb12a87cda90:1
jlab_core.0c882064cb12a87cda90.js?v=0c882064cb12a87cda90:1 Skipping this shortcut because there are no actionable keys on this platform Object
(anonymous) @ jlab_core.0c882064cb12a87cda90.js?v=0c882064cb12a87cda90:1
jlab_core.0c882064cb12a87cda90.js?v=0c882064cb12a87cda90:1 Skipping this shortcut because there are no actionable keys on this platform Object
(anonymous) @ jlab_core.0c882064cb12a87cda90.js?v=0c882064cb12a87cda90:1
jlab_core.0c882064cb12a87cda90.js?v=0c882064cb12a87cda90:1 Skipping this shortcut because there are no actionable keys on this platform Object
(anonymous) @ jlab_core.0c882064cb12a87cda90.js?v=0c882064cb12a87cda90:1
jlab_core.0c882064cb12a87cda90.js?v=0c882064cb12a87cda90:1 Skipping this shortcut because there are no actionable keys on this platform Object
(anonymous) @ jlab_core.0c882064cb12a87cda90.js?v=0c882064cb12a87cda90:1
jlab_core.0c882064cb12a87cda90.js?v=0c882064cb12a87cda90:1 Skipping this shortcut because there are no actionable keys on this platform Object
(anonymous) @ jlab_core.0c882064cb12a87cda90.js?v=0c882064cb12a87cda90:1
jlab_core.0c882064cb12a87cda90.js?v=0c882064cb12a87cda90:1 Skipping this shortcut because there are no actionable keys on this platform Object
(anonymous) @ jlab_core.0c882064cb12a87cda90.js?v=0c882064cb12a87cda90:1
jlab_core.0c882064cb12a87cda90.js?v=0c882064cb12a87cda90:1 Skipping this shortcut because there are no actionable keys on this platform Object
(anonymous) @ jlab_core.0c882064cb12a87cda90.js?v=0c882064cb12a87cda90:1
jlab_core.0c882064cb12a87cda90.js?v=0c882064cb12a87cda90:1 Skipping this shortcut because there are no actionable keys on this platform Object
(anonymous) @ jlab_core.0c882064cb12a87cda90.js?v=0c882064cb12a87cda90:1
jlab_core.0c882064cb12a87cda90.js?v=0c882064cb12a87cda90:1 Skipping this shortcut because there are no actionable keys on this platform Object
(anonymous) @ jlab_core.0c882064cb12a87cda90.js?v=0c882064cb12a87cda90:1
jlab_core.0c882064cb12a87cda90.js?v=0c882064cb12a87cda90:1 Skipping this shortcut because there are no actionable keys on this platform Object
(anonymous) @ jlab_core.0c882064cb12a87cda90.js?v=0c882064cb12a87cda90:1
jlab_core.0c882064cb12a87cda90.js?v=0c882064cb12a87cda90:1 Skipping this shortcut because there are no actionable keys on this platform Object
(anonymous) @ jlab_core.0c882064cb12a87cda90.js?v=0c882064cb12a87cda90:1
jlab_core.0c882064cb12a87cda90.js?v=0c882064cb12a87cda90:1 Skipping this shortcut because there are no actionable keys on this platform Object
(anonymous) @ jlab_core.0c882064cb12a87cda90.js?v=0c882064cb12a87cda90:1
jlab_core.0c882064cb12a87cda90.js?v=0c882064cb12a87cda90:1 Skipping this shortcut because there are no actionable keys on this platform Object
(anonymous) @ jlab_core.0c882064cb12a87cda90.js?v=0c882064cb12a87cda90:1
jlab_core.0c882064cb12a87cda90.js?v=0c882064cb12a87cda90:1 Skipping this shortcut because there are no actionable keys on this platform Object
(anonymous) @ jlab_core.0c882064cb12a87cda90.js?v=0c882064cb12a87cda90:1
jlab_core.0c882064cb12a87cda90.js?v=0c882064cb12a87cda90:1 Skipping this shortcut because there are no actionable keys on this platform Object
(anonymous) @ jlab_core.0c882064cb12a87cda90.js?v=0c882064cb12a87cda90:1
jlab_core.0c882064cb12a87cda90.js?v=0c882064cb12a87cda90:1 Skipping this shortcut because there are no actionable keys on this platform Object
(anonymous) @ jlab_core.0c882064cb12a87cda90.js?v=0c882064cb12a87cda90:1
jlab_core.0c882064cb12a87cda90.js?v=0c882064cb12a87cda90:1 Skipping this shortcut because there are no actionable keys on this platform Object
(anonymous) @ jlab_core.0c882064cb12a87cda90.js?v=0c882064cb12a87cda90:1
jlab_core.0c882064cb12a87cda90.js?v=0c882064cb12a87cda90:1 Skipping this shortcut because there are no actionable keys on this platform Object
(anonymous) @ jlab_core.0c882064cb12a87cda90.js?v=0c882064cb12a87cda90:1
jlab_core.0c882064cb12a87cda90.js?v=0c882064cb12a87cda90:1 Skipping this shortcut because there are no actionable keys on this platform Object
(anonymous) @ jlab_core.0c882064cb12a87cda90.js?v=0c882064cb12a87cda90:1
jlab_core.0c882064cb12a87cda90.js?v=0c882064cb12a87cda90:1 Skipping this shortcut because there are no actionable keys on this platform Object
(anonymous) @ jlab_core.0c882064cb12a87cda90.js?v=0c882064cb12a87cda90:1
jlab_core.0c882064cb12a87cda90.js?v=0c882064cb12a87cda90:1 Skipping this shortcut because there are no actionable keys on this platform Object
(anonymous) @ jlab_core.0c882064cb12a87cda90.js?v=0c882064cb12a87cda90:1
jlab_core.0c882064cb12a87cda90.js?v=0c882064cb12a87cda90:1 Skipping this shortcut because there are no actionable keys on this platform Object
(anonymous) @ jlab_core.0c882064cb12a87cda90.js?v=0c882064cb12a87cda90:1
jlab_core.0c882064cb12a87cda90.js?v=0c882064cb12a87cda90:1 Skipping this shortcut because there are no actionable keys on this platform Object
(anonymous) @ jlab_core.0c882064cb12a87cda90.js?v=0c882064cb12a87cda90:1
jlab_core.0c882064cb12a87cda90.js?v=0c882064cb12a87cda90:1 Skipping this shortcut because there are no actionable keys on this platform Object
(anonymous) @ jlab_core.0c882064cb12a87cda90.js?v=0c882064cb12a87cda90:1
jlab_core.0c882064cb12a87cda90.js?v=0c882064cb12a87cda90:1 Skipping this shortcut because there are no actionable keys on this platform Object
(anonymous) @ jlab_core.0c882064cb12a87cda90.js?v=0c882064cb12a87cda90:1
jlab_core.0c882064cb12a87cda90.js?v=0c882064cb12a87cda90:1 Skipping this shortcut because there are no actionable keys on this platform Object
(anonymous) @ jlab_core.0c882064cb12a87cda90.js?v=0c882064cb12a87cda90:1
jlab_core.0c882064cb12a87cda90.js?v=0c882064cb12a87cda90:1 Skipping this shortcut because there are no actionable keys on this platform Object
(anonymous) @ jlab_core.0c882064cb12a87cda90.js?v=0c882064cb12a87cda90:1
jlab_core.0c882064cb12a87cda90.js?v=0c882064cb12a87cda90:1 Skipping this shortcut because there are no actionable keys on this platform Object
(anonymous) @ jlab_core.0c882064cb12a87cda90.js?v=0c882064cb12a87cda90:1
jlab_core.0c882064cb12a87cda90.js?v=0c882064cb12a87cda90:1 Skipping this shortcut because there are no actionable keys on this platform Objectcommand: "application:activate-next-tab"keys: ['']selector: "body"[[Prototype]]: Object
(anonymous) @ jlab_core.0c882064cb12a87cda90.js?v=0c882064cb12a87cda90:1
jlab_core.0c882064cb12a87cda90.js?v=0c882064cb12a87cda90:1 Skipping this shortcut because there are no actionable keys on this platform Object
(anonymous) @ jlab_core.0c882064cb12a87cda90.js?v=0c882064cb12a87cda90:1
jlab_core.0c882064cb12a87cda90.js?v=0c882064cb12a87cda90:1 Skipping this shortcut because there are no actionable keys on this platform Object
(anonymous) @ jlab_core.0c882064cb12a87cda90.js?v=0c882064cb12a87cda90:1
jlab_core.0c882064cb12a87cda90.js?v=0c882064cb12a87cda90:1 Skipping this shortcut because there are no actionable keys on this platform Object
(anonymous) @ jlab_core.0c882064cb12a87cda90.js?v=0c882064cb12a87cda90:1
jlab_core.0c882064cb12a87cda90.js?v=0c882064cb12a87cda90:1 Skipping this shortcut because there are no actionable keys on this platform Object
(anonymous) @ jlab_core.0c882064cb12a87cda90.js?v=0c882064cb12a87cda90:1
jlab_core.0c882064cb12a87cda90.js?v=0c882064cb12a87cda90:1 Skipping this shortcut because there are no actionable keys on this platform Object
(anonymous) @ jlab_core.0c882064cb12a87cda90.js?v=0c882064cb12a87cda90:1
jlab_core.0c882064cb12a87cda90.js?v=0c882064cb12a87cda90:1 Skipping this shortcut because there are no actionable keys on this platform Object
(anonymous) @ jlab_core.0c882064cb12a87cda90.js?v=0c882064cb12a87cda90:1
jlab_core.0c882064cb12a87cda90.js?v=0c882064cb12a87cda90:1 Skipping this shortcut because there are no actionable keys on this platform Object
(anonymous) @ jlab_core.0c882064cb12a87cda90.js?v=0c882064cb12a87cda90:1
jlab_core.0c882064cb12a87cda90.js?v=0c882064cb12a87cda90:1 Skipping this shortcut because there are no actionable keys on this platform Object
(anonymous) @ jlab_core.0c882064cb12a87cda90.js?v=0c882064cb12a87cda90:1
jlab_core.0c882064cb12a87cda90.js?v=0c882064cb12a87cda90:1 Skipping this shortcut because there are no actionable keys on this platform Object
(anonymous) @ jlab_core.0c882064cb12a87cda90.js?v=0c882064cb12a87cda90:1
jlab_core.0c882064cb12a87cda90.js?v=0c882064cb12a87cda90:1 Skipping this shortcut because there are no actionable keys on this platform Object
(anonymous) @ jlab_core.0c882064cb12a87cda90.js?v=0c882064cb12a87cda90:1
jlab_core.0c882064cb12a87cda90.js?v=0c882064cb12a87cda90:1 Skipping this shortcut because there are no actionable keys on this platform Object
(anonymous) @ jlab_core.0c882064cb12a87cda90.js?v=0c882064cb12a87cda90:1
jlab_core.0c882064cb12a87cda90.js?v=0c882064cb12a87cda90:1 Skipping this shortcut because there are no actionable keys on this platform Object
(anonymous) @ jlab_core.0c882064cb12a87cda90.js?v=0c882064cb12a87cda90:1

Logs (required for issues with loading, server and startup)
[2024-05-14 20:23:12.530] [error] Python path "/home/usrname/.config/jupyterlab-desktop/jlab_server/bin/python" does not exist.
[2024-05-14 20:23:30.051] [warn]  Language pack 'en_US' not installed!
[2024-05-14 20:23:58.665] [warn]  Language pack 'en_US' not installed!
[2024-05-14 20:24:00.352] [warn]  Routing /lab to apputils:load-statedb failed TypeError: Failed to fetch
[2024-05-14 20:24:00.353] [warn]  Showing error: [object Object]
[2024-05-14 20:24:00.359] [warn]  Showing error: [object Object]
[2024-05-14 20:24:03.081] [warn]  Language pack 'en_US' not installed!
[2024-05-14 20:24:09.353] [warn]  Showing error: [object Object]
[2024-05-14 20:24:09.359] [warn]  Showing error: [object Object]
[2024-05-14 20:24:33.349] [warn]  Showing error: [object Object]
[2024-05-14 20:24:33.357] [warn]  Showing error: [object Object]
[2024-05-14 20:24:36.315] [warn]  Language pack 'en_US' not installed!
[2024-05-14 20:24:43.054] [error] Uncaught (in promise) TypeError: Cannot read properties of undefined (reading 'type')
[2024-05-14 20:29:01.876] [error] Python path "/home/usrname/.config/jupyterlab-desktop/jlab_server/bin/python" does not exist.
[2024-05-14 21:11:07.436] [error] Python path "/home/usrname/.config/jupyterlab-desktop/jlab_server/bin/python" does not exist.
[2024-05-14 21:15:43.473] [warn]  Language pack 'en_US' not installed!
[2024-05-14 21:22:26.520] [warn]  Skipping this shortcut because there are no actionable keys on this platform [object Object]
[2024-05-14 21:22:26.671] [warn]  Skipping this shortcut because there are no actionable keys on this platform [object Object]
[2024-05-14 21:22:26.696] [warn]  Skipping this shortcut because there are no actionable keys on this platform [object Object]
[2024-05-14 21:22:26.718] [warn]  Skipping this shortcut because there are no actionable keys on this platform [object Object]
[2024-05-14 21:22:26.741] [warn]  Skipping this shortcut because there are no actionable keys on this platform [object Object]
[2024-05-14 21:22:39.375] [warn]  Skipping this shortcut because there are no actionable keys on this platform [object Object]
[2024-05-14 21:22:39.528] [warn]  Skipping this shortcut because there are no actionable keys on this platform [object Object]
[2024-05-14 21:22:39.550] [warn]  Skipping this shortcut because there are no actionable keys on this platform [object Object]
[2024-05-14 21:22:39.574] [warn]  Skipping this shortcut because there are no actionable keys on this platform [object Object]
[2024-05-14 21:22:39.595] [warn]  Skipping this shortcut because there are no actionable keys on this platform [object Object]
[2024-05-14 21:22:46.709] [warn]  Skipping this shortcut because there are no actionable keys on this platform [object Object]
[2024-05-14 21:22:46.861] [warn]  Skipping this shortcut because there are no actionable keys on this platform [object Object]
[2024-05-14 21:22:46.884] [warn]  Skipping this shortcut because there are no actionable keys on this platform [object Object]
[2024-05-14 21:22:46.904] [warn]  Skipping this shortcut because there are no actionable keys on this platform [object Object]
[2024-05-14 21:22:46.924] [warn]  Skipping this shortcut because there are no actionable keys on this platform [object Object]
[2024-05-14 21:22:46.943] [warn]  Skipping this shortcut because there are no actionable keys on this platform [object Object]
[2024-05-14 21:22:47.114] [warn]  Skipping this shortcut because there are no actionable keys on this platform [object Object]
[2024-05-14 21:22:47.141] [warn]  Skipping this shortcut because there are no actionable keys on this platform [object Object]
[2024-05-14 21:22:59.319] [warn]  Skipping this shortcut because there are no actionable keys on this platform [object Object]
[2024-05-14 21:22:59.355] [warn]  Skipping this shortcut because there are no actionable keys on this platform [object Object]
[2024-05-14 21:22:59.501] [warn]  Skipping this shortcut because there are no actionable keys on this platform [object Object]
[2024-05-14 21:22:59.527] [warn]  Skipping this shortcut because there are no actionable keys on this platform [object Object]
[2024-05-14 21:22:59.546] [warn]  Skipping this shortcut because there are no actionable keys on this platform [object Object]
[2024-05-14 21:22:59.567] [warn]  Skipping this shortcut because there are no actionable keys on this platform [object Object]
[2024-05-14 21:23:10.686] [warn]  Skipping this shortcut because there are no actionable keys on this platform [object Object]
[2024-05-14 21:23:10.835] [warn]  Skipping this shortcut because there are no actionable keys on this platform [object Object]
[2024-05-14 21:23:10.861] [warn]  Skipping this shortcut because there are no actionable keys on this platform [object Object]
[2024-05-14 21:23:10.881] [warn]  Skipping this shortcut because there are no actionable keys on this platform [object Object]
[2024-05-14 21:23:10.904] [warn]  Skipping this shortcut because there are no actionable keys on this platform [object Object]
[2024-05-14 21:23:10.927] [warn]  Skipping this shortcut because there are no actionable keys on this platform [object Object]
[2024-05-14 21:23:11.089] [warn]  Skipping this shortcut because there are no actionable keys on this platform [object Object]
[2024-05-14 21:23:11.108] [warn]  Skipping this shortcut because there are no actionable keys on this platform [object Object]
[2024-05-14 21:23:16.952] [warn]  Skipping this shortcut because there are no actionable keys on this platform [object Object]
[2024-05-14 21:23:16.974] [warn]  Skipping this shortcut because there are no actionable keys on this platform [object Object]
[2024-05-14 21:23:17.129] [warn]  Skipping this shortcut because there are no actionable keys on this platform [object Object]
[2024-05-14 21:23:17.150] [warn]  Skipping this shortcut because there are no actionable keys on this platform [object Object]
[2024-05-14 21:23:17.173] [warn]  Skipping this shortcut because there are no actionable keys on this platform [object Object]
[2024-05-14 21:23:17.194] [warn]  Skipping this shortcut because there are no actionable keys on this platform [object Object]
[2024-05-14 21:23:56.342] [warn]  Skipping this shortcut because there are no actionable keys on this platform [object Object]
[2024-05-14 21:23:56.497] [warn]  Skipping this shortcut because there are no actionable keys on this platform [object Object]
[2024-05-14 21:23:56.521] [warn]  Skipping this shortcut because there are no actionable keys on this platform [object Object]
[2024-05-14 21:23:56.540] [warn]  Skipping this shortcut because there are no actionable keys on this platform [object Object]
[2024-05-14 21:23:56.561] [warn]  Skipping this shortcut because there are no actionable keys on this platform [object Object]
[2024-05-14 21:24:55.773] [warn]  Skipping this shortcut because there are no actionable keys on this platform [object Object]
[2024-05-14 21:43:44.280] [error] Python path "/home/usrname/.config/jupyterlab-desktop/jlab_server/bin/python" does not exist.
[2024-05-14 21:43:49.768] [warn]  Language pack 'en_US' not installed!
[2024-05-14 21:43:51.340] [warn]  task queue exceeded allotted deadline by 50ms

welcome[bot] commented 6 months ago

Thank you for opening your first issue in this project! Engagement like this is essential for open source projects! :hugs:
If you haven't done so already, check out Jupyter's Code of Conduct. Also, please try to follow the issue template as it helps other other community members to contribute more effectively. welcome You can meet the other Jovyans by joining our Discourse forum. There is also an intro thread there where you can stop by and say Hi! :wave:
Welcome to the Jupyter community! :tada:

JasonWeill commented 6 months ago

Looks like an ABNT2 keyboard is used in Brazilian Portuguese. We had a number of issues concerning non-US keyboards that were covered by https://github.com/jupyterlab/jupyterlab/issues/15744, which is fixed in JupyterLab 4.2.0.

Lab Desktop doesn't have an official 4.2.0-based release of its own, but using conda, you may be able to upgrade to Lab 4.2.0. In any case, this behavior should be addressed by upgrading.