Hacking the planet with Notcurses: a guide to TUIs (2020) [pdf]
nick-black.com
nick-black.com
"We don’t switch from blue to some other specified color, because we don’t know the background color of the terminal. Some people, possibly aliens, don’t favor a dark terminal background. If the terminal background were white, and we had just used e.g. ncdirect_fg(n, 0xffffff), text following “house” would be invisible.
"One might observe that a user with a blue background will have invisible “house” text. This is a real issue, one lacking a perfect solution. It is not generally possible to discover the RGB values of the default colors. I suppose all one can do is rest easy, serene in the belief that white backgrounds are one thing, but people with chromatic backgrounds deserve whatever happens to them."
That's a lot of cognitive dissonance in a work about UI design. Let's try to do better in making TUIs mainstream. That requires encouraging people to use the few features terminals _do_ provide. Like chromatic backgrounds.
I've been doing a fair amount of ncurses hacking recently[1], and I prefer to always explicitly specify colors. People won't get their preferred colors by default, but they'll always get a legible configuration by default.
These days we have dark modes and more elaborate extensions. Still sometimes things don't align.
So thanks for at least specifying both.
https://www.youtube.com/watch?v=dcjkezf1ARY (~ 6')
the WTF effect that video had on me lasted quite a while.
I still can't describe it.
i'm working on a new one now which is going to be some absolute Wizard of Oz shit; stay tuned. =] hack on!
https://github.com/dankamongmen/notcurses/releases/tag/v3.0....
One thing to note: it was written for an older version of Notcurses. So some of the details aren’t 100% up to date, but it covers the fundamentals.
For too long did I think that curses was the one and only way to do anything with a terminal.
Taking a peek under covers to see how easy it is. A couple printfs from whatever language is way way less overhead than bundling in the whole of curses.
https://gist.github.com/fnky/458719343aabd01cfb17a3a4f729679...
Turning the cursor on and off, 24 bit color, etc. A lot is possible though you potential sacrifice portability (which in 2021 translates to “don’t expect your stuff to render properly if your at the Linux console, and everywhere else it is fine.”)
Is there a proper name for a "top-like interface" ?
I think that "TUI" refers very broadly to any terminal user interface and both 'vim' and 'alpine' and 'top' would fall under this broad category.
But is there a specific name for a refresh-every-second, full page status output - like 'top' ?
Is there a standard library for creating such an interface, or do people always use curses ? Presumably curses did not exist in the early 80s when 'top' was first written ...
Programs that don’t drive the whole terminal screen, instead generating output that may be mixed with other output in the same terminal, are often referred to as CLIs.
curses dates back to around 1980: https://en.wikipedia.org/wiki/Ncurses#History
I guess I'll just keep calling it a "top-like interface".
How so? What if `top` redrew the terminal screen if and when you pressed the r-key instead of using a timer?
"Notcurses is licensed under Apache2, a demonstration that I have transcended your petty world of material goods, fiat currencies, and closed sources. Implement Microsoft Bob in it. Charge rubes for it. Put it in your ballistic missiles so that you have a nice LED display of said missile's speed and projected yield; right before impact, scroll "FUCK YOU" in all the world's languages, and close it out with a smart palette fade. Carve the compiled objects onto bricks and mail them to Richard Stallman, taunting him through a bullhorn as you do so."
This inspires me