Nyxt browser: mouseless copy/paste
nyxt.atlas.engineer
nyxt.atlas.engineer
A lot of the comments here suggest that some of the functionality can be replaced by extensions like vimium-ff [1]. If you only compare the list of features then maybe. If you try using the extensions, you immediately notice that the keybindings don't work outside of fully loaded page, have horrible lags and delays and misses a keyboard event from time to time.
For the curious folk, the GitHub page [2] seems to do a better job at telling the how of things.
My question is why Lisp for scripting? What's the technical reason behind choosing it? Or is it just personal preference? I use emacs myself and my only complaint is elisp. In this time and age it looks very alien-ish to most people and judging by my colleagues, It can be a major deterrent from using emacs.
1. Lisp is what enables any part of Nyxt to be reprogrammed at any time (even whilst running).
2. Lisp enables us to easily program DSL's for different bits of functionality. For example, we could easily write/interpret a DSL for describing uBlock matrix rules.
3. We try to insulate users who don't know Lisp a little bit by providing graphical configuration interfaces (like emacs), we are working on improving these to make them almost as effective as writing your config by hand.
We're working on it. Big projects like this take time. Hopefully with time our vision will crystallize into something more obvious :-)
Your project is essentially a thin UI veneer on top of C browser engines. That latter part, which is by far the most interesting, can not be reprogrammed in Lisp except through the very limited exposed C library API. Which leads me to the issues I see with Nyxt:
Security will always be a serious problem (and getting worse as time flows). You don't have the resources of Google or even Mozilla, that ship self-contained browsers and can implement security solutions in a holistic, systemic manner. Doing browsing with the isolated engine libraries was (and still is) a recipe for disaster.
Then, for the same reasons, the big corporations can essentially kill your project at any point by treating it as unsafe/insecure and having their sites stop working (which is actually happening at Google).
But most important to me, other than security, is the lack of flexibility and power. The UI veneer and subsets of the rendering engine library APIs that you expose as programmable in Lisp, are the least interesting ones. Why would anyone want to reimplement uBlock or other popular extensions in some convoluted mix of Lisp and Javascript, rather than use the superior originals? This is the final tombstone for me.
It's clear that you're trying to build an ecosystem and deliver "apps" on top of, like an Emacs-like for the web maybe, but for the reasons I mentioned I see it as fundamentally flawed and want no part of it.
1. Nyxt is entirely written in Common Lisp, so yes, any part of it can be reprogrammed at any time. All of our FFI bindings are also written in Common Lisp (https://github.com/atlas-engineer/cl-webkit). In fact, you can even GENERATE bindings at run time. So it is irrelevant what part is invoking C, it is still fully funcall'able at runtime. This is what makes Nyxt not a 'thin veneer', but rather a deep integration which exposes all resources to the end-user (something unique to Nyxt).
2. Our project is a chrome that is agnostic of the renderer engine. We can use both WebKit and Web Engine (Chromium). This makes us resilient to renderer specific problems. If websites decide to ban browsers that utilize WebKitGKT+, we'll have another renderer available to us. We talk about this in our article where we justify some of our technical design decisions: https://nyxt.atlas.engineer/article/technical-design.org
3. Security is very important to us. We rely on upstream providers of web engines (WebKitGTK+, Qt WebEngine) to test and audit secure web engines for us. We can't do everything, you're right about that. For this reason, we give users the choice, and hope for the best!
4. "Lack of flexibility and power"- I think this point is probably the most inaccurate. If you look through our articles you'll see a couple of things that make Nyxt powerful and flexible.
4.A. Composability, all extensions (plugins, as you may call them) can call and utilize each other. That means, as our ecosystem grows, so does the power grow exponentially!
4.B. Flexibility: We give the user access to the complete Common Lisp compiler, all packages on Quicklisp, and the ability to override and change literally any aspect of Nyxt. I often speculate that Nyxt is potentially the most flexible browser to have ever existed.
5. Lastly, no, we are not trying to deliver "apps" on top of Nyxt. Nyxt is a browser, and a programmable platform, not an app delivery mechanism.
I hope that the above was informative, and if not changed your mind, at least exposed you to our view point!
Once again, thanks for the critique, and happy hacking!
2. This doesn't solve the problem. Being able to use both webkit and web engine in no way makes you resilient to the issue I brought up. Google has plenty of reasons to disallow and prevent their engine to be used by Nyxt and they have said that they will do so. Your answer strengthens my point.
3. Again, the issue is systemic and there's nothing upstream providers of web engines can do. Using these libraries in isolation will always expose you to significantly more security issues than using them as part of the browsers they were meant to be used in.
4. Flexibility and power (as I explained) is me using uBlock origin and coutless other extensions without reimplementing them from zero. Do you have uBlock origin for Nyxt? I rest my point.
5. Really? Then explain this: https://nyxt.atlas.engineer/applications
I'm very disappointed in your answers but I rest easy in knowing that my opinions and choice not to waste my time with your project are justified.
2. We don't depend upon Google, we could just as well use Servo. The whole point is that we are agnostic of rendering engine.
3. This point is unsubstantiated and false. There is no technical reason to justify this claim.
4. Supporting WebExtensions is on our roadmap, it takes some time. Please have patience :-)
5. We are building applications ON Nyxt, it is however not the purpose of Nyxt. It is just one of the many things are doing with Nyxt as platform.
Your loss :-)
I prefer to set Firefox to start searching when I type, and to restrict searching in that way to links only. This means that I can just start typing some text from a link and hit enter to navigate there. No weird letter combos like vimium or vimperator, so easier in that regard, but also does not work for every click target, so crappier in that regard.
I do a heck of a lot more navigating than text selection, though.
• / enters “quick find” mode, which is roughly the same as Ctrl+F/⌘F, just it’ll close the search bar automatically a short time after you stop interacting with it.
• ' enters “quick find (links only)” mode, meaning it searches only within link text.
* VimFx³ provided handy keyboard short-cuts for working within the browser
* ItsAllText⁴ which allowed me to use GVim to edit and save the contents of a text box
While going through its builtin tutorial, I found that it also supports keyboard-based selection of text (similar to that shown in this article). While this feature is documented as not yet being stable, I’ve found that it works well in my exeriment.
I’ve yet to incorporate the rest of Tridactyl’s extra functionality into my workflow but what they’ve achieved with the WebExtensions API is very impressive. Also, and importantly, the built-in tutorial and documentation are excellent.
While working from home, I’m currently using Windows 10 so I’ve ran into one issue⁵, “Encoding of non-Latin-1 characters entered in external editor gets messed up with Unicode-based external editors on Windows” (and it looks like that should be fixed soon).
1. https://github.com/tridactyl/tridactyl
2. https://addons.mozilla.org/en-US/firefox/addon/tridactyl-vim...
3. https://github.com/akhodakivskiy/VimFx
It'll get a wider release once we reimplement `:restart`.
If you're on Tridactyl stable you could run the script anyway and see what happens. It's mostly compatible : )
I’m now able to quickly and easily open, close and re-edit text-boxes containing UTF-8 character. Thanks.
You can `:set editorcmd` to something that gives gVim more commands, like is mentioned in this issue: https://github.com/tridactyl/native_messenger/issues/18
gvim -c "set filetype=markdown fileencoding=latin1"
At that stage, I hadn’t discovered the use of `x ++enc=utf-8` to resolve the issue and gave up at that stage (I thought I had reset the `editorcmd` but must have forgot). Anyhow, with the new native messenger, I don’t need to mess with specifying character sets and I’ve now set the Tridactyl `editorcmd` to the simpler: gvim -c "set filetype=markdown"
Now GVIm opens with UTF-8 as both the “encoding” and “fileencoding” so I can exit it as usual with a simple `:x` and the text-box updates correctly.Thanks again (your help with this prompted me to become a sponsor).
what a beautifully-written lambda. i'm not finished reading source but i can't think of a reason i wouldn't prefer to use nyxt over every other browser when i'm in x11.
[1] https://chrome.google.com/webstore/detail/vimium/dbepggeogba...
qutebrowser has offered caret mode for a while, but without the hinting. You have to select some text with a search to initiate.
This is a new development in pointer-less and keyboard-driven browsing.
Also, the experience of a Chrome extension is pathetic compared to that of a browser where keyboard is first-class. With Chrome, even things like closing a tab or opening a new tab are inaccessible until the browser has parsed a page, the DOM has loaded, and the extension has injected and then run the JS into the page. (Which also means that you can't use it without also allowing JS in all pages you browse.)
And only after reading this paragraph at the _bottom_ of README.org on Github [1] I could find help in Nyxt:
> For full documentation about Nyxt, how it works, and how to extend it please see the embedded help. To get started, run the help command (C-space help).
Could you make it more obviuos? It would be great to have the tutorial [2] and the manual [3] in a readable form on your site.
[1] https://github.com/atlas-engineer/nyxt#documentation--custom...
[2] https://github.com/atlas-engineer/nyxt/blob/master/source/tu...
[3] https://github.com/atlas-engineer/nyxt/blob/master/source/ma...
If you have any suggestions as to how to remedy this, or if you think the trade-off is not worth it, we are all ears!
I'm just telling you about my experience. Obviously Nyxt is very different from more conventional browsers. I'm an Emacs and StumpWM user, and I'd love to have the same kind of power in browser environment. But without easily accessible docs it's just a little bit too high barrier for me.
> it would drift from different versions people were using
Good point. Maybe as a first step just copy that paragraph from readme file to a more prominent place on site? It's very unusual for a project site to have no manual.
Then make the latest version of docs available online. It should be clear 1) what version it talks about, 2) how to check version of user's installation, and 3) how to open the embedded help.
Then if really needed add docs for previous versions, like some projects do. For instance https://www.postgresql.org/docs/current/index.html.
I suppose at least some basic concepts have been stable enough to not change anytime soon?
Or does Nyxt still change substantially from the UX point of view?
We do have a page https://nyxt.atlas.engineer/documentation that basically lists the information. We used to retain that link, but found it unnecessary since now documentation is all built-in.
As Nyxt is quite young, it is still rapidly changing between releases (this does include the UX (as you've mentioned)).
For this reason we would need to provide versioned documentation. Perhaps we can generate versioned documentation from our CI. I will look into it. Thank you for brainstorming with me :-)
BTW, the title is incorrectly editorialized: this is not about pasting at all.
I've read some in the internet and they say Qt is *generally* lighter than GTK. Is that the case? Should I try and build the Qt version for Nyxt if I want performance?
Also, does either version has more feature than the other? Thanks :)
Not everyone has the benefit-privilege of using a pointing device.
Other cases where your mouse is broken or damaged, ok, but otherwise...what are the benefits? (Apart from being able to say 'I don't use the mouse for anything').
The truth is that you cannot predict all the scenarios and possibilities out there, no matter how hard you try, and it is naive and arrogant to pretend that you can.
For me personally, mouse use comes with a huge ergonomic hit, and results in discomfort and pain.
Keyboard browsing (I use qutebrowser) is also much faster and more efficient once I've conquered the week-long learning curve.
Keyboard support also has a long history in browsers, with Opera 4.x being one of the pioneers of one-key shortcuts, though not vi-style.
i can't quite maintain my favorite hyper-vigilant hacker-dev mental posture while switching between i/o devs
It is unlikely that I'm unique in this.