Ncurses: Farben und andere Attribute
<<< ncurses-Startseite | ncurses | << Inhaltsverzeichnis |
< Begriffsklärung und grundlegende ncurses-Funktionen | Spezialtasten > |
Damit ncurses-Programme in ihrer ganzen Farbenpracht erstrahlen können, muss im Programmcode die Funktion
int start_color(void);
initial aufgerufen werden.
Beispiel
[Bearbeiten]#include <curses.h>
#include <stdlib.h>
void quit(void)
{
endwin();
}
int main(void)
{
initscr();
atexit(quit);
start_color();
clear();
mvaddstr(5, 5, "Hallo");
mvaddstr(6, 10, "Welt!");
mvaddstr(15, 1, "Programm beenden durch Drücken einer Taste");
refresh();
getch();
return(0);
}
Das Rechteck rechts-unten auf diesem und den folgenden Screenshots stellt übrigens den Cursor dar. Die Anzeige des Cursors kann mit der curs_set
-Funktion ein-/ausgeschaltet werden.
Farben wählen
[Bearbeiten]int init_pair(short pair, short f, short b);
Parameter:
pair
: Paarnummer;1 <= pair < COLOR_PAIRS
f, b
: foreground-color, background-color;1 <= (f bzw. b) < COLOR
Diese Funktion ist nur dann sinnvoll einsetzbar, wenn das Terminal Farben unterstützt, was aber auch häufig der Fall ist. Zwecks Abfrage der Farbfähigkeit gibt es die Funktion
bool has_colors(void);
Basisfarben
[Bearbeiten]Nach der Initalisierung mittels start_color
sind bei farbfähigen Terminals unmittelbar die acht ncurses-Basisfarben verwendbar:
COLOR_BLACK | = 0 | ♦ |
COLOR_RED | = 1 | ♦ |
COLOR_GREEN | = 2 | ♦ |
COLOR_YELLOW | = 3 | ♦ |
COLOR_BLUE | = 4 | ♦ |
COLOR_MAGENTA | = 5 | ♦ |
COLOR_CYAN | = 6 | ♦ |
COLOR_WHITE | = 7 | ♦ |
Textvorder- und -hintergrundfarbe
[Bearbeiten]int color_set(short color_pair_number, void* opts);
Farben werden immer paarweise (Vorder-, Hintergrundfarbe) gesetzt (init_pair
). Der Parameter opts
ist ein Null-Pointer (0).
Beispiel
[Bearbeiten]#include <curses.h> #include <stdlib.h> void quit(void) { endwin(); } int main(void) { initscr(); atexit(quit); start_color(); clear(); init_pair(1, COLOR_GREEN, COLOR_RED); color_set(1, 0); mvaddstr(5, 5, "Hallo"); mvaddstr(6, 10, "Welt!"); mvaddstr(15, 1, "Programm beenden durch Drücken einer Taste"); refresh(); getch(); return(0); }
Fensterhintergrund
[Bearbeiten]int bkgd(chtype ch);
Beispiel
[Bearbeiten]#include <curses.h>
#include <stdlib.h>
void quit(void)
{
endwin();
}
int main(void)
{
initscr();
atexit(quit);
start_color();
clear();
init_pair(1, COLOR_GREEN, COLOR_RED);
bkgd(COLOR_PAIR(1));
mvaddstr(5, 5, "Hallo");
mvaddstr(6, 10, "Welt!");
mvaddstr(15, 1, "Programm beenden durch Drücken einer Taste");
refresh();
getch();
return(0);
}
Zusätzliche Textattribute
[Bearbeiten]Zusätzliche Textattribute lassen sich mit den Funktionen
int attrset(int attrs); // setzt Attribute für nachfolgende Texte int attron(int attrs); // schaltet zusätzliche Attribute für nachfolgende Texte ein int attroff(int attrs); // schaltet die angegebenen Attribute wieder aus int standend(void); // attrset(0) int standout(void); // attrset(A_STANDOUT)
einstellen. Einzelattribute lassen sich mittels der OR-Bitoperation ( | ) verknüpfen. Als Attribute stehen zur Verfügung:
A_NORMAL | normal |
A_STANDOUT | Highlight-Modus |
A_UNDERLINE | unterstrichen |
A_REVERSE | revertiert |
A_BLINK | blinkend |
A_DIM | gedimmt |
A_BOLD | fett |
A_PROTECT | geschützt |
A_INVIS | unsichtbar |
A_ALTCHARSET | alternatives Character-Set |
Die genauen Auswirkungen dieser Attribute sind teilweise abhängig von den Fähigkeiten des eingesetzten Terminals.
Beispiel
[Bearbeiten]#include <curses.h> #include <stdlib.h> void quit(void) { endwin(); } int main(void) { initscr(); atexit(quit); start_color(); clear(); init_pair(1, COLOR_YELLOW, COLOR_BLUE); init_pair(2, COLOR_GREEN, COLOR_BLUE); bkgd(COLOR_PAIR(1)); attrset(A_UNDERLINE); mvaddstr(5, 5, „Hallo“); attrset(A_BOLD); mvaddstr(6, 10, „Welt!“); attrset(A_DIM | COLOR_PAIR(2)); mvaddstr(15, 1, "Programm beenden durch Drücken einer Taste"); refresh(); getch(); return(0); }
KDE-Konsole (Farbschema: Konsole-Standard) | |
KDE-Konsole (Farbschema: XTerm-Farben) | |
rxvt, aterm, xterm |
Farben ändern
[Bearbeiten]int init_color(short color, short r, short g, short b);
Parameter:
color
: Farb-Nummer bzw. -Name (COLOR_BLACK, etc.) der Basisfarbe, die geändert werden sollr, g, b
: ... RGB;0 <= (r, g bzw. b) <= 1000
Diese Funktion ist nur dann sinnvoll einsetzbar, wenn das Terminal Farbänderungen unterstützt, was nicht immer der Fall ist (Software Terminals können für diesen Zweck z.b. in den Modus "xterm-256color" geschalten werden). Je nach Terminal wird nur ein kleinerer Wertebereich unterstützt, z.B.: 0 <= (r, g bzw. b) <= 999
. Zwecks Abfrage der Fähigkeit zur Farbänderung gibt es die Funktion
bool can_change_color(void);
Da die Funktion nur sehr selten sinnvoll angewendet werden kann, wird hier auf ein Beispiel verzichtet.
<<< ncurses-Startseite | ncurses | << Inhaltsverzeichnis |
< Begriffsklärung und grundlegende ncurses-Funktionen | Spezialtasten > |