5 ms·
Isn't it true that ANSI sequences can vary depending on the terminal emulator? Does this program account for that somehow? In my shell scripts I often use `tpu
by jchook 2y ago
Isn't it true that ANSI sequences can vary depending on the terminal emulator? Does this program account for that somehow?
In my shell scripts I often use `tput bold` etc instead of hardcoding the sequences.
- Joker_vD 2y agoWell, yes, the meaning can depend, although many sequences have standardized meanings. The format of the sequences itself is also standardized but of course, the terminals don't need to use it either! There has been lots of terminals that use their own bespoke control sequences. Still, nowadays people who write new terminal emulators tend to approach with "do what xterm/libvte does" attitude which is quite sensible: very few people use actual, physical terminals anymore, and the software ones are, well, are generally based on xterm or libvte (or that third library I keep forgetting). And when was the last time terminfo has been updated anyhow? Not to mention that it lacks info about modern features such as e.g. the version of Unicode used/supported by the terminal.
- zokier 2y ago> And when was the last time terminfo has been updated anyhow? Two weeks ago? https://lists.gnu.org/archive/html/bug-ncurses/2024-11/msg00000.html https://lists.gnu.org/archive/html/bug-ncurses/2024-11/msg00... > misc/terminfo.src | 40 ++++++++++++++++++++++++++++++-------
- teddyh 2y ago> Isn't it true that ANSI sequences can vary depending on the terminal emulator? Yes, historically, many terminals were not even ANSI compatible. That is why the terminfo database (and its predecessor termcap) exist; for programs to look at the TERM environment variable, use that to look up the terminal’s capabilities in terminfo, and see what the terminal can and cannot do, and then choose to output whatever sequences the terminal does support. Normally, a program uses yet another library, like ncurses, to do this, but you can do it yourself if you want to, like in a shell script or similar. Outputting raw escape codes is wrong, since the correct way is so very easy.
- Joker_vD 2y agoDon't forget to take care about the terminal code pages as well! Thankfully, terminfo tells you which commands to use when you want to print e.g. β, right?
- teddyh 2y agoThe easy way is to either restrict yourself to ASCII, or to output raw characters in whatever encoding your locale (LC_CTYPE, LANG, etc.) specifies. If you want to get really fancy with ancient terminals, some of them have, for instance, line drawing characters (and, yes, sometimes things like β) hidden behind special escape sequences, which you can, IIRC, look up in terminfo.
- Joker_vD 2y agoSo the "correct" way is not that easy, after all. On the other hand, ignoring ancient terminals and simply pretending everything is color-enabled, VT-220 compatible, UTF-8 aware terminal emulator works well enough™ almost everywhere, including recent versions of Windows (which IIRC don't even have terminfo; not that it'd help since the legacy Windows console uses ioctl()-like interface instead of the escape sequences) — and is actually easy.
- teddyh 2y ago