I've come to the conclusion [1] that terminfo and
curses aren't
needed any more. If you target VT100 (or Xterm or any other
derivative) and directly write ANSI sequences, it'll just work.
(a) That is not my experience.
(b) To the extent that it's true, it works only if you stick to a very
much least-common-denominator set of sequences. VT-100s, VT-220s,
VT-240s, xterms, kterms, etc, each support a slightly different set of
sequences, with in some cases (eg, DCS) slightly different semantics
for the same basic sequences. Assume anything more than some very
minimal set and you are likely to find it breaks somewhere.
It's a few lines of code to get the current TTY
(on any modern Unix
system) into raw mode in order to read characters [2].
"Raw mode" has been ill-defined since sgtty.h gave way to termios.h.
Raw mode usually means something like -icanon -isig -echo -opost, and
for lots of purposes you don't need to go that far; -icanon with min=1
time=0 is enough for anything that doesn't want to read
usually-signal-generating characters as data.
[2] It's six lines to get an open TTY into raw
mode,
system("stty raw");
:-)
Let's see.
struct termios o, n; tcgetattr(fd,&o); n=o; cfmakeraw(&n);
tcsetattr(fd,TCSANOW,&n);
One line, though admittedly it's a little long. Two if you want to
keep the declarations and code separate.
one line to restore upon exit. Add in a few more
lines to handle
SIGWINCH (window resize). *Much* easier than dealing with curses.
Depends on what you're doing. For lots of purposes, if you don't use
curses or something morally equivalent, you will have to reinvent it,
which carries its own prices.
/~\ The ASCII Mouse
\ / Ribbon Campaign
X Against HTML mouse at
rodents-montreal.org
/ \ Email! 7D C8 61 52 5D E7 2D 39 4E F1 31 3E E8 B3 27 4B