Ncurses: Farben und andere Attribute

Aus Wikibooks

Wechseln zu: Navigation, Suche


<<< ncurses-Startseite ncurses << Inhaltsverzeichnis
< Begriffsklärung und grundlegende ncurses-Funktionen Spezialtasten >

Inhaltsverzeichnis




Damit ncurses-Programme in ihrer ganzen Farbenpracht erstrahlen können, muss im Programmcode die Funktion

int start_color(void);

initial aufgerufen werden.

[Bearbeiten] Beispiel

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

Ncurses2.png


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.

[Bearbeiten] Farben einstellen

int init_pair(short pair, short f, short b);
int init_color(short color, short r, short g, short b);

Parameter:

  • pair: Paarnummer; 1 <= pair < COLOR_PAIRS
  • f, b: foreground-color, background-color; 1 <= (f bzw. b) < COLOR
  • r, g, b: ... RGB; 0 <= (r, g bzw. b) <= 1000

Diese Funktionen sind nur dann sinnvoll einsetzbar, wenn das Terminal Farben, bzw. die Neudefinition von Farbwerten unterstützt. Zwecks Abfrage der Farbfähigkeiten des verwendeten Terminals gibt es die Funktionen

bool has_colors(void);

und

bool can_change_color(void);

Erstere liefert die Information, ob das Terminal Farben überhaupt unterstützt. Die zweite Funktion dient der Abfrage, ob der Programmierer die Farbwerte ändern kann.

[Bearbeiten] Basisfarben

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

[Bearbeiten] Textvorder- und -hintergrundfarbe

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

[Bearbeiten] Beispiel

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

Ncurses3.png

[Bearbeiten] Fensterhintergrund

int bkgd(chtype ch);

[Bearbeiten] Beispiel

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

Ncurses4.png

[Bearbeiten] Zusätzliche Textattribute

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.

[Bearbeiten] Beispiel

#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) Ncurses6.png
KDE-Konsole (Farbschema: XTerm-Farben) Ncurses6 2.png
rxvt, aterm, xterm Ncurses6 1.png


<<< ncurses-Startseite ncurses << Inhaltsverzeichnis
< Begriffsklärung und grundlegende ncurses-Funktionen Spezialtasten >


Persönliche Werkzeuge