this post was submitted on 10 Jun 2024
17 points (94.7% liked)

Firefox

17937 readers
22 users here now

A place to discuss the news and latest developments on the open-source browser Firefox

founded 4 years ago
MODERATORS
 

I seeked into the API in order to write a plugin for myself. In order to aid my workflow I need to listen to two keystrokes closely followed.

Apparently there are only hacks available. I want to fire-and-forget about my plugin as long as the API to command firefox stays consistent.

I did not attempt to write any code (and any JS code, honestly that is) yet. Simply because I did not get that requirement addressed by the official API /& documentation.

Recompiling firefox would be the least favorable option; But I would still be hooked if it would enable me to observe keystrokes on my own.

As an practical example: Pressing Shift two times in sequence and within 100 ms should enable me to eat the event.

top 4 comments
sorted by: hot top controversial new old
[–] pe1uca@lemmy.pe1uca.dev 2 points 5 months ago

Probably you can inject your js and add an input event in the body of the page.

[–] treasure@lemmy.blahaj.zone 2 points 5 months ago

To detect two keystrokes closely followed, you can use EventListeners for the onkeyup/onkeydown event. In combination with a variable that determines if the key was already pressed within the last 100 ms and a setTimeout call that resets that variable after 100 ms, it should be fairly easy to accomplish.

[–] kevincox@lemmy.ml 2 points 5 months ago (1 children)

If you just need to intercept the keypresses in webpages then you can inject a content script and handle these. However there is no way with the new WebExtensions API to intercept browser chrome events.

Additionally there is no way to delay events. So if you want to suppress both shift presses you will struggle to do that. If you are ok to let the first one go through suppressing the second one is trivial.

[–] scmer@feddit.de 1 points 5 months ago

Thanks, @kevincox@lemmy.ml. That sums up my options.