I prefer polished UIs because they help sharpen my focus away from their flaws and into my work.
I prefer command line tools with polished UIs. I enjoy color highlighting. I run my editor in 256color mode.
I wish a restricted set of CSS was available through libncurses via ESC[ commands, with optional downgrade via term cap to Unicode characters like these one-eighth ones, so that we didn’t all have to suffer quite so much “UI is optional” default neglect from command line tool designs. (One that includes features for terminals newer than decades ago! Like tables, and borders :)
> it feels like a strange problem to solve.
Seen this way, why bother creating nicely-looking GUIs? It would be the same strange problem to solve.
Kids these days… Give them a chance and they will escape font-weight:200 saddlebrown-on-lavenderblush for tui “to look classy”.
Now, I'm not saying that my eyes hurt when I see boxes with color bleeding in a terminal. I've seen so many in years of TUI under DOS that I find them to be absolutely normal. But when I see a nicely done TUI, possibly in an unexpected or creative way, I find it more pleasing to use. It is the same as for a GUI: why not keep Windows 3.1 window decorations, if those details are not so important? The fact that it is in a terminal or not does not make any difference.
Aesthetics are medium-agnostic, they are valid both for TUIs and GUIs.
It is easier to code a relatively more secure constrained TUI login shell with ncurses than with a full GUI library.
More so than the editor, which I'm kinda treating as my config more than a finished app, I'm gradually splitting functionality into a bunch of gems so that the editor itself will feel even more like just configuration...
Here's another screenshot [2] showing part of the integration with Rouge for syntax-highlighting, and showing how it's rendering comments by recursing into Rouge's Markdown mode, which again recurses into Rouge's Ruby mode. The "LayeredLexer" class it shows is used to enable that.
EDIT: It's my main editor, by the way, and it persists open buffers, and shares them between the user interfaces using Drb. Currently I have 1969 buffers open...
Originally I did it as a quick way of ensuring I didn't lose data when I started using it, as Drb will forward exceptions as well, so the backend just won't crash, so as long as you don't do anything which corrupts the buffers you're good. Instead the frontend may crash (and throw me into a Pry repl, where I can query the backend and make sure I can recover the buffers), and I can just restart the frontend on the same buffer and keep working. (In practice it mostly crashes when I am using it to edit itself)
As an extra precaution I made it serialise all the open buffers to disk regularly. So I can just shut down my machine and next time I open all the buffers are still there (like Emacs etc. it'll warn me if the file has been edited since the buffer was opened).
Eventually this also gave me multi-frame support "for free" in that splitting the buffer vertically or horizontally just spawns a new instance of the editor and attaches to the same buffer (and then you can open whatever you want in it)
I realised too late that it's hard to see the border on imgur, here's one using a different theme which makes it a lot easier to see the transition:
In theory, one could use a special protocol to support some gui library in it “natively” rather than at html-like level. If interested, take a look at gtk-server for example (not as a library example, it doesn’t fit here, but as an idea/inspiration).
Web UI in comparison is always sluggish, usually required extra login method (instead of just sshing into client, or having CLI client with credentials saved) and in modern days require hundreds of megabytes of deps to even make the JS to run it
Don’t get me wrong, I’m not fond of the modern web either, but setting up something like a chat-like shell in a browser-over-ssh sounds like a pretty straightforward and lightweight job.
Edit: correct args would be
ssh -L 2345:server:2345 user@server '/home/user/bin/my-web-shell -p 2345'I do wish terminal graphics support was a little better. A terminal (like iTerm 2 [0]) that supports inline graphics allows your terminal to display plot etc in a graphical form without having to exit it. In MGR [1] this was the _only_ way to display graphics, even interactive, and I think it had a lot of merit.
There are many flaws with such approach, webapps being often crappy being of course one of them. But the redeeming factor is that practically all the tech already exists, this would need just minimal glue to make it reality, while many other approaches are more of a pipe dream.
At this point, I am 95% convinced that the reason web UI's are oftentimes perceived as sluggish is the easy access to custom animation/transition on the web platform. As a result, developers tend to overdo animations, or set the transition too long, resulting in a subpar experience.