In the process of implementing a "follow mode" for [lariza]. This is really messy. There is no C API to access the DOM, so this has to be done in JavaScript. This means that there are two ways to implement it: - Everything in JS. This is what the user scripts for [surf] do. - Call a JS snippet just to grab DOM info and then do the rest in C. The first option requires less code, but it's a total mess. Web "pages" grab keys all the time these days and I don't see a way to prevent that. So, my "follow.js" fights with the "page" over who gets which key events. Even duckduckgo.com is broken. All "pages" try to be clever these days ... I write "pages" in quotes, because "web pages" are no longer passive pages, these days are looooong gone. Virtually all of them are _applications_ that run code. A disaster. Plus, a pure JS implementation has to _change_ the DOM in order to create the hint labels. This means creating new nodes, okay, but also removing them when you're done. How do you find your nodes? Use some attribute and hope that nobody else uses the same? Hopefully, I can find a way to avoid deleting nodes ... The second option looks like this: You grab all keys in C, so there is no conflict. Great. You still have to access the DOM to find out which links there are (and where), so you run a little JS against the document. And then ... you have to draw the hinting labels. This is easy in JS, but a PITA in GTK. And of course, the concept of these "follow modes" is fundamentally broken. It cannot work reliably, ever. Web pages can randomly decide what they want to do -- you cannot reliably catch all links or "activateable" elements. You can only hope to catch most of them. Long story short, a "follow mode" can get really complicated. Maybe it's best to live with it. It's ugly, it's messy, it doesn't work all the time, but it's better than nothing. Ugh. [lariza]: https://uninformativ.de/git/lariza [surf]: http://surf.suckless.org/