Du hast keine andere Möglichkeit, als irgendwelche Kontrollsequenzen nach stdout zu schreiben und zu hoffen, dass das Terminal sie versteht. Curses macht intern auch nichts anderes.
Curses schaut lediglich beim Start in die $TERM
-Umgebungsvariable. Die soll vom Terminalemulator noch vor dem Starten der Shell eigentlich gesetzt werden. Da steht dann zum Beispiel xterm-256color
drin und daraufhin schaut Curses in (s)einer Datenbank nach, welche Kontrollsequenzen dieses Terminal nun versteht. Kommt dabei zum Beispiel raus, dass das Terminal keine Farben kann, dann werden auch die Steuersequenzen für die Farben nicht ausgegeben – dann hast du zumindest keinen Zeichensalat auf dem Bildschirm.
Das heißt aber auch: Wenn $TERM
auf ein Terminal zeigt, das Curses gar nicht kennt, dann geht’s u.U. gar nicht. Diese Situation kannst du manchmal via SSH haben. (Nutzer von st kennen das.)
Wenn du kein Curses benutzen willst, dann musst du diese Arbeit selbst machen. Das kann häufig gut gehen, weil viele Terminals heute so einigermaßen irgendwie kompatibel zu einem XTerm sind. Bei den ganz grundlegenden Steuersequenzen stehen die Chancen noch besser.
Hier gibt’s eine Übersicht davon, was ein XTerm heute kann:
https://invisible-island.net/xterm/ctlseqs/ctlseqs.html
Vielleicht reichen dir ja schon zwei davon:
Damit könntest du eine top-artige Ausgabe erzeugen.
Natürlich hast du nach wie vor das Problem, dass das Terminal vielleicht diese Sequenzen nicht kapiert. Da es keine Schnittstelle gibt, um das Terminal zu fragen, was es denn versteht, … tja. ☺ Vielleicht ein Flag in dein Programm einbauen, was alle Steuersequenzen unterdrückt.