binding detection does not work
artola opened this issue · comments
Multiple keystrokes without release are not properly detected and therefore the shortcut is not fired.
See for example the following Codepen. Here I just try to trap and handle "Cmd+R", when it is not properly detected it is caught Chrome and produces a page reload.
The sequence is:
- press "Cmd" and do not release
- press "0" (zero, like reset zoom)
- press "R" (like reload page)
Use this debug page: https://cdpn.io/pen/debug/gOBvOXr?authentication_hash=ZoABapBwEZGr
The source of this repro: https://codepen.io/artola-the-decoder/pen/gOBvOXr
The expected behaviour is that after a non control key (I mean when a letter, number or symbol) is pressed, the logic should restart.
This sequence executed above: CMD + 0 + R
, should be treated as CMD + 0
and CMD + R
.
Here the same example refactored with mousetrap
and it works as expected: https://codepen.io/artola-the-decoder/pen/zYmRxVB
I have a similar issue:
- setup, command+left: action1, command+right: action2
- press command and hold.
- press left, and release, action1 triggered.
- press right, system ring a bell warning. action 2 not triggered.
this breaks in v3.10.3, works as expected in v3.10.2
@magicdawn You can reproduce your error. https://codepen.io/jaywcjlove/pen/xxQdNQp?editors=0010
Line 282 in 8b8d7d9
Line 303 in 8b8d7d9
- v3.10.2 https://codepen.io/magicdawn/pen/dyQWBow?editors=1010
- v3.10.3 https://codepen.io/magicdawn/pen/JjeNQYB?editors=1010
Key sequence
- press command and hold.
- press left and release, expect
you pressed command + left
- press right and release, expect
you pressed command + right
v3.10.2 works as expected, v3.10.3 step 3
not showing
@magicdawn Upgrade v3.10.4
@jaywcjlove It seems that the fix does not work for the above mentioned example, upgraded to v3.10.4:
@artola https://codepen.io/jaywcjlove/pen/NWEgNqo?editors=1010
import hotkeysJs from "https://cdn.skypack.dev/hotkeys-js@3.10.4";
window.addEventListener("DOMContentLoaded", (event) => {
const button = document.querySelector('button');
button.focus();
hotkeys('command+r,command+r+0', undefined, (keyboardEvent, hotkeysEvent) => {
keyboardEvent.preventDefault();
keyboardEvent.stopPropagation();
button.innerHTML = "prevented";
return false;
});
});
This sequence executed above:
CMD + 0 + R
, should be treated asCMD + 0
andCMD + R
.
Thanks @jaywcjlove. But look in my original issue, my expectation is:
This sequence executed above: CMD + 0 + R, should be treated as CMD + 0 and CMD + R.
If that is fulfilled, then the code should trap the keystrokes and avoid a page reload without changing the listeners, but it does not:
import hotkeysJs from "https://cdn.skypack.dev/hotkeys-js@3.10.4";
window.addEventListener("DOMContentLoaded", (event) => {
const button = document.querySelector('button');
button.focus();
hotkeys('command+r', undefined, (keyboardEvent, hotkeysEvent) => {
keyboardEvent.preventDefault();
keyboardEvent.stopPropagation();
button.innerHTML = "prevented";
return false;
});
});
- v3.10.2 https://codepen.io/magicdawn/pen/dyQWBow?editors=1010
- v3.10.3 https://codepen.io/magicdawn/pen/JjeNQYB?editors=1010
Key sequence
- press command and hold.
- press left and release, expect
you pressed command + left
- press right and release, expect
you pressed command + right
v3.10.2 works as expected, v3.10.3
step 3
not showing
I have a similar problem:
setup:[cmd+shift+k] and [cmd+shift+b] shortcuts
- press [cmd+shift] , and hold them
- press k, it worked.
- release k and press b, it doesn't work.
I think may be you have fixed problem about [cmd+] but not [cmd+shift+].