They’re missing the most important (to me) one! Plugins are nerfed in terms of what keys they’re allowed to bind. For “security reasons” it’s impossible for a plugin in Chrome’s extension system (which Firefox tragically copied) to bind to ctrl-n, ctrl-t, or ctrl-p, all critical Emacs shortcuts. So plugins are more or less completely useless for building an Emacs-like browser.
True, plugins in the major browsers have been neutered.
Both Chromium and Firefox can be patched to get rid of the keybinding restrictions. Firefox can even be hot patched from the binary so you don’t have to rebuild anything to free up the reserved key bindings.
If I had found that four years ago I would have saved myself a lot of pain. (In the end I instead switched to a window manager which can remap all keystrokes from Emacs keys to “conventional keys” before the browser even sees them so I don’t have a need for that any more.) But I admire it all the same.
Ooh, I’d love to hear more about this. I’m 100% Linux these days but if there’s something that I do miss from macOS it’s that the default readline/Emacs keybindings for cursor navigation work in every text-like GUI element.
Oh man, EXWM’s simulation keys changed my life. I can’t sing their praises highly enough. I went from “once every twenty minutes I want to throw my laptop out the window” to “hey this is great” instantly: https://technomancy.us/184
I use it mostly to make Firefox bearable again but it works in any X program.
This is a great fix, but the change in Firefox extensions architecture got rid of lots of other interesting possibilities that made Vimperator / Pentadactyl a really immersive user experience.
And I say this as an Emacs fanboy who learned vi just to enjoy Vimperator. It was really good, but sadly it’s gone.
I agree that XUL had to die I just wish they hadn’t used that as an opportunity to slam the door on full-access extensions. I also think WebExtensions are a good idea but I don’t think full-access extensions should have been fully killed.
My preferred approach would be having two types of extensions:
WebExtensions support permissions and have API stability guarantees.
Full-access extensions always have root, may break every release (and the Firefox devs won’t feel bad about it) and come with big scary warnings on add-ons.mozilla.org.
Basically the API for full-access would just be “you may run arbitrary JS in the main process”. Following API changes and not breaking things is the problem of the extension author.
I think this provides enough reason to prefer WebExtensions where they work and limits the maitnaince burden for Firefox devs while still allowing for truely powerful extensions.
Honestly without the old style of extensions I see very little meaningful difference between Firefox and chrome. The only reason I stick with FF is to resit the Google web monopoly.
I briefly tried out qutebrowser and luakit a while back and this was a big problem. They both had ad blockers but nothing nearly as good as ublock origin, so I’m back on Firefox.
Same issue for me. blocker-mode on Nyxt is good enough for general use, but not for ad-heavy parts of the Web of Lies.The github issue on blocking talks about upcoming support for webextensions, aimed at running uBlock Origin. But I’d rather see a uBlock-compatible extension in Lisp.
I use an /etc/hosts based blocklist and it suits me well. Although it’s not perfect it does the job good enough without interfering with my browser at all.
If you want a more ready-to-go solution than pihole:
I use nextdns.io as a DNS provider and enabled all the builtin blocklists. I can then selectively add some domains to the Allowlist when i see something not working correctly. Eg Google photos CDN, then i toggle it off as well after done. This works pretty well, and across all devices, browsers etc., no addon needed per browser etc just change the DNS server on each device. You can also use their app, but i prefer the manual DNS server config.
The free plan allows upto 300K per month DNS queries i believe, and they also show you analytics. For eg. on my phone(android) roughly 53% are blocked(ads) versus only 7% on a laptop. It was pretty evident how much a spy device a phone is! So i don’t mind paying a few dollars when i exceed 300K, which doesn’t seem anytime soon.
This solution isn’t too bad, but I also like ublock origin for being about to do things like remove ads from Youtube videos. I also have some custom filter lists that I need to occasionally turn off to use websites, and that really needs to be a one-click operation for me.
Still a great idea for my phone, so I’ll give it a shot!
This post is wrong on many points. I’m going to use Tridactyl as an example because that’s the browser extension I know the best but I wouldn’t be surprised to hear that other plugins do the same thing.
Nyxt is fully customizable and extensible, plug-ins are not. In Nyxt, users can customize the alphabet used for link-hinting. It does not need to be the Latin alphabet. If the user is using a popular “QWERTY” keyboard, it could be changed to “qwertyasdfgzxcvb” to provide more ergonomics. Same for Dvorak keyboards.
This is controlled by the ‘hintchars’ setting in Tridactyl.
It is possible to create different modes and each mode could have its own keybindings.
Tridactyl has modes and per-page settings too.
In addition to being fully customizable, Nyxt has the capability of being modified and tweaked while it is running.
That’s how all webextensions work. In fact you have to make a lot of effort for configuration to work any other way.
Nyxt can perform computation in separate background threads while plug-ins cannot.
Webextensions are inherently parallel. The webextension model forces you to have a background process and another thread for each tab and to communicate with message passing. You can offload computations to web workers on top of that.
Nyxt can interact and integrate with the user’s operating system to run external programs or scripts while plug-ins cannot.
Wrong. The native messenger lets you do that and Tridactyl heavily relies on it.
Then, all sorts of algorithms from fuzzy matching on the URLs become possible outside of Javascript. This process has a multithreaded nature which is simply not possible strictly in Javascript.
As said before, web workers…
In Nyxt, it is possible to see all the links that exist in all of the user’s buffers (tabs).
I could implement this in less than an hour in Tridactyl.
Now, don’t get me wrong. Despite all the points of this article being bogus, there are reasons to use a real browser instead of a webextension. As technomancy said, you can’t remap certain keybindings without hotpatching the browser, there are things that are impossible to do without huge hacks (e.g. modifying the browser UI) and also the fact that you’re going to be free from the browser vendor’s bureaucracy (Tridactyl has had several issues with Mozilla and even got unlisted at some point, and there probably will be more issues once manifest v3, the new webextension standard version, will become mandatory). However, there are drawbacks to using a browser made by a small team of unpaid contributors too, especially on the side of security: the browser engine will necessarily be outdated compared to what can be found upstream and the lack of reviews from security experts will cause embarassing bugs to reach users (although this can happen in browser extensions too…).
LISP value lies beyond its syntax.
But when your world is only C-like/Python-like syntax it is hard to look beyond just the syntax of any new language.
LISP value lies beyond its syntax. But when your world is only C-like/Python-like syntax it is hard to look beyond just the syntax of any new language.
My world is not only C-like/Python-like syntax. and LISP is not a new language to me. It was my first real exposure to programming to get real work done (not counting some hello-world stuff in other languages and copy/paste POSIX/BAT script script stuff I didn’t really understand at the time) and I kept up with it for years through my next couple languages (Perl being my next major stop). I realize it has value, but even knowing where some of that value lies it’s hard to to make fun of how obtuse it can be.
They’re missing the most important (to me) one! Plugins are nerfed in terms of what keys they’re allowed to bind. For “security reasons” it’s impossible for a plugin in Chrome’s extension system (which Firefox tragically copied) to bind to ctrl-n, ctrl-t, or ctrl-p, all critical Emacs shortcuts. So plugins are more or less completely useless for building an Emacs-like browser.
True, plugins in the major browsers have been neutered.
Both Chromium and Firefox can be patched to get rid of the keybinding restrictions. Firefox can even be hot patched from the binary so you don’t have to rebuild anything to free up the reserved key bindings.
But yes, it’s sad that there isn’t a better way.
Holy smokes, that hot patch is amazing.
If I had found that four years ago I would have saved myself a lot of pain. (In the end I instead switched to a window manager which can remap all keystrokes from Emacs keys to “conventional keys” before the browser even sees them so I don’t have a need for that any more.) But I admire it all the same.
Ooh, I’d love to hear more about this. I’m 100% Linux these days but if there’s something that I do miss from macOS it’s that the default readline/Emacs keybindings for cursor navigation work in every text-like GUI element.
Oh man, EXWM’s simulation keys changed my life. I can’t sing their praises highly enough. I went from “once every twenty minutes I want to throw my laptop out the window” to “hey this is great” instantly: https://technomancy.us/184
I use it mostly to make Firefox bearable again but it works in any X program.
This is a great fix, but the change in Firefox extensions architecture got rid of lots of other interesting possibilities that made Vimperator / Pentadactyl a really immersive user experience.
And I say this as an Emacs fanboy who learned vi just to enjoy Vimperator. It was really good, but sadly it’s gone.
Every time someone links this WRT Firefox and WebExtensions, I have to link this post because it does a good job at explaining why.
I don’t begrudge them removing XUL; it needed to die.
I just wished they replaced it with something actually good.
I agree that XUL had to die I just wish they hadn’t used that as an opportunity to slam the door on full-access extensions. I also think WebExtensions are a good idea but I don’t think full-access extensions should have been fully killed.
My preferred approach would be having two types of extensions:
Basically the API for full-access would just be “you may run arbitrary JS in the main process”. Following API changes and not breaking things is the problem of the extension author.
I think this provides enough reason to prefer WebExtensions where they work and limits the maitnaince burden for Firefox devs while still allowing for truely powerful extensions.
Honestly without the old style of extensions I see very little meaningful difference between Firefox and chrome. The only reason I stick with FF is to resit the Google web monopoly.
What do people use for blocking ads on Nyxt? I don’t use many plugins but ublock origin is an important one.
I briefly tried out qutebrowser and luakit a while back and this was a big problem. They both had ad blockers but nothing nearly as good as ublock origin, so I’m back on Firefox.
Same issue for me. blocker-mode on Nyxt is good enough for general use, but not for ad-heavy parts of the Web of Lies.The github issue on blocking talks about upcoming support for webextensions, aimed at running uBlock Origin. But I’d rather see a uBlock-compatible extension in Lisp.
I use an /etc/hosts based blocklist and it suits me well. Although it’s not perfect it does the job good enough without interfering with my browser at all.
If you want a more ready-to-go solution than pihole:
I use nextdns.io as a DNS provider and enabled all the builtin blocklists. I can then selectively add some domains to the Allowlist when i see something not working correctly. Eg Google photos CDN, then i toggle it off as well after done. This works pretty well, and across all devices, browsers etc., no addon needed per browser etc just change the DNS server on each device. You can also use their app, but i prefer the manual DNS server config.
The free plan allows upto 300K per month DNS queries i believe, and they also show you analytics. For eg. on my phone(android) roughly 53% are blocked(ads) versus only 7% on a laptop. It was pretty evident how much a spy device a phone is! So i don’t mind paying a few dollars when i exceed 300K, which doesn’t seem anytime soon.
This solution isn’t too bad, but I also like ublock origin for being about to do things like remove ads from Youtube videos. I also have some custom filter lists that I need to occasionally turn off to use websites, and that really needs to be a one-click operation for me.
Still a great idea for my phone, so I’ll give it a shot!
This post is wrong on many points. I’m going to use Tridactyl as an example because that’s the browser extension I know the best but I wouldn’t be surprised to hear that other plugins do the same thing.
This is controlled by the ‘hintchars’ setting in Tridactyl.
Tridactyl has modes and per-page settings too.
That’s how all webextensions work. In fact you have to make a lot of effort for configuration to work any other way.
Webextensions are inherently parallel. The webextension model forces you to have a background process and another thread for each tab and to communicate with message passing. You can offload computations to web workers on top of that.
Wrong. The native messenger lets you do that and Tridactyl heavily relies on it.
As said before, web workers…
I could implement this in less than an hour in Tridactyl.
Now, don’t get me wrong. Despite all the points of this article being bogus, there are reasons to use a real browser instead of a webextension. As technomancy said, you can’t remap certain keybindings without hotpatching the browser, there are things that are impossible to do without huge hacks (e.g. modifying the browser UI) and also the fact that you’re going to be free from the browser vendor’s bureaucracy (Tridactyl has had several issues with Mozilla and even got unlisted at some point, and there probably will be more issues once manifest v3, the new webextension standard version, will become mandatory). However, there are drawbacks to using a browser made by a small team of unpaid contributors too, especially on the side of security: the browser engine will necessarily be outdated compared to what can be found upstream and the lack of reviews from security experts will cause embarassing bugs to reach users (although this can happen in browser extensions too…).
pretty sure that literally no one has ever asked this.
I’m sure the guy in charge of SEO did…
I don’t know why people have this learned hatred of parenthesis.
LISP value lies beyond its syntax. But when your world is only C-like/Python-like syntax it is hard to look beyond just the syntax of any new language.
Mainly: https://wiki.haskell.org/Wadler's_Law
My world is not only C-like/Python-like syntax. and LISP is not a new language to me. It was my first real exposure to programming to get real work done (not counting some hello-world stuff in other languages and copy/paste POSIX/BAT script script stuff I didn’t really understand at the time) and I kept up with it for years through my next couple languages (Perl being my next major stop). I realize it has value, but even knowing where some of that value lies it’s hard to to make fun of how obtuse it can be.
This sounds like a special case of Parkinson’s famous parable of the nuclear power plant and the bike shed.
Experience.
Mine with LISP being from before the days when editors had syntax highlighting of any kind, much less nested parenthesis color matching.
i often use my editors in monochrome mode: vi has the % command to check on matching parens, emacs has the full suite of s-expr commands.