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.

BeispielBearbeiten

#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ählenBearbeiten

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);

BasisfarbenBearbeiten

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 -hintergrundfarbeBearbeiten

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).

BeispielBearbeiten

#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);
}

 

FensterhintergrundBearbeiten

int bkgd(chtype ch);

BeispielBearbeiten

#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 TextattributeBearbeiten

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.

BeispielBearbeiten

#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 ändernBearbeiten

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 soll
  • r, g, b: ... RGB; 0 <= (r, g bzw. b) <= 1000

Diese Funktion ist nur dann sinnvoll einsetzbar, wenn das Terminal Farbänderungen unterstützt, was längst nicht immer der Fall ist. 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 >