Atrybuty są specjalnymi zdolnościami terminala używanymi podczas wypisywania znaków na ekran. Znaki mogą być wypisywane jako: pogrubione, podkreślone, migające, itp. W ncurses masz możliwość włączania/wyłączania atrybutów aby twój program wyglądał ładniej. Atrybuty które możesz wykorzystać:
| Definicja | Atrybut |
| A_ATTRIBUTES | maska dla atrybutów (chtype) |
| A_NORMAL | normalny, resetuje wszystkie inne |
| A_STANDOUT | najlepsze podświetlenie |
| A_UNDERLINE | podkreślenie |
| A_REVERSE | odwrócenie video |
| A_BLINK | miganie |
| A_DIM | dim lub połowa jasności |
| A_BOLD | pogrubienie lub extra jasno |
| A_ALTCHARSET | użyj alternatywnego zestawu znaków |
| A_INVIS | niewidzialny |
| A_PROTECT | ??? |
| A_CHARTEXT | maska dla aktualnych znaków (chtype) |
| A_COLOR | maska dla koloru |
| COLOR_PAIR(n) | ustaw parę kolorów na tą przechowywaną w n |
| PAIR_NUMBER(a) | pobierz parę kolorów przechowywaną w atrybucie a |
Ncurses definiują osiem kolorów, które możesz użyć na terminalu obsługującym kolory. Najpierw musisz zainicjować struktury danych kolorów za pomocą start_color(), póżniej sprawdziać zdolność terminala has_colors(). start_color() zainicjuje COLORS maxymalną liczbą wspieraną przez terminal, oraz COLOR_PAIR - maxymalna ilość par, które możesz zdefiniować.
Atrybuty mogą być łączony za pomocą operatora OR
'
', tak więc możesz stworzyć pogrubione, migające wyjście:
Kiedy ustawisz oknu atrybut attr wszystkie znaki zawarte w nim zostaną wypisane z tym atrybutem. Atrybut nie zniknie podczas przewijania, przesuwania, itp.
Pisząc programy dla ncurses i BSD curses musisz pamiętać, że te drugie nie obsługują kolorów ( także starsze wersje curses z SYSV nie mają obsługi kolorów ). Jeżeli chcesz aby twój program pracował pod obiema bibliotekami musisz posłużyć się #ifdef.
Użyj wattron(...) aby ustawić win nową parę kolorów:
Lub połącz kolory z innymi atrybutami:
Pierwsze wywołanie ustawi kolor i pogrubienie. Drugie wyróżnienie i kolory, będziesz miał podświetlony czerwony na niebieskim tle.
Jak mieszać atrybuty i kolory? Niektóre terminale, tak jak Linuksowa konsola, posiadają kolory, a niektóre ich nie mają ( xterm, vs100, itp. ). Następujący kod powinien rozwiązać problem:
Najpierw CheckColor inicjalizuje kolory za pomocą start_color(), póżniej sprawdza ( has_colors() ) czy terminal ma kolory. Jeżeli TRUE to inicjalizujemy parę kolorów, oraz ustawiamy ją dla okien ( wattrset(...) ). Jeżeli nie mamy kolorów ustawiamy jakieś zastępcze atrybuty ( odwróceni, pogrubienie ).
Aby uzyskać kolory w xtermie najlepszym sposobem jaki znalazłem jest skorzystanie z ansi_xterm wraz z połatanym wpisem w terminfo, zawartym w pakiecie Midnight Commander. Znajdź źródła ansi_xterm i Midnight Commandera ( mc-x.x.tar.gz ). Skompiluj ansi_xterm, użyj tic z xterm.ti i vt100.ti z archiwum MC. Włącz ansi_xterm i przetestuj go.