Zum Inhalt springen

Ncurses: Farben und andere Attribute

Aus Wikibooks


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