i invite you change my view: there is absolutely no reason to fetishize the terminal. it’s a shitty interactive window with needless constraints. anything you can do in a tui can be done better in an actual graphical window.
GUI apps are ever more bloated and often aren't written for power users (many shortcuts etc). Sure they can have all those things, but they don't. Also, UI designers are really strong trend followers meaning their apps will waste a lot of screen real estate and are often white on light gray right now because that seems to be the current fashion.
Also running apps remotely with a simple and fast interface is often really a big plus.
This submission is about a library for building TUIs, though- what I was getting at is that as developers, we can choose to instead build guis and we’ll get better results.
I do agree with you that many gui apps are poorly built and bloated.
At least for me, apart from all the other obvious reasons to use a TUI, a big part of it is the fact that it's so much easier to get a coherent and consistent user interface with TUIs compared to GUIs. Every GUI uses a different UI system and as such will look incoherent with other apps. Just take GTK vs Qt.The UI of my daily machine looks extremely coherent and most of that is contributed to most of my programs being CLI or TUI.
How? Every single TUI app i have on my system has its own look and feel, down to even using different keys for the same or similar tasks. At best a few have vi-like hjkl keys for movement (but no number prefix) and some might use ? for showing the available keys or some sort of help, but there is pretty much zero consistency beyond that.
At least in comparison the overwhelming majority of GUI applications agree on things like what Ctrl+C/X/V, Backspace, Del, Arrow, etc will do and they tend to react the same when you press the left mouse button on something that vaguely resembles a push button or a check box (most also agree how scrollbars work, though not all of them).
You could, but it's not exactly a great comparison. Contrast with Apple's history of HIGs and similar for a company that puts effort into consistency. Where's the equivalent in the TUI?
I am not a huge fan of the TUI(Graphical terminal application) But I do think the CLI(an App you control only via a command line) is the better interface method for many application. mainly because they provide the highest code ratio of any methodology. That is, you get more interface with less code using a cli than any other method
But one thing I love about terminal applications is how nice they work on remote sessions.
> anything you can do in a tui can be done better in an actual graphical window.
Almost certainly. But for whatever reason, most GUIs created happen to be really bad at the things that most TUIs I've used happen to be really good at, namely searchability, reflowability (mostly used to increase text size and change font face for legibilit), and keyboard navigation.
GUIs that nail these things are delightful. They're highly accessible and extremely efficient to use. But it also seems to me like the full power afforded by GUI toolkits leads a lot of developers to pour a lot of time and effort into other things (which matter less, at least to me, personally) while totally neglecting those aspects of their apps.
I’d suggest that the proliferation of software with many possible interactions adding features that let you invoke actions via a command-line like interface (see Ctrl+P command palettes etc) prove that there is a place for these sorts of interfaces. Using a mouse is inefficient, and there are only so many hot keys one can assign and learn.
I agree that terminals are fetishised a bit, and I personally find a mix of GUIs and terminals to be the most effective combination, but I think there’s something valuable in the interaction pattern.
nothing is stopping gui programs from using keyboard shortcuts though. vs code and emacs use them to great effect. and there’s no quirks with the alt key.
As I said though, there are only so many keys on a keyboard, and only so many combinations one can learn, which is why command palette style interfaces have become so popular.
In VSCode there are probably ~1000 actions I can perform, and maybe ~50 keyboard shortcuts that I use, but I can still access all those actions quickly and fairly efficiently. This shows the value of command line interfaces.
My point is not that terminals themselves are good, but that there's clearly value in a terminal-style interface where commands are input instead of buttons clicked.
The original comment was suggesting that the value was outdated, but I think command palettes are a good counter-example.
The biggest problem with GUIs is that there is no reliable standard that works everywhere. The VT100 standard is 45 years old and will most likely work for the next 45 years. It is dead simple to implement GUIs (just write to stdout) and all those programs that use that protocol to render their GUI are immediately portable to almost every platform on the planet and work over the network via ssh without any additional need for programming.
All non-electron terminals have better latency story than cross platform GUIs. Surprised you mentioned Emacs here as it is notoriously laggish in this department.