Ask HN: Interesting TUIs (text user interfaces), maybe forgotten ones?
I use relatively few TUI's, and don't know much about them—about what good, convenient UX flows in TUI's can look like. I want to write some in Emacs. Do you have particularly nice examples of TUI's that deserve to be known and imitated? I know there's a lot of abandoned programs from the pre-GUI era that refined TUI's to a high level.
(I'm only familiar with a handful of modern ones in Emacs—Magit, the SLIME inspector, dired, as well as the terminal TUI from the Linux tool perf).
298 comments
[ 5.0 ms ] story [ 331 ms ] threadcointop: https://github.com/cointop-sh/cointop
Windows Commander/Total Commander are also NC clones, but implemented as GUI instead of TUI.
NC was one of the most convenient UIs for managing files, it’s a pity none of the major operating systems adopted this style for their default file managers.
Large inspiration for the overall UX comes from the Bloomberg terminal, where every function is reachable with four letter shortcut from the command box. It was really the command box that I liked. I've also built a sort of "flex" panel component for the layout so you can create as many panels as you like.
https://docs.hofstadter.io/getting-started/hof-tui/
https://github.com/hofstadter-io/hof/tree/_dev/lib/tui
This was built on the tview/tcell stack in Go. There is also the Charm.sh stack that takes a different approach but is generally prettier and more polished (having a company behind it)
You could easily browse through the menu hierarchy, but still memorize certain shortcuts that you often use (just like Windows). In later versions you could even use the mouse to select things if you wanted to. It didn't try to force any one particular method onto you, but let you use the input you're most comfortable with.
So many CLI tools are incredibly idiomatic and require you to do something in a very particular way with no on screen hints. Even the help screen is normally hidden behind some key combo. TUI or not, that seems unnecessarily elitist.
I think some of the old telnet MUDs or BBS games are nice to learn from, whether they used helpful text prompts (you are here, this is what you can do) or just rendered graphical menus in ASCII with colors. For some reason I still don't quite understand, games still seem to have more UI focus than productivity apps. Maybe cuz they tend to target the general public instead of B2B users?
Another pattern I really like: In more modern GUI IDEs and editors like Sublime or Jetbrains or VScode, you can usually launch a floating command input bar that will search through available files, commands, settings, etc. That lets you quickly find the thing you want without knowing the key combo for it (like format code, or forking a branch, or turning off word wrap). It would be cool to have a LLM layer in there that could parse natural language (instead of a basic keyword search) and execute commands based on that.
These are enhanced printf(), scanf(), getc() type functions by adding cursor positioning on an 80x25 screen. Pretty basic but you could create nice applications with these basic functions in Zortech c.
Granted, on DOS the screen size did not change as it does in UN*X, making TUIs easier.
On the systems (minis) I worked on decades ago, TUIs were far easier then anything I have seen since.
FWIW, _everybody_ has a hard time with curses. That's why it's (aptly) named "curses!"
https://developer.mozilla.org/en-US/docs/Web/CSS/@media
That's because DOS (well, the IBM PC really) had a memory-mapped text mode display buffer instead of terminal emulation.
So much easier to fill a screen rapidly and do partial updates, scrolling, moving windows etc. when you can just do pointer arithmetic and memcpy.
I think this will demonstrate color with ANSI.SYS and/or VT-color:
You might like "joe", which was inspired by WordStar: <https://joe-editor.sourceforge.io/>
https://en.wikipedia.org/wiki/Gorillas_(video_game)
also Money, and REMLINE
The UI was refered to as COW character oriented windows. It would be good if it could be open sourced, for historical reference.
There were other interesting TUIs, the one in Defrag in DOS, and the Antivirus would change characters on the fly to generate a mouse cursor.
The TUI in DOSSHELL.exe would use customise some characters to draw icons.
Maybe Scott Hanselman could be persuaded to work on open sourcing all the COW apps.
(Honarable mention for EDIT in DOS7, which appears to be a rewrite, supporting long filenames).
In the modern era, there is YEdit from the author of YCmd, which implements a similar looking UI, in Windows http://www.malsmith.net/edit/
Some other TUIs of note included the ones in Wordperfect, Norton Utilities, and of course TurboVision (though the last has implementations in modern environments).
Someone linked: https://news.ycombinator.com/item?id=40293624
That's ridiculous! The only invisible things in Emacs deserve to be so. For everything else, there is a menu bar which is also visible in terminal `emacs -nw` mode. Just add `(xterm-mouse-mode t)` to ~/.emacs to make sure the mouse works properly. Very pointy, very clicky, and nice pretty menus that tell you the shortcut of each function.
The thing you want (the helpful mouse interface) is the Emacs default. The funny command-line flag is what makes it weird. Just don't use that flag.
Tilde is a great EDIT.COM/Borland style IDE clone for Linux. It even has mouse support via remote Terminal.
> "Thank you so much to everyone for engaging with this feature exploration! Your passion has generated a ton of excitement in our own team, and I’m happy to share our proposed direction, which is that we will work with Malcolm Smith (malxau), the maintainer of Yedit, to ship Edit in Windows! We plan to do this by forking the Yedit code to a new OSS repo on GitHub, under Microsoft (like terminal or powertoys)."
YEdit being an MIT licensed open-source recreation of the MS-DOS 5 editor, by a Microsoft employee: http://www.malsmith.net/edit/
there have been lots and lots of advancements in IDEs since then, are none of those advancements useful to you? not everyone needs or wants a lot of those things, i'm sure, but they have utility which the Turbo* console IDEs lacked.
[0] https://github.com/justbur/emacs-which-key
WordStar is another one, used by George RR Martin et al: https://arstechnica.com/information-technology/2017/03/words...
https://github.com/taviso/wpunix
Sometimes a terminal would desync while you were typing up a storm, spewing control codes onto the screen. Many re-re-learned the need for frequent saves.
The WordPerfect spellchecker's short list of suggestions was typical of word processors, even decades later. A few of us knew to press the magic key to drop into a shell and use the mini's speller, which appeared to dump the whole wordlist, instantly sorted by similarity, one screen at a time. We could usually hop back into WordPerfect before anyone in charge asked why we weren't either at the system login screen or using WP. I never found another speller that worked like that.
They never did get the upgrade cards for those terminals, to turn them into smart-terminals. PC 386s with Win3.11 were the next big investment.
https://terminaltrove.com/
And it also features a great list of them here that many might not have heard of.
https://terminaltrove.com/list/
For example trippy and nvtop look very nice for TUIs and other 'top' based tools they have listed there.
https://terminaltrove.com/categories/top/
https://terminaltrove.com/trippy/
https://terminaltrove.com/nvtop/
There's screenshots and install instructions that's also convenient.
You can find reviews of hundreds of CLI And TUI programs, some great, others barely known and clearly forgotten. The last review is from 2015. Some reviews are very short, others are more involved.
The site is a blog with a tagline "Adventures with lightweight and minimalist software for Linux". The author K.Mandla is opinionated and has certain preferences for such programs like [1].
I have not looked at the site in years, but if you are willing to explore, this could be a fun option to find a variety of these tools.
[1]: https://inconsolation.wordpress.com/2015/01/19/wpe-and-we-so...
https://github.com/cosmos72/twin
A text mode environment and window manager, with terminal emulation, VNC-style sessions and viewers, and networked clients.
Disclaimer: I'm the author
I've been looking at https://github.com/gui-cs/Terminal.Gui but haven't tried it yet.
* Information dense screens (despite having only 80x25 characters)
* Responsiveness
* Reliable type-ahead when the responsiveness wasn't quite good enough
[1] https://github.com/ClementTsang/bottom
Someone took the time to rewrite it as a cross-platform open source library: https://github.com/magiblot/tvision
Edit: Not a rewrite, but a port. See comments below.
https://en.wikipedia.org/wiki/IBM_TopView
what i would like to see is a gui layer that wraps turbo vision such that i can have apps that work in the terminal and in a GUI. ideally so that the app binaries directly work in both without any recompile or change of code.
I just now came across the following related to Turbo Vision:
> TuiCss is a library focused to create web applications using an interface based on ASCII table, like the old MS-DOS applications. ...... The base of this project is Turbo Vision Framework, but some other frameworks were also checked to introduce some features to TuiCss, like curses, ncurses, Newt, etc.
https://www.npmjs.com/package/tuicss
I have no idea where you'd be able to find it since it's a proprietary product but InfoLease 9 had one of my favorites TUIs from a long gone era. You could navigate through and edit complicated contract information extremely quickly through a series of fixed number based menus and views. Once I got the hang of it I could blaze through entering tons and tons of data without any effort. I suppose a lot of BBSes had a kind-of similar interface but without the field validation and documentation (you could write ? virtually anywhere to get quick documentation about what you were editing or what something was intended for, and fields were validated in this really "perfect" way where it never felt like you lost time if you fat-fingered something).
The 3D buttons in a TUI, event-based programming in DOS, the rich help system… just awesome.
* `ranger` file manager: https://ranger.github.io/
* `ncdu` for visualising disk usage: https://dev.yorhel.nl/ncdu
* `htop` process monitor: https://htop.dev/
I just find them very intuitive, and information-dense while not being overwhelming.
* `vifm` file manager, more powerful and performant than ranger, for those who lean towards vim keybindings: https://vifm.info/gallery.shtml
* `btop` process monitor, for those who like eye candy: https://github.com/aristocratos/btop?tab=readme-ov-file#main...
It's a lot faster in all aspects, has mostly the same features and is pretty much a standalone binary.
edit: an even more minimal alteranative is nnn https://github.com/jarun/nnn
Something that can be used to present some simple TUI on a largish LCD based on a simple 1-wire UART interface in a semi-standardized, performant and cheap way (good quality IPS displays are ~ 6-10 EUR, and tang nano is 10-20 EUR, depending on model).
https://megous.com/dl/tmp/tty-fpga.mp4
It also implements an efficient "scrolling" output mode, so it can simply be connected to anything that produces debug output on UART, too. Use cases are pretty flexible. Smallest Microchip PIC MCU can easily present a reasonably nice UI. :)
It can also accept input over the Tang Nano's USB UART directly from the connected PC (which is what's on the video).
At 3 Mbaud, it's possible to keep updating the content of whole screen at 50 FPS from a simple MCU, over a single wire at easily manageable interface frequencies. Anyhting less, like incremental changes to subset of screen content via ANSI escape sequences pretty much runs at 60FPS/display's refresh rate.
It's based on Tang Nano 9k currently, but it should fit even Tang Nano 1k, which is a bit cheaper.
[0] https://github.com/jesseduffield/lazydocker
This one is more a layer 8 issue perhaps, but ideally there is some sort of guard rail that makes it so that if I accidentally start typing a message I think is going into slack, but I still have the tui focused, doesn’t execute a ton of very hard to reverse actions. Perhaps a good undo/redo stack is enough here, but some sort of vim like modality could work even better. It doesn’t happen often, but if it’s something like k9s the blast radius is… pretty big!
https://en.wikipedia.org/wiki/Slrn
https://en.wikipedia.org/wiki/Mutt_(email_client)
https://en.wikipedia.org/wiki/Ncdu
Thanks for listing it.
It's especially great if the server is out of disk space and/or the server is under too heavy a load to keep an SSH connection going; you can investigate what's clogging up space (usually logfiles gone awry) and clean up accordingly.
It's one of the default utilities I have installed on my servers for a very good reason and it's helped out countless times over the past few years for hobby servers of mine (aka the ones where "scaling it up" isn't an option because the budget is constrained by it being a hobby).
i like the conflict resolver, but one thing i didn't see is the ability to outright edit a commit. that is something i'd like to use occasionally