ncurses(3X)

NUME
ncurses - interfață terminal caracter-celulă cu ieșire optimizată

SINOPSIS
#include <curses.h>

DESCRIERE
Biblioteca „new curses” oferă programatorului un mijloc independent de terminal de a citi intrările tastaturii și ale mouse-ului și de a scrie pe afișaje cu celule de caractere cu ieșire optimizată pentru a minimiza actualizările ecranului. ncurses înlocuiește bibliotecile curses din System V Release 4 Unix („SVr4”) și 4.4BSD Unix, a căror dezvoltare a încetat în anii 1990. Acest document descrie ncurses versiunea 6.6 (patch 20251230).

urses permite controlul conținutului ecranului terminalului; abstractizarea și subdivizarea acestuia cu windows și pads; preluarea evenimentelor tastaturii și mouse-ului; selectarea culorilor și a atributelor de redare (cum ar fi aldin sau subliniere); definirea și utilizarea tastelor soft label; accesul la baza de date terminfo a capacităților terminalului; o interfață de compatibilitate termcap; și o abstractizare a API a sistemului pentru manipularea terminalului (cum ar fi termios(3)).

ncurses implementează interfața descrisă de Curses X/Open ediția 7. În multe detalii comportamentale care nu sunt standardizate de X/Open, ncurses emulează biblioteca curses din SVr4 și oferă numeroase extensii utile.

Paginile de manual urses utilizează mai multe secțiuni pentru a clarifica aspecte legate de utilizare și interoperabilitate cu alte implementări curses. Secțiunea «NOTE» descrie problemele și avertismentele de care orice utilizator al API-ului ncurses ar trebui să fie conștient, cum ar fi limitările privind dimensiunea unui tip integral subiacent sau disponibilitatea unei macroinstrucțiuni de preprocesor exclusiv din definiția unei funcții (care împiedică preluarea adresei sale). Această secțiune descrie, de asemenea, detalii de implementare care vor fi semnificative pentru programator, dar care nu sunt standardizate. Secțiunea «EXTENSII» prezintă inovațiile ncurses care depășesc standardul Curses X/Open și/sau implementarea curses SVr4. Acestea sunt denumite extensions (extensii) pentru a indica faptul că nu pot fi implementate numai prin utilizarea API-ului bibliotecii, ci necesită acces la starea internă a bibliotecii. Secțiunea «PORTABILITATE» abordează aspecte (dincolo de exercitarea extensiilor) care ar trebui luate în considerare atunci când se scrie pentru un standard curses, sau pentru implementări multiple. Secțiunea «ISTORIA» examinează punctele de detaliu din ncurses și alte implementări curses de-a lungul deceniilor de dezvoltare a acestora, în special acolo unde precedentul sau inerția au împiedicat o mai bună proiectare (și, în câteva cazuri, unde o astfel de inerție a fost depășită).

O aplicație curses trebuie legată cu biblioteca; utilizați opțiunea -lncurses a compilatorului sau editorului de legături. Este posibil să fie disponibilă o versiune de depanare a bibliotecii; în acest caz, faceți legătura cu aceasta folosind -lncurses_g; (este posibil ca integratorul sistemului dumneavoastră să fi instalat aceste biblioteci astfel încât să puteți utiliza opțiunile -lcurses și, respectiv, -lcurses_g). Biblioteca ncurses_g înregistrează evenimentele care descriu acțiunile ncurses într-un fișier numit trace în directorul de lucru al aplicației la pornire. A se vedea secțiunea «CONFIGURAȚII ALTERNATIVE» de mai jos.

  Structura aplicației
O aplicație curses utilizează informații din configurația regională a sistemului; setlocale(3) o pregătește pentru apelurile bibliotecii curses.

        setlocale(LC_ALL, "");

Dacă configurația regională nu este astfel inițializată, biblioteca presupune că toate caracterele sunt imprimabile ca în ISO 8859-1, pentru a funcționa cu anumite programe vechi. Ar trebui să inițializați configurația regională; nu vă așteptați la un comportament consecvent din partea bibliotecii atunci când parametrii regionali nu au fost configurați.

initscr(3X) sau newterm(3X) trebuie să fie apelate pentru a inițializa curses înainte de utilizarea oricăror funcții care accesează sau manipulează ferestre sau ecrane.

Pentru a obține intrarea caracter cu caracter fără ecou - majoritatea programelor interactive, orientate spre ecran doresc acest lucru - utilizați următoarea secvență.

        initscr(); cbreak(); noecho();

Majoritatea aplicațiilor vor efectua configurarea următoare după cum se arată în continuare.

        noqiflush();
        keypad(stdscr, TRUE);

Un program curses intră apoi adesea într-o buclă de gestionare a evenimentelor. Apelați endwin(3X) înainte de a ieși.

  Prezentare generală
O bibliotecă curses abstractizează terminalul cu o structură de date SCREEN și reprezintă totul sau o parte a afișajului său cu structuri WINDOW. Proprietăți distincte se aplică fiecăreia; de exemplu, disciplina liniei a unui controlor de terminal Unix tipic este în unul din cele trei moduri: brut, cbreak sau («cooked - procesat») canonic. În curses, disciplina liniei este o proprietate a ecranului, care se aplică identic tuturor ferestrelor asociate cu acesta.

O fereastră window este o grilă dreptunghiulară de celule de caractere, adresată prin coordonate de linie și coloană (y, x), cu colțul din stânga sus (0, 0). O fereastră numită stdscr, în mod implicit de aceeași dimensiune ca ecranul terminalului, este întotdeauna disponibilă. Creați altele cu newwin(3X).

O bibliotecă curses nu gestionează ferestrele care se suprapun (dar a se vedea mai jos). Puteți fie să utilizați stdscr pentru a gestiona o singură fereastră care umple ecranul, fie să împărțiți ecranul în ferestre care nu se suprapun și să nu utilizați deloc stdscr. Amestecarea celor două abordări va duce la efecte imprevizibile și nedorite.

Funcțiile permit manipularea unei ferestre și a cursorului care identifică celula din interiorul acesteia în care va avea loc următoarea operație. Printre acestea, cele mai de bază sunt move(3X) și addch(3X): acestea plasează cursorul în interiorul și, respectiv, scriu un caracter pe stdscr.

Modificările frecvente ale ecranului terminalului pot provoca pâlpâiri neplăcute sau utilizarea ineficientă a canalului de comunicare cu dispozitivul, astfel încât biblioteca nu îl actualizează în general în mod automat. Prin urmare, după utilizarea funcțiilor curses pentru a acumula un set de actualizări dorite care au sens să fie prezentate împreună, apelați refresh(3X) pentru a spune bibliotecii să facă ecranul utilizatorului să arate ca stdscr. Biblioteca optimizează rezultatul său prin calcularea unui număr minim de operații pentru a muta ecranul de la starea sa de la actualizarea anterioară la cea nouă. O optimizare eficientă necesită informații precise despre dispozitivul terminal: gestionarea acestor informații este de competența API-ului terminfo(3X), o caracteristică a fiecărei implementări curses standard.

De asemenea, pot fi manipulate ferestre speciale numite pads. Acestea nu sunt limitate la dimensiunea ecranului terminalului și conținutul lor nu trebuie să fie afișat complet. A se vedea curs_pad(3X).

Multe terminale acceptă configurarea culorilor de prim-plan și de fundal ale celulelor de caractere, precum și attributes, care determină redarea caracterelor în moduri precum font aldin, subliniat sau în video invers. Consultați curs_color(3X) și curs_attr(3X).

curses definește constante pentru a simplifica accesul la un set mic de grafice pentru desenarea formelor corespunzătoare setului de caractere alternative DEC (ACS), o caracteristică a VT100 și a altor terminale. A se vedea addch(3X).

curses este implementat folosind controlorul de terminal al sistemului de operare; evenimentele legate de taste nu sunt recepționate sub formă de coduri de scanare, ci ca secvențe de octeți. Controlorul raportează tastele grafice (tastele alfanumerice și de punctuație, precum și spațiul) ca atare. Orice altceva, inclusiv tastele Tab, enter/return, tastatura numerică, săgețile și tastele funcționale, apar în curses sub forma unui caracter de control sau a unei secvențe de eludare multi-octet. curses le poate traduce pe acestea din urmă în coduri de taste unice. A se vedea keypad(3X) și getch(3X).

ncurses oferă reimplementări ale bibliotecilor SVr4 panel(3X), form(3X) și menu(3X); acestea permit suprapunerea ferestrelor și facilitează construirea de interfețe cu utilizatorul folosind curses.

  Inițializare
Selectarea unei valori adecvate a TERM în mediul procesului este esențială pentru funcționarea corectă a bibliotecilor curses și terminfo. Un sistem bine configurat selectează automat o valoare TERM corectă; tset(1) poate ajuta la depanarea situațiilor exotice.

Dacă modificați tipul terminalului dintr-un shell, exportați variabila de mediu TERM, apoi rulați tset(1) sau comanda «tput init». Consultați subsecțiunea «Tabulatoare și inițializare» din terminfo(5).

Dacă variabilele de mediu LINES și COLUMNS sunt definite sau dacă programul curses se execută într-un mediu de ferestre grafice, informațiile astfel obținute le înlocuiesc pe cele obținute prin terminfo. O extensie ncurses permite redimensionarea afișajelor terminalelor; a se vedea wresize(3X).

Dacă variabila de mediu TERMINFO este definită, un program curses verifică mai întâi dacă există o descriere a tipului de terminal în locația pe care o identifică. TERMINFO este utilă pentru elaborarea descrierilor de tip sau atunci când nu este disponibilă permisiunea de scriere la /usr/share/terminfo.

A se vedea secțiunea «MEDIU» de mai jos.

  Convenții de denumire
curses oferă multe funcții în forme variate folosind un set regulat de alternative la numele uneia elementare. Cele cu prefixul „w” necesită un argument de indicator WINDOW; cele cu prefixul „mv” efectuează mai întâi mișcarea cursorului folosind wmove(3X); prefixul „mvw” indică ambele. Funcția „w” este de obicei cea elementară; eliminarea acestui prefix indică de obicei operarea cu stdscr.

Patru funcții prefixate cu „p” necesită un argument pad; a se vedea mai jos.

În sinopsisurile funcțiilor, paginile de manual ncurses aplică următoarele denumiri parametrilor. Vom introduce tipurile de caractere în subsecțiunea următoare.

bf | o valoare booleană (TRUE sau FALSE)
c | un caracter sau un nr. întreg
ch | un chtype
wc | un wchar_t sau wint_t
wch | un cchar_t
win | indicator către o fereastră WINDOW
pad | indicator către o fereastră WINDOW care este un pad (fereastră de dimensiuni reduse)
pair | un identificator al perechii de culori prim-plan/fundal

  Configurații de caractere late și nelate
Această pagină de manual analizează în principal funcțiile care apar în orice configurație a bibliotecii. Există două configurații comune; pentru altele, consultați secțiunea «CONFIGURAȚII ALTERNATIVE» de mai jos.

ncurses
    este biblioteca în configurația sa „non-wide”, care gestionează numai caractere pe opt biți. Aceasta stochează un caracter combinat cu atribute și un identificator de pereche de culori într-un datum chtype, care este adesea un alias al lui int. Un șir de caractere curses este similar unui șir C char; un șir chtype se termină cu un 0 integral, caracterul curses nul.

    Atributele și identificatorul unei perechi de culori (fără caracterul corespunzător) pot fi stocate în variabile de tip chtype sau attr_t. În ambele cazuri, acestea sunt accesate prin intermediul unei măști integrale de biți.

    Fiecare celulă a unei ferestre WINDOW este stocată ca un chtype. Curses X/Open nu specifică dimensiunile codului de caractere sau ale identificatorului perechii de culori, nici cantitatea de biți de atribut, în chtype; acestea sunt dependente de implementare. ncurses utilizează opt biți pentru codul caracterului. O aplicație care necesită un tip de caracter mai lat, de exemplu pentru a reprezenta Unicode, ar trebui să utilizeze API pentru caractere late.

ncursesw
    este biblioteca în configurația sa „wide”, care gestionează codurile de caractere care necesită un tip de date mai mare decât poate reprezenta char (un tip de dimensiunea octetului). Aceasta oferă funcții suplimentare care le completează pe cele din biblioteca „non-wide”, atunci când dimensiunea tipului de caractere de bază este semnificativă. O convenție de denumire oarecum regulată leagă multe dintre variantele „wide” de omologii lor „non-wide” în cazul în care numele unei funcții „non-wide” conține «ch» sau «str», prefixați-l cu «_w» pentru a obține omologul „wide” De exemplu, waddch devine wadd_wch. O altă excepție este ins_nwstr (și variantele sale), scris astfel în loc de «insn_wstr». (Excepțiile care adaugă doar «w» includ addwstr, inwstr și variantele lor).

    Această convenție este inaplicabilă pentru unele nume de funcții „non-wide”, astfel încât sunt utilizate alte transformări pentru configurația „wide”: funcția de gestionare a fundalului ferestrei «bkgd» devine «bkgrnd»; funcțiile de desenare și ștergere a marginilor ferestrei sunt sufixate cu «_set»; iar funcțiile de manipulare a atributelor caracterelor precum «attron» devin «attr_on».

    cchar_t
        este un caracter complex curses și corespunde configurației chtype a caracterelor „non-wide”. Este un tip structură deoarece necesită mai multă stocare decât oferă un tip scalar standard. Este posibil ca un cod de caractere să nu poată fi reprezentat ca un char și, în plus, mai multe caractere pot ocupa o celulă (ca în cazul semnelor de accent și al altor diacritice). Fiecare caracter este de tipul wchar_t; un caracter complex conține un caracter de spațiere și zero sau mai multe caractere de nespațiere (a se vedea mai jos). Un șir de caractere complexe se termină cu un cchar_t al cărui membru wchar_t este caracterul lat nul. Atributele și identificatorul unei perechi de culori sunt stocate în câmpuri separate ale structurii, nu combinate într-un număr întreg ca în chtype.

    ncurses stochează fiecare celulă a unei WINDOW ca un cchar_t. setcchar(3X) și getcchar(3X) stochează și extrag date cchar_t.

    API-ul de bibliotecă lat al ncurses depinde de două tipuri de date standardizate de ISO C95.

    wchar_t
        stochează un caracter lat. Ca și chtype, acesta poate fi un alias al lui int. În funcție de codificarea caracterelor, un caracter lat poate fi spacing, ceea ce înseamnă că ocupă singur o celulă de caractere și însoțește de obicei avansarea cursorului, sau non-spacing, ceea ce înseamnă că ocupă aceeași celulă ca un caracter de spațiere, este adesea considerat un „modificator” al glifului de bază cu care se combină și de obicei nu avansează cursorul.

    wint_t
        poate stoca un wchar_t sau constanta WEOF, în mod analog cu funcțiile de manipulare a caracterelor de dimensiunea int din ISO C și constanta sa EOF.

  Indexare după numele funcției
Tabelul următor enumeră funcțiile curses furnizate în API-urile „non-wide” și „wide” și paginile de manual corespunzătoare care le descriu. Cele marcate cu «*» sunt specifice ncurses, nu sunt descrise de Curses X/Open și nici prezente în SVr4.

Numele funcției curses | Pagina de manual
COLOR_PAIR | curs_color(3X)
PAIR_NUMBER | curs_color(3X)
add_wch | curs_add_wch(3X)
add_wchnstr | curs_add_wchstr(3X)
add_wchstr | curs_add_wchstr(3X)
addch | curs_addch(3X)
addchnstr | curs_addchstr(3X)
addchstr | curs_addchstr(3X)
addnstr | curs_addstr(3X)
addnwstr | curs_addwstr(3X)
addstr | curs_addstr(3X)
addwstr | curs_addwstr(3X)
alloc_pair | new_pair(3X)*
assume_default_colors | default_colors(3X)*
attr_get | curs_attr(3X)
attr_off | curs_attr(3X)
attr_on | curs_attr(3X)
attr_set | curs_attr(3X)
attroff | curs_attr(3X)
attron | curs_attr(3X)
attrset | curs_attr(3X)
baudrate | curs_termattrs(3X)
beep | curs_beep(3X)
bkgd | curs_bkgd(3X)
bkgdset | curs_bkgd(3X)
bkgrnd | curs_bkgrnd(3X)
bkgrndset | curs_bkgrnd(3X)
border | curs_border(3X)
border_set | curs_border_set(3X)
box | curs_border(3X)
box_set | curs_border_set(3X)
can_change_color | curs_color(3X)
cbreak | curs_inopts(3X)
chgat | curs_attr(3X)
clear | curs_clear(3X)
clearok | curs_outopts(3X)
clrtobot | curs_clear(3X)
clrtoeol | curs_clear(3X)
color_content | curs_color(3X)
color_set | curs_attr(3X)
copywin | curs_overlay(3X)
curs_set | curs_kernel(3X)
curses_trace | curs_trace(3X)*
curses_version | curs_extend(3X)*
def_prog_mode | curs_kernel(3X)
def_shell_mode | curs_kernel(3X)
define_key | define_key(3X)*
del_curterm | curs_terminfo(3X)
delay_output | curs_util(3X)
delch | curs_delch(3X)
deleteln | curs_deleteln(3X)
delscreen | curs_initscr(3X)
delwin | curs_window(3X)
derwin | curs_window(3X)
doupdate | curs_refresh(3X)
dupwin | curs_window(3X)
echo | curs_inopts(3X)
echo_wchar | curs_add_wch(3X)
echochar | curs_addch(3X)
endwin | curs_initscr(3X)
erase | curs_clear(3X)
erasechar | curs_termattrs(3X)
erasewchar | curs_termattrs(3X)
exit_curses | curs_memleaks(3X)*
exit_terminfo | curs_memleaks(3X)*
extended_color_content | curs_color(3X)*
extended_pair_content | curs_color(3X)*
extended_slk_color | curs_slk(3X)*
filter | curs_util(3X)
find_pair | new_pair(3X)*
flash | curs_beep(3X)
flushinp | curs_util(3X)
free_pair | new_pair(3X)*
get_escdelay | curs_threads(3X)*
get_wch | curs_get_wch(3X)
get_wstr | curs_get_wstr(3X)
getattrs | curs_attr(3X)
getbegx | curs_legacy(3X)*
getbegy | curs_legacy(3X)*
getbegyx | curs_getyx(3X)
getbkgd | curs_bkgd(3X)
getbkgrnd | curs_bkgrnd(3X)
getcchar | curs_getcchar(3X)
getch | curs_getch(3X)
getcurx | curs_legacy(3X)*
getcury | curs_legacy(3X)*
getmaxx | curs_legacy(3X)*
getmaxy | curs_legacy(3X)*
getmaxyx | curs_getyx(3X)
getmouse | curs_mouse(3X)*
getn_wstr | curs_get_wstr(3X)
getnstr | curs_getstr(3X)
getparx | curs_legacy(3X)*
getpary | curs_legacy(3X)*
getparyx | curs_getyx(3X)
getstr | curs_getstr(3X)
getsyx | curs_kernel(3X)
getwin | curs_util(3X)
getyx | curs_getyx(3X)
halfdelay | curs_inopts(3X)
has_colors | curs_color(3X)
has_ic | curs_termattrs(3X)
has_il | curs_termattrs(3X)
has_key | curs_getch(3X)*
has_mouse | curs_mouse(3X)*
hline | curs_border(3X)
hline_set | curs_border_set(3X)
idcok | curs_outopts(3X)
idlok | curs_outopts(3X)
immedok | curs_outopts(3X)
in_wch | curs_in_wch(3X)
in_wchnstr | curs_in_wchstr(3X)
in_wchstr | curs_in_wchstr(3X)
inch | curs_inch(3X)
inchnstr | curs_inchstr(3X)
inchstr | curs_inchstr(3X)
init_color | curs_color(3X)
init_extended_color | curs_color(3X)*
init_extended_pair | curs_color(3X)*
init_pair | curs_color(3X)
initscr | curs_initscr(3X)
innstr | curs_instr(3X)
innwstr | curs_inwstr(3X)
ins_nwstr | curs_ins_wstr(3X)
ins_wch | curs_ins_wch(3X)
ins_wstr | curs_ins_wstr(3X)
insch | curs_insch(3X)
insdelln | curs_deleteln(3X)
insertln | curs_deleteln(3X)
insnstr | curs_insstr(3X)
insstr | curs_insstr(3X)
instr | curs_instr(3X)
intrflush | curs_inopts(3X)
inwstr | curs_inwstr(3X)
is_cbreak | curs_inopts(3X)*
is_cleared | curs_opaque(3X)*
is_echo | curs_inopts(3X)*
is_idcok | curs_opaque(3X)*
is_idlok | curs_opaque(3X)*
is_immedok | curs_opaque(3X)*
is_keypad | curs_opaque(3X)*
is_leaveok | curs_opaque(3X)*
is_linetouched | curs_touch(3X)
is_nl | curs_inopts(3X)*
is_nodelay | curs_opaque(3X)*
is_notimeout | curs_opaque(3X)*
is_pad | curs_opaque(3X)*
is_raw | curs_inopts(3X)*
is_scrollok | curs_opaque(3X)*
is_subwin | curs_opaque(3X)*
is_syncok | curs_opaque(3X)*
is_term_resized | resizeterm(3X)*
is_wintouched | curs_touch(3X)
isendwin | curs_initscr(3X)
key_defined | key_defined(3X)*
key_name | curs_util(3X)
keybound | keybound(3X)*
keyname | curs_util(3X)
keyok | keyok(3X)*
keypad | curs_inopts(3X)
killchar | curs_termattrs(3X)
killwchar | curs_termattrs(3X)
leaveok | curs_outopts(3X)
longname | curs_termattrs(3X)
mcprint | curs_print(3X)*
meta | curs_inopts(3X)
mouse_trafo | curs_mouse(3X)*
mouseinterval | curs_mouse(3X)*
mousemask | curs_mouse(3X)*
move | curs_move(3X)
mvadd_wch | curs_add_wch(3X)
mvadd_wchnstr | curs_add_wchstr(3X)
mvadd_wchstr | curs_add_wchstr(3X)
mvaddch | curs_addch(3X)
mvaddchnstr | curs_addchstr(3X)
mvaddchstr | curs_addchstr(3X)
mvaddnstr | curs_addstr(3X)
mvaddnwstr | curs_addwstr(3X)
mvaddstr | curs_addstr(3X)
mvaddwstr | curs_addwstr(3X)
mvchgat | curs_attr(3X)
mvcur | curs_kernel(3X)
mvdelch | curs_delch(3X)
mvderwin | curs_window(3X)
mvget_wch | curs_get_wch(3X)
mvget_wstr | curs_get_wstr(3X)
mvgetch | curs_getch(3X)
mvgetn_wstr | curs_get_wstr(3X)
mvgetnstr | curs_getstr(3X)
mvgetstr | curs_getstr(3X)
mvhline | curs_border(3X)
mvhline_set | curs_border_set(3X)
mvin_wch | curs_in_wch(3X)
mvin_wchnstr | curs_in_wchstr(3X)
mvin_wchstr | curs_in_wchstr(3X)
mvinch | curs_inch(3X)
mvinchnstr | curs_inchstr(3X)
mvinchstr | curs_inchstr(3X)
mvinnstr | curs_instr(3X)
mvinnwstr | curs_inwstr(3X)
mvins_nwstr | curs_ins_wstr(3X)
mvins_wch | curs_ins_wch(3X)
mvins_wstr | curs_ins_wstr(3X)
mvinsch | curs_insch(3X)
mvinsnstr | curs_insstr(3X)
mvinsstr | curs_insstr(3X)
mvinstr | curs_instr(3X)
mvinwstr | curs_inwstr(3X)
mvprintw | curs_printw(3X)
mvscanw | curs_scanw(3X)
mvvline | curs_border(3X)
mvvline_set | curs_border_set(3X)
mvwadd_wch | curs_add_wch(3X)
mvwadd_wchnstr | curs_add_wchstr(3X)
mvwadd_wchstr | curs_add_wchstr(3X)
mvwaddch | curs_addch(3X)
mvwaddchnstr | curs_addchstr(3X)
mvwaddchstr | curs_addchstr(3X)
mvwaddnstr | curs_addstr(3X)
mvwaddnwstr | curs_addwstr(3X)
mvwaddstr | curs_addstr(3X)
mvwaddwstr | curs_addwstr(3X)
mvwchgat | curs_attr(3X)
mvwdelch | curs_delch(3X)
mvwget_wch | curs_get_wch(3X)
mvwget_wstr | curs_get_wstr(3X)
mvwgetch | curs_getch(3X)
mvwgetn_wstr | curs_get_wstr(3X)
mvwgetnstr | curs_getstr(3X)
mvwgetstr | curs_getstr(3X)
mvwhline | curs_border(3X)
mvwhline_set | curs_border_set(3X)
mvwin | curs_window(3X)
mvwin_wch | curs_in_wch(3X)
mvwin_wchnstr | curs_in_wchstr(3X)
mvwin_wchstr | curs_in_wchstr(3X)
mvwinch | curs_inch(3X)
mvwinchnstr | curs_inchstr(3X)
mvwinchstr | curs_inchstr(3X)
mvwinnstr | curs_instr(3X)
mvwinnwstr | curs_inwstr(3X)
mvwins_nwstr | curs_ins_wstr(3X)
mvwins_wch | curs_ins_wch(3X)
mvwins_wstr | curs_ins_wstr(3X)
mvwinsch | curs_insch(3X)
mvwinsnstr | curs_insstr(3X)
mvwinsstr | curs_insstr(3X)
mvwinstr | curs_instr(3X)
mvwinwstr | curs_inwstr(3X)
mvwprintw | curs_printw(3X)
mvwscanw | curs_scanw(3X)
mvwvline | curs_border(3X)
mvwvline_set | curs_border_set(3X)
napms | curs_kernel(3X)
newpad | curs_pad(3X)
newterm | curs_initscr(3X)
newwin | curs_window(3X)
nl | curs_inopts(3X)
nocbreak | curs_inopts(3X)
nodelay | curs_inopts(3X)
noecho | curs_inopts(3X)
nofilter | curs_util(3X)*
nonl | curs_inopts(3X)
noqiflush | curs_inopts(3X)
noraw | curs_inopts(3X)
notimeout | curs_inopts(3X)
overlay | curs_overlay(3X)
overwrite | curs_overlay(3X)
pair_content | curs_color(3X)
pecho_wchar | curs_pad(3X)
pechochar | curs_pad(3X)
pnoutrefresh | curs_pad(3X)
prefresh | curs_pad(3X)
printw | curs_printw(3X)
putp | curs_terminfo(3X)
putwin | curs_util(3X)
qiflush | curs_inopts(3X)
raw | curs_inopts(3X)
redrawwin | curs_refresh(3X)
refresh | curs_refresh(3X)
reset_color_pairs | curs_color(3X)*
reset_prog_mode | curs_kernel(3X)
reset_shell_mode | curs_kernel(3X)
resetty | curs_kernel(3X)
resize_term | resizeterm(3X)*
resizeterm | resizeterm(3X)*
restartterm | curs_terminfo(3X)
ripoffline | curs_kernel(3X)
savetty | curs_kernel(3X)
scanw | curs_scanw(3X)
scr_dump | curs_scr_dump(3X)
scr_init | curs_scr_dump(3X)
scr_restore | curs_scr_dump(3X)
scr_set | curs_scr_dump(3X)
scrl | curs_scroll(3X)
scroll | curs_scroll(3X)
scrollok | curs_outopts(3X)
set_curterm | curs_terminfo(3X)
set_escdelay | curs_threads(3X)*
set_tabsize | curs_threads(3X)*
set_term | curs_initscr(3X)
setcchar | curs_getcchar(3X)
setscrreg | curs_outopts(3X)
setsyx | curs_kernel(3X)
setupterm | curs_terminfo(3X)
slk_attr | curs_slk(3X)*
slk_attr_off | curs_slk(3X)
slk_attr_on | curs_slk(3X)
slk_attr_set | curs_slk(3X)
slk_attroff | curs_slk(3X)
slk_attron | curs_slk(3X)
slk_attrset | curs_slk(3X)
slk_clear | curs_slk(3X)
slk_color | curs_slk(3X)
slk_init | curs_slk(3X)
slk_label | curs_slk(3X)
slk_noutrefresh | curs_slk(3X)
slk_refresh | curs_slk(3X)
slk_restore | curs_slk(3X)
slk_set | curs_slk(3X)
slk_touch | curs_slk(3X)
slk_wset | curs_slk(3X)
standend | curs_attr(3X)
standout (evidențiere) | curs_attr(3X)
start_color | curs_color(3X)
subpad | curs_pad(3X)
subwin | curs_window(3X)
syncok | curs_window(3X)
term_attrs | curs_termattrs(3X)
termattrs | curs_termattrs(3X)
termname | curs_termattrs(3X)
tgetent | curs_termcap(3X)
tgetflag | curs_termcap(3X)
tgetnum | curs_termcap(3X)
tgetstr | curs_termcap(3X)
tgoto | curs_termcap(3X)
tigetflag | curs_terminfo(3X)
tigetnum | curs_terminfo(3X)
tigetstr | curs_terminfo(3X)
timeout | curs_inopts(3X)
tiparm | curs_terminfo(3X)
tiparm_s | curs_terminfo(3X)*
tiscan_s | curs_terminfo(3X)*
touchline | curs_touch(3X)
touchwin | curs_touch(3X)
tparm | curs_terminfo(3X)
tputs | curs_termcap(3X)
tputs | curs_terminfo(3X)
trace | curs_trace(3X)*
typeahead | curs_inopts(3X)
unctrl | curs_util(3X)
unget_wch | curs_get_wch(3X)
ungetch | curs_getch(3X)
ungetmouse | curs_mouse(3X)*
untouchwin | curs_touch(3X)
use_default_colors | default_colors(3X)*
use_env | curs_util(3X)
use_extended_names | curs_extend(3X)*
use_legacy_coding | legacy_coding(3X)*
use_screen | curs_threads(3X)*
use_tioctl | curs_util(3X)*
use_window | curs_threads(3X)*
vid_attr | curs_terminfo(3X)
vid_puts | curs_terminfo(3X)
vidattr | curs_terminfo(3X)
vidputs | curs_terminfo(3X)
vline | curs_border(3X)
vline_set | curs_border_set(3X)
vw_printw | curs_printw(3X)
vw_scanw | curs_scanw(3X)
vwprintw | curs_printw(3X)
vwscanw | curs_scanw(3X)
wadd_wch | curs_add_wch(3X)
wadd_wchnstr | curs_add_wchstr(3X)
wadd_wchstr | curs_add_wchstr(3X)
waddch | curs_addch(3X)
waddchnstr | curs_addchstr(3X)
waddchstr | curs_addchstr(3X)
waddnstr | curs_addstr(3X)
waddnwstr | curs_addwstr(3X)
waddstr | curs_addstr(3X)
waddwstr | curs_addwstr(3X)
wattr_get | curs_attr(3X)
wattr_off | curs_attr(3X)
wattr_on | curs_attr(3X)
wattr_set | curs_attr(3X)
wattroff | curs_attr(3X)
wattron | curs_attr(3X)
wattrset | curs_attr(3X)
wbkgd | curs_bkgd(3X)
wbkgdset | curs_bkgd(3X)
wbkgrnd | curs_bkgrnd(3X)
wbkgrndset | curs_bkgrnd(3X)
wborder | curs_border(3X)
wborder_set | curs_border_set(3X)
wchgat | curs_attr(3X)
wclear | curs_clear(3X)
wclrtobot | curs_clear(3X)
wclrtoeol | curs_clear(3X)
wcolor_set | curs_attr(3X)
wcursyncup | curs_window(3X)
wdelch | curs_delch(3X)
wdeleteln | curs_deleteln(3X)
wecho_wchar | curs_add_wch(3X)
wechochar | curs_addch(3X)
wenclose | curs_mouse(3X)*
werase | curs_clear(3X)
wget_wch | curs_get_wch(3X)
wget_wstr | curs_get_wstr(3X)
wgetbkgrnd | curs_bkgrnd(3X)
wgetch | curs_getch(3X)
wgetdelay | curs_opaque(3X)*
wgetn_wstr | curs_get_wstr(3X)
wgetnstr | curs_getstr(3X)
wgetparent | curs_opaque(3X)*
wgetscrreg | curs_opaque(3X)*
wgetstr | curs_getstr(3X)
whline | curs_border(3X)
whline_set | curs_border_set(3X)
win_wch | curs_in_wch(3X)
win_wchnstr | curs_in_wchstr(3X)
win_wchstr | curs_in_wchstr(3X)
winch | curs_inch(3X)
winchnstr | curs_inchstr(3X)
winchstr | curs_inchstr(3X)
winnstr | curs_instr(3X)
winnwstr | curs_inwstr(3X)
wins_nwstr | curs_ins_wstr(3X)
wins_wch | curs_ins_wch(3X)
wins_wstr | curs_ins_wstr(3X)
winsch | curs_insch(3X)
winsdelln | curs_deleteln(3X)
winsertln | curs_deleteln(3X)
winsnstr | curs_insstr(3X)
winsstr | curs_insstr(3X)
winstr | curs_instr(3X)
winwstr | curs_inwstr(3X)
wmouse_trafo | curs_mouse(3X)*
wmove | curs_move(3X)
wnoutrefresh | curs_refresh(3X)
wprintw | curs_printw(3X)
wredrawln | curs_refresh(3X)
wrefresh | curs_refresh(3X)
wresize | wresize(3X)*
wscanw | curs_scanw(3X)
wscrl | curs_scroll(3X)
wsetscrreg | curs_outopts(3X)
wstandend | curs_attr(3X)
wstandout | curs_attr(3X)
wsyncdown | curs_window(3X)
wsyncup | curs_window(3X)
wtimeout | curs_inopts(3X)
wtouchln | curs_touch(3X)
wunctrl | curs_util(3X)
wvline | curs_border(3X)
wvline_set | curs_border_set(3X)

Extensia screen-pointer extension a ncurses adaugă funcții suplimentare corespunzătoare multora dintre cele de mai sus, fiecare cu un sufix „_sp”; a se vedea curs_sp_funcs(3X).

Disponibilitatea unor extensii este configurabilă atunci când ncurses este compilat; consultați secțiunile «CONFIGURAȚII ALTERNATIVE» și «EXTENSII» de mai jos.

VALOAREA RETURNATĂ
Dacă nu se indică altfel, funcțiile care returnează numere întregi returnează constantele OK în caz de succes și ERR în caz de eșec; a se vedea curs_variables(3X). Funcțiile care returnează indicatori returnează un indicator null în caz de eșec. De obicei, ncurses tratează un indicator nul transmis ca parametru al funcției drept un eșec. Funcțiile prefixate cu «mv» efectuează mai întâi mișcarea cursorului și eșuează dacă poziția (y, x) este în afara limitelor ferestrei.

MEDIU
Următoarele simboluri din mediul procesului personalizează comportamentul aplicațiilor ncurses în timpul rulării. Biblioteca poate fi configurată să nu ia în considerare variabilele TERMINFO, TERMINFO_DIRS, TERMPATH și HOME, dacă utilizatorul este superutilizator (root) sau dacă aplicația utilizează setuid(2) sau setgid(2).

  BAUDRATE
Biblioteca de depanare verifică această variabilă atunci când aplicația a redirecționat ieșirea către un fișier. ncurses interpretează valoarea sa integrală ca fiind viteza de linie a terminalului în biți pe secundă. Dacă această valoare este absentă sau nu este validă, ncurses utilizează 9600. Această caracteristică permite dezvoltatorilor să construiască cazuri de testare repetabile care iau în considerare deciziile de optimizare care depind de viteza de linie a terminalului.

  CC (caracter de comandă)
Atunci când este definită, valoarea capacității command_character (cmdch) a intrărilor terminfo încărcate se modifică la valoarea acestei variabile. Foarte puține intrări terminfo oferă această caracteristică.

Deoarece acest nume este utilizat și în mediile de dezvoltare pentru a reprezenta numele compilatorului C, ncurses ignoră valoarea sa dacă nu are un singur caracter.

  COLUMNS
Această variabilă specifică lățimea ecranului în celule de caractere. Aplicațiile care rulează într-un mediu de ferestre sunt de obicei capabile să obțină lățimea ferestrei în care sunt executate. ncurses impune o limită superioară de 512 la citirea valorii. Dacă COLUMNS nu este definită și dimensiunea ecranului terminalului nu este disponibilă de la controlorul terminalului, ncurses utilizează dimensiunea specificată de capacitatea columns (cols) a intrării tipului de terminal în baza de date terminfo, dacă există.

Este important ca aplicația dumneavoastră să utilizeze dimensiunea corectă a ecranului. Detectarea automată a acesteia nu este întotdeauna posibilă, deoarece o aplicație poate rula pe o gazdă care nu respectă NAWS (Negociations About Window Size) sau cu un ID de utilizator diferit de cel al proprietarului fișierului dispozitivului terminal. Definirea COLUMNS și/sau LINES prevalează asupra utilizării de către bibliotecă a dimensiunii ecranului obținute de la sistemul de operare.

Variabilele COLUMNS și LINES pot fi specificate independent. Această proprietate este utilă pentru a evita caracteristicile eronate ale descrierilor tipurilor de terminale moștenite; descrierile xterm(1) care specifică 65 de linii au fost odată notorii. Pentru rezultate optime, evitați specificarea codurilor de capacitate cols și lines în descrierile terminfo ale emulatoarelor de terminale.

use_env(3X) poate dezactiva utilizarea mediului procesului în determinarea dimensiunii ecranului. use_tioctl(3X) poate actualiza COLUMNS și LINES pentru a corespunde dimensiunii ecranului obținute din apelurile sistemului sau din baza de date a terminalului.

  ESCDELAY
Pentru ca curses să distingă caracterul ESC care rezultă din apăsarea de către utilizator a tastei «Escape» de pe dispozitivul de intrare de cel care începe o secvență escape(eludare) (așa cum este produs de obicei de tastele funcționale), acesta așteaptă după primirea caracterului de eludare pentru a vedea dacă sunt disponibile alte caractere pe fluxul de intrare într-un interval scurt. O variabilă globală ESCDELAY stochează acest interval în milisecunde. Valoarea implicită de 1000 (o secundă) este adecvată pentru majoritatea utilizărilor. Această variabilă de mediu o înlocuiește; ncurses impune o limită superioară de 30 000 (30 de secunde) atunci când citește valoarea.

Cel mai frecvent caz în care doriți să modificați această valoare este acela de a lucra cu o gazdă la distanță pe un canal de comunicare lent. Dacă gazda care rulează o aplicație curses nu primește în timp util caracterele unei secvențe de scăpare, biblioteca le poate interpreta ca evenimente de apăsare a mai multor taste. În schimb, un dactilograf rapid care utilizează o conexiune cu latență redusă și care introduce tasta ESC urmată de caractere care corespund unei secvențe de eludare poate întâlni un comportament confuz al aplicației.

Evenimentele de mouse xterm(1) sunt o formă de secvență de eludare; prin urmare, dacă aplicația dvs. utilizează în mare măsură clicuri multiple, este posibil să doriți să prelungiți valoarea implicită, deoarece întârzierea se aplică evenimentului compozit de clicuri multiple, precum și clicurilor individuale.

Aplicațiile portabile nu ar trebui să se bazeze pe prezența ESCDELAY în niciuna dintre forme, dar definirea variabilei de mediu în locul variabilei globale nu creează probleme la compilarea unei aplicații.

Dacă keypad(3X) este dezactivată pentru fereastra curses care primește intrarea, ESCDELAY este irelevantă și un program trebuie să dezambiguizeze singur secvențele de eludare.

  HOME
ncurses poate citi și scrie descrieri auxiliare ale terminalelor în fișierele .termcap și .terminfo din directorul personal al utilizatorului.

  LINES
Această contraparte la COLUMNS specifică înălțimea ecranului în caractere. Capacitatea și codul terminfo corespunzător este lines. A se vedea descrierea variabilei COLUMNS de mai sus.

  MOUSE_BUTTONS_123
(Numai adaptarea pentru OS/2 EMX) OS/2 numerotează un mouse cu trei butoane în mod inconsecvent față de alte platforme, astfel încât 1 este butonul din stânga, 2 cel din dreapta și 3 cel din mijloc. Această variabilă personalizează numerotarea butoanelor mouse-ului. Valoarea sa trebuie să fie trei cifre 1-3 în orice ordine. În mod implicit, ncurses presupune o numerotare de „132”.

  NCURSES_ASSUMED_COLORS
Dacă este definită, această variabilă înlocuiește presupunerea compilată a bibliotecii ncurses conform căreia culorile implicite ale terminalului sunt alb pe negru; consultați default_colors(3X). Definiți valorile culorilor de prim-plan și de fundal cu această variabilă de mediu atribuindu-i două valori întregi separate prin virgulă, indicând numerele culorilor de prim-plan și, respectiv, de fundal.

De exemplu, pentru a-i spune lui ncurses să nu presupună nimic cu privire la culori, utilizați o valoare de „-1,-1”. Pentru a face schema de culori implicită verde pe negru într-un terminal care utilizează atribuiri de culori ANSI X3.64/ECMA-48/ISO 6429, utilizați „2,0”. ncurses acceptă valori întregi de la -1 până la valoarea capacității terminfo max_colors (colors) pentru tipul de terminal selectat.

  NCURSES_CONSOLE2
(Numai pentru adaptarea din MinGW) Programul Console2 gestionează în mod defectuos apelul Microsoft Console API CreateConsoleScreenBuffer. Aplicațiile care îl utilizează se vor bloca. Cu toate acestea, este posibil să se simuleze acțiunea acestui apel prin atribuirea coordonatelor, salvarea explicită și restaurarea conținutului original al ecranului. Definirea variabilei de mediu NCGDB are același efect.

  NCURSES_GPM_TERMS
(Numai Linux) Atunci când ncurses este configurat pentru a utiliza interfața GPM, această variabilă poate lista una sau mai multe nume de tipuri de terminale, delimitate prin bare verticale (|) sau două puncte (:), în funcție de care este comparată variabila TERM (a se vedea mai jos). O valoare goală dezactivează interfața GPM, folosind în schimb suportul integrat al ncurses pentru protocoalele de mouse xterm(1). Dacă variabila este absentă, ncurses încearcă să deschidă GPM dacă TERM conține “linux.

  NCURSES_NO_HARD_TABS
ncurses poate utiliza caractere de tabulare în optimizarea mișcării cursorului. În unele cazuri, este posibil ca controlorul terminalului dvs. să nu le gestioneze corespunzător. Definiți această variabilă de mediu la orice valoare pentru a dezactiva caracteristica. De asemenea, puteți ajusta parametrii stty(1) pentru a evita problema.

  NCURSES_NO_MAGIC_COOKIE
Multe terminale stochează atributele video ca o proprietate a unei celule de caractere, așa cum face curses. În trecut, unele modificări ale atributelor video erau înregistrate ca date care ocupau în mod logic (dar invizibil) celulele caracterelor de pe ecran, activând sau dezactivând atributele, similar cu etichetele dintr-un limbaj de marcare, care apoi trebuiau suprascrise pentru a descrie conținutul dorit al celulelor; acestea sunt denumite „cookie-uri magice - magic cookies”. Dacă intrarea terminfo pentru tipul dvs. de terminal nu descrie în mod adecvat modul de gestionare a cookie-urilor magice, definiți această variabilă la orice valoare pentru a instrui ncurses să dezactiveze complet atributele.

  NCURSES_NO_PADDING
Majoritatea descrierilor tipurilor de terminale din baza de date terminfo detaliază dispozitivele hardware. Multe persoane utilizează aplicații bazate pe curses în programe emulatoare de terminale care rulează într-un mediu cu ferestre. Aceste programe pot reproduce toate caracteristicile importante ale unui terminal hardware, dar adesea lipsesc limitările acestora. Principala problemă a acestor dezavantaje absente este gestionarea fluxului de date, adică limitarea vitezei de comunicare la ceea ce hardware-ul poate gestiona. Cu excepția cazului în care un terminal hardware este interfațat cu un concentrator de terminale (care efectuează controlul fluxului), o aplicație trebuie să gestioneze singură controlul fluxului pentru a preveni depășirile și pierderea datelor.

O soluție care nu implică costuri hardware este ca aplicația să întrerupă transmisia după ce a dat instrucțiuni terminalului să execute o operație pe care o efectuează lent, cum ar fi ștergerea afișajului. Multe descrieri ale tipurilor de terminale, inclusiv cea pentru VT100, includ specificații de întârziere în capacități. Este posibil să doriți să utilizați aceste descrieri de terminale fără a suferi pierderi de performanță. Definiți NCURSES_NO_PADDING la orice valoare pentru a dezactiva toate umpluturile, cu excepția celor obligatorii. Umplerea obligatorie este utilizată de capacități de terminal precum flash_screen (flash).

  NCURSES_NO_SETBUF
(Obsoletă ) Înainte de modificările interne dezvoltate în ncurses 5.9 (plasturii 20120825 până la 20130126), biblioteca folosea setbuf(3) pentru a activa ieșirea stocată complet în tampon la inițializarea terminalului. Acest lucru a fost făcut, precum în SVr4 curses, pentru a crește performanța. În scopuri de testare, atât a ncurses, cât și a anumitor aplicații, această caracteristică a fost făcută opțională. Definirea acestei variabile a dezactivat stocarea în tampon a ieșirii, lăsând fluxul de ieșire în modul original (de obicei, stocarea în tampon de linie).

În prezent, ncurses realizează propria sa stocare în tampon și nu necesită această soluție; nu modifică stocarea în tampon a fluxului de ieșire standard. Această abordare face ca gestionarea semnalelor inițiate de la tastatură de către bibliotecă să fie mai robustă. Un dezavantaj este că anumite programe neconvenționale amestecau apelurile stdio(3) cu apelurile ncurses și (de obicei) obțineau comportamentul așteptat. Acesta nu mai este cazul; \%ncurses nu scrie în descriptorul de fișier de ieșire standard printr-un flux cu tampon stdio.

Ca un caz special, apelurile API de nivel scăzut precum putp(3X) utilizează în continuare fluxul de ieșire standard. Apelurile curses de nivel înalt precum printw(3X) nu o fac.

  NCURSES_NO_UTF8_ACS
La inițializare, ncurses inspectează variabila de mediu TERM pentru cazurile speciale în care se știe că anumite caractere VT100 (și capacitățile corespunzătoare ale setului de caractere alternative terminfo) nu sunt acceptate de tipurile de terminale care pretind compatibilitatea VT100. Mai exact, atunci când rulează într-o configurație regională UTF-8, dispozitivul de consolă virtuală Linux și programul GNU screen(1) le ignoră. Definiți această variabilă la o valoare diferită de zero pentru a instrui ncurses că suportul ACS al terminalului este deteriorat; biblioteca emite apoi puncte de cod Unicode care corespund caracterelor de desenare a formatelor. Definiți-o la zero (sau un număr neîntreg) pentru a dezactiva verificarea specială a numelor tipurilor de terminale care se potrivesc cu «linux» sau «screen», determinând ncurses să presupună că funcția ACS funcționează dacă descrierea tipului de terminal o anunță.

Ca alternativă la utilizarea acestei variabile, ncurses verifică o capacitate numerică extinsă terminfo U8 care poate fi compilată utilizând „tic -x”. Urmăriți exemplele.

        # consola linux, dacă i s-au aplicat corecții pentru a oferi
        # funcționarea VT100 shift-in/shift-out, cu fontul corespunzător.
        linux-vt100|linux console with VT100 line-graphics,
                U8#0, use=linux,

        # uxterm cu resursa vt100Graphics definită la „false”
        xterm-utf8|xterm relying on UTF-8 line-graphics,
                U8#1, use=xterm,

Numele de două caractere „U8” a fost ales pentru a permite utilizarea sa prin interfața termcap a ncurses.

  NCURSES_TRACE
La inițializare, ncurses (în configurația sa de depanare) verifică prezența acestei variabile. Dacă este definită cu o valoare integrală, biblioteca apelează curses_trace(3X) cu acea valoare ca argument.

  TERM
Variabila TERM denotă tipul terminalului. Fiecare este distinct, deși multe sunt similare. Este de obicei definită de emulatoarele de terminale pentru a ajuta aplicațiile să găsească o descriere acceptabilă a terminalului. Unele aleg o aproximare populară, cum ar fi „ansi”, „vt100” sau „xterm”, în loc de o potrivire exactă a capacităților lor. Nu de puține ori, o aplicație va avea probleme cu această abordare; de exemplu, o apăsare de tastă poate să nu funcționeze corect sau să nu producă niciun efect, ci doar caractere aparent de gunoi pe ecran.

Definirea TERM nu are niciun efect asupra funcționării hardware; aceasta afectează modul în care aplicațiile comunică cu terminalul. De asemenea, ca regulă generală (xterm(1) fiind o excepție rară), emulatoarele de terminale care vă permit să specificați TERM ca parametru sau valoare de configurare nu își modifică comportamentul pentru a corespunde acestei valori.

  TERMCAP
Dacă ncurses este configurat cu suport termcap, acesta verifică o descriere a tipului de terminal în format termcap dacă nu este disponibilă una în format terminfo. Definirea acestei variabile determină ncurses să ignore locația obișnuită a bazei de date termcap, /etc/termcap; consultați TERMPATH mai jos. TERMCAP trebuie să conțină fie o descriere a terminalului (fără linii noi), fie un nume de fișier care să indice unde sunt stocate informațiile solicitate de variabila de mediu TERM.

  TERMINFO
ncurses poate fi configurat pentru a citi bazele de date de descriere a tipului de terminal în diverse locații, utilizând formate diferite. Această variabilă prevalează asupra locației implicite. Descrierile în format terminfo sunt stocate în mod normal într-un arbore de directoare care utilizează subdirectoare denumite după primele litere comune ale tipurilor de terminale denumite în acestea. System V a folosit această schemă. Dacă ncurses este configurat să utilizeze baze de date rezumate „hashed”, atunci TERMINFO poate numi locația sa, cum ar fi /usr/share/terminfo.db, în loc de /usr/share/terminfo/.

Baza de date rezumată utilizează mai puțin spațiu pe disc și este puțin mai rapidă decât arborele de directoare. Cu toate acestea, unele aplicații presupun existența arborelui de directoare și îl citesc direct, ignorând API-ul terminfo. Dacă ncurses este configurat cu suport termcap, această variabilă poate conține locația unui fișier termcap. Dacă valoarea TERMINFO începe cu „hex:” sau „b64:”, ncurses utilizează restul valorii ca o descriere compilată terminfo. Puteți produce formatul base64 utilizând infocmp(1M).

            TERMINFO=$(infocmp -0 -Q2 -q)
            export TERMINFO

    ncurses utilizează descrierea compilată numai dacă aceasta corespunde tipului de terminal identificat de TERM.

Definirea TERMINFO este cea mai simplă, dar nu singura, modalitate de a direcționa ncurses către o bază de date a terminalului. Ruta de căutare este următoarea. ultima bază de date a terminalului în care a scris aplicația ncurses, dacă există locația specificată de variabila de mediu TERMINFO $HOME/.terminfo locațiile enumerate în variabila de mediu TERMINFO_DIRS location(s) configured and compiled into ncurses
    /usr/share/terminfo

  TERMINFO_DIRS
Această variabilă specifică o listă de locații, asemănătoare cu PATH, în care ncurses caută descrierile tipurilor de terminale descrise de TERMINFO mai sus. Elementele listei sunt separate prin două puncte în Unix și punct și virgulă în OS/2 EMX. terminfo System V nu are o funcție corespunzătoare; TERMINFO_DIRS este o extensie ncurses.

  TERMPATH
Dacă TERMCAP nu conține o descriere a tipului de terminal sau un nume de fișier, atunci ncurses verifică conținutul TERMPATH, o listă de locații, asemănătoare cu PATH, în care caută descrieri ale tipului de terminal termcap. Elementele listei sunt separate prin două puncte în Unix și punct și virgulă în OS/2 EMX. terminfo System V nu are o funcție corespunzătoare; TERMINFO_DIRS este o extensie ncurses.

Dacă TERMCAP și TERMPATH nu sunt definite sau nu sunt valide, ncurses caută fișierele /etc/termcap, /usr/share/misc/termcap și $HOME/.termcap, în această ordine.

CONFIGURAȚII ALTERNATIVE
Sunt posibile multe configurații ncurses diferite, determinate de opțiunile oferite scriptului configure la crearea bibliotecii. Rulați scriptul cu opțiunea --help pentru a le parcurge pe toate. Câteva sunt deosebit de importante pentru dezvoltatorul de aplicații care utilizează ncurses.

--disable-overwrite
    Evită conflictele de nume de fișiere între ncurses și o instalare curses existentă în sistem. Includerea standard a preprocesorului C pentru biblioteca curses este următoarea.

            #include <curses.h>

    Dacă ncurses este instalat cu opțiunea de dezactivare a suprascrierii acesta își pune fișierele de antet într-un subdirector. Iată un exemplu.

            #include <ncurses/curses.h>

    Cu opțiunea --disable-overwrite, instalarea omite și o legătură simbolică care ar determina opțiunea -lcurses a compilatorului să lege fișierele obiect cu ncurses în loc de biblioteca de sistem curses.

    Directorul utilizat de această configurație a ncurses este prezentat în secțiunea «SINOPSIS» de mai sus.

--enable-widec
    (implicită pentru ABI 6+ începând cu 21.10.2023) Activează suportul pentru caractere late. Scriptul configure redenumește biblioteca ncurses (și biblioteca tinfo, dacă este specificată și --with-termlib), adăugând “w. O aplicație care dorește suport pentru caractere late utilizează apoi -lncursesw (sau -ltinfow) în loc de -lncurses (sau -ltinfo) ca opțiune de legătură. Bibliotecile ncurses++, panel, form și menu sunt redenumite în mod similar.

    O aplicație trebuie să definească, de asemenea, anumite simboluri ale preprocesorului C pentru a activa caracteristicile de caractere late în fișierele de antet curses, astfel încât să poată utiliza funcțiile extinse (caractere late). Simbolul care activează aceste funcții s-a schimbat de la Curses X/Open, ediția 4:
    Inițial, caracteristica de caractere late necesita simbolul _XOPEN_SOURCE_EXTENDED, dar acesta era valabil numai pentru XPG4 (1996). Ulterior, acest lucru a fost considerat conflictual cu _XOPEN_SOURCE definit la 500. De la mijlocul anului 2018, nicio caracteristică ncurses nu necesită o valoare _XOPEN_SOURCE mai mare de 600. Cu toate acestea, Curses X/Open, ediția 7 (2009) recomandă definirea acesteia la 700. Alternativ, puteți activa caracteristica prin definirea NCURSES_WIDECHAR cu avertismentul că un alt fișier antet decât curses.h poate necesita o valoare specifică pentru _XOPEN_SOURCE (sau un simbol specific sistemului).

    Fișierul de antet curses.h instalat pentru biblioteca de caractere late este conceput pentru a fi compatibil cu antetul bibliotecii non-late. Doar dimensiunea structurii WINDOW diferă; puține aplicații necesită mai mult decât indicatori la WINDOW.

    Dacă fișierele de antet ale lui If ncurses sunt instalate permițând suprascrierea (implicit, dar vedeți --disable-overwrite mai sus), antetetele bibliotecii de caractere late ar trebui să fie instalate ultimele de către sistemele de împachetare și similare, pentru a permite aplicațiilor să fie construite folosind oricare dintre biblioteci din același set de antete.

--with-pthread
    Activează suportul pentru aplicații cu mai multe fire de execuție. Scriptul configure redenumește biblioteca ncurses (și biblioteca tinfo, dacă este specificată și --with-termlib), adăugând “t” (înainte de orice “w” adăugat de --enable-widec). O aplicație care dorește suport pentru mai multe fire de execuție utilizează, de exemplu, -lncursest (sau -ltinfot) în loc de -lncurses (sau -ltinfo) ca opțiune de legătură. Bibliotecile ncurses++, panel, form și menu sunt redenumite în mod similar.

    ncursest și ncursestw înlocuiesc variabilele globale precum LINES cu macroinstrucțiuni care permit accesul numai pentru citire. În același timp, acestea oferă funcții pentru a defini aceste valori. Foarte puține aplicații necesită modificări pentru a funcționa cu această convenție.

--with-shared
    --with-normal --with-debug --with-profile Compilarea obligatorie a bibliotecii ncurses (și a bibliotecii tinfo, dacă este specificată de asemenea opțiunea --with-termlib) în formele specificate. Numele bibliotecilor partajate și normale (statice) diferă prin sufixele lor, ca în cazul libncurses.so și libncurses.a. Bibliotecile de depanare și de profilare adaugă un „_g” și un „_p” la rădăcina numelor respective, formând libncurses_g.so și libncurses_p.a, de exemplu. Bibliotecile ncurses++, panel, form și menu sunt disponibile în mod similar.

--with-termlib
    Furnizează funcțiile de interfață terminal de nivel inferior ale ncurses (cele care nu depind de abstracțiile SCREEN și WINDOW) într-o bibliotecă numită tinfo. Această aranjare reduce timpul de legare și/sau încărcare a unei aplicații atunci când aceasta nu necesită caracteristicile de nivel superior ale curses.

    Următoarele pagini descriu funcțiile curses de nivel scăzut furnizate de către tinfo.
    curs_extend(3X) - extensii diverse ncurses curs_inopts(3X) - opțiuni de intrare curses curs_kernel(3X) - rutine curses de nivel redus curs_termattrs(3X) - rutine de interogare a mediului curses curs_termcap(3X) - emularea curses a termcap curs_terminfo(3X) - interfața curses cu baza de date terminfo curs_util(3X) - diverse rutine utilitare curses

--with-trace
    Expune funcția curses_trace(3X) în bibliotecile partajate și statice ncurses(w). În mod normal, aceasta este disponibilă numai în biblioteca de depanare. (Dacă este specificată și --with-termlib, tinfo(w) înlocuiește ncurses(w) și furnizează funcția trace(3X) învechită.) Scriptul de configurare al unei aplicații ar trebui să verifice existența funcției, în loc să presupună că aceasta se află doar în biblioteca de depanare.

FIȘIERE

/usr/share/tabset
    baza de date de inițializare oprire a tabulatorului

/usr/share/terminfo
    baza de date compilată privind capacitatea terminalelor

NOTE
Curses X/Open permite ca majoritatea funcțiilor pe care le specifică să fie disponibile și ca macroinstrucțiuni. ncurses face acest lucru pentru funcțiile care returnează valori prin intermediul parametrilor lor, pentru a oferi suport pentru caracteristici învechite, pentru reutilizarea funcțiilor (de exemplu, cele care mută cursorul înainte de o altă operație), și în câteva cazuri speciale.

Dacă descriptorul de fișier al ieșirii standard al unui program ncurses este redirecționat către ceva care nu este un dispozitiv de terminal, biblioteca scrie actualizările ecranului în descriptorul de fișier al ieșirii de eroare standard. Aceasta a fost o caracteristică nedocumentată a SVr3 curses.

Consultați subsecțiunea «Fișiere antet» de mai jos privind simbolurile expuse prin includerea lui curses.h.

EXTENSII
ncurses permite unei aplicații să capteze evenimentele mouse-ului de la anumite terminale, inclusiv xterm(1); consultați curs_mouse(3X).

ncurses oferă un mijloc de a răspunde evenimentelor de redimensionare a ferestrei, ca atunci când rulează într-o aplicație emulator de terminal GUI, cum ar fi xterm; consultați resizeterm(3X) și wresize(3X).

ncurses permite unei aplicații să solicite terminalului prezența unei mari varietăți de taste speciale; consultați has_key(3X).

ncurses extinde setul fix de capacități ale tastelor funcționale specificate de Curses X/Open permițând programatorului de aplicații să definească evenimente suplimentare ale tastelor în timpul execuției; consultați define_key(3X), key_defined(3X), keybound(3X) și keyok(3X).

ncurses poate exploata capacitățile terminalelor care implementează secvențele ISO 6429/ECMA-48 SGR 39 și SGR 49, care permit unei aplicații să readucă terminalul la culorile inițiale de prim-plan și de fundal. Din punctul de vedere al utilizatorului, aplicația este capabilă să deseneze text colorat pe un fundal a cărui culoare este stabilită independent, oferind un control mai bun asupra contrastelor de culoare. A se vedea default_colors(3X).

O aplicație ncurses poate evita cunoașterea structurii interne SCREEN și WINDOW, folosind în schimb funcții de accesoriu precum is_cbreak(3X) și is_scrollok(3X).

ncurses permite unei aplicații să direcționeze ieșirea aplicației către o imprimantă atașată la dispozitivul de terminal; consultați curs_print(3X).

ncurses oferă slk_attr(3X) ca o variantă contrară a attr_get(3X) pentru liniile de taste cu etichetă software și extended_slk_color(3X) ca o formă a slk_color(3X) care poate colecta informații despre culoare de la acestea atunci când sunt acceptate mai multe culori.

ncurses permite modificarea comportamentului lui unctrl(3X); a se vedea use_legacy_coding(3X).

Poate fi disponibil un suport rudimentar pentru aplicațiile multi-fir; consultați curs_threads(3X).

Funcțiile care facilitează gestionarea ecranelor multiple pot fi expuse; a se vedea curs_sp_funcs(3X).

Pentru a ajuta aplicațiile să își depaneze utilizarea memoriei, ncurses oferă opțional funcții pentru a elibera mai agresiv memoria pe care o alocă dinamic; a se vedea curs_memleaks(3X).

Biblioteca facilitează auditarea și depanarea comportamentului său; a se vedea curs_trace(3X).

Compilarea ncurses cu opțiunea -DUSE_GETCAP determină revenirea la citirea /etc/termcap dacă codul de configurare a terminalului nu poate găsi o intrare terminfo corespunzătoare lui TERM. Utilizarea acestei funcții nu este recomandată, deoarece include, în esență, un întreg compilator termcap în codul de pornire ncurses, cu un cost în ceea ce privește utilizarea memoriei și latența lansării aplicației.

PDCurses și curses NetBSD includ unele extensii ncurses. Paginile de manual individuale indică unde acesta este cazul.

PORTABILITATE
Curses X/Open definește două niveluri de conformitate, „base” și „enhanced”. Acesta din urmă include câteva caracteristici suplimentare, cum ar fi suportul pentru caractere late și culori. ncurses intenționează conformitatea la nivel de bază cu Curses X/Open, și acceptă toate caracteristicile nivelului său îmbunătățit, cu excepția utilitarului untic.

Diferențele dintre Curses X/Open și ncurses sunt documentate în secțiunile «PORTABILITATE» din paginile de manual aplicabile.

  Verificarea erorilor
În multe cazuri, Curses X/Open este vag cu privire la condițiile de eroare, omițând o parte din documentația SVr4.

Spre deosebire de alte implementări, ncurses verifică parametrii de tip indicator, cum ar fi cei pentru structurile WINDOW, pentru a se asigura că nu sunt nule. Acest lucru se face în primul rând pentru a proteja împotriva erorilor programatorului. Interfața standard nu prevede o modalitate prin care biblioteca să indice unei aplicații care dintre mai multe erori posibile a avut loc. O aplicație care se bazează pe ncurses pentru a verifica validitatea parametrilor funcției sale își limitează portabilitatea și robustețea.

  Diferențe de umplere
În implementările istorice ale curses, întârzierile încorporate în capacitățile terminfo carriage_return (cr), scroll_forward (ind), cursor_left (cub1), form_feed (ff) și tab (ht) activau biții de întârziere corespunzători în controlorul de terminal Unix. ncurses efectuează toată umplerea prin trimiterea de octeți NUL către dispozitiv. Această metodă este puțin mai costisitoare, dar restrânge semnificativ interfața cu nucleul Unix și crește corespunzător portabilitatea pachetului.

  Fișiere antet
Fișierul de antet curses.h include fișierele de antet stdio.h și unctrl.h.

Curses X/Open are mai multe de spus,

    Includerea curses.h poate face vizibile toate simbolurile din antetele stdio.h, term.h, termios.h și wchar.h.

dar nu încheie povestea. Urmează o relatare mai completă. Primul curses, în 4BSD, a furnizat un fișier curses.h.

    Codul curses BSD includea curses.h și unctrl.h dintr-un fișier de antet intern curses.ext, unde „ext” abrevia „externs”.

    Implementările printw și scanw au utilizat funcții interne nedocumentate ale bibliotecii de In/Ieș standard (_doprnt și _doscan), dar nimic în curses.h nu s-a bazat pe stdio.h. curses SVr2 a adăugat newterm, care se bazează pe stdio.h deoarece prototipul funcției sale utilizează tipul FILE.

    curses SVr4 a adăugat putwin și getwin, care utilizează și stdio.h.

    Curses X/Open specifică toate aceste trei funcții.

    curses SVr4 și Curses X/Open nu solicită dezvoltatorului să includă stdio.h înainte de curses.h. Ambele documentează utilizarea curses ca necesitând doar curses.h.

    Ca urmare, standardul curses.h include întotdeauna stdio.h. Curses X/Open și curses SVr4 nu sunt compatibile cu unctrl.h.

    După cum se menționează în curs_util(3X), ncurses include unctrl.h din curses.h (așa cum face SVr4). Comentariile din Curses X/Open despre term.h și termios.h se pot referi la HP-UX și AIX.

    curses HP-UX include term.h din curses.h pentru a declara setupterm în curses.h, dar ncurses și curses Solaris nu.

    curses AIX include term.h și termios.h. Din nou, ncurses și curses Solaris nu. Curses X/Open spune că curses.h poate include term.h, dar nu îi cere să facă acest lucru.

    Unele programe utilizează funcții declarate atât în curses.h, cât și în term.h, și trebuie să includă ambele fișiere de antet în aceeași unitate de traducere (conversie).

    Fișierele de antet furnizate de ncurses includ antetele bibliotecii standard necesare pentru declarațiile sale, astfel încât propriile fișiere de antet ale ncurses pot fi incluse în orice ordine. Pentru portabilitate chiar și pe sistemele AIX vechi, includeți curses.h înainte de term.h. Curses X/Open spune „poate face vizibile” deoarece includerea unui fișier antet nu face neapărat vizibile toate simbolurile din acesta (luați în considerare #ifdef și altele similare).

    De exemplu, ncurses's curses.h poate include wchar.h dacă simbolul corespunzător este definit și dacă ncurses este configurat pentru suportul caracterelor late. Dacă wchar.h este inclus, simbolurile sale pot fi făcute vizibile în funcție de valoarea macroinstrucțiunii de testare a caracteristicii _XOPEN_SOURCE. Curses X/Open impune includerea de către o aplicație a unui antet de bibliotecă C standard într-un caz special: stdarg.h înainte de curses.h pentru a prototipa funcțiile vw_printw și vw_scanw (precum și învechitele vwprintw și vwscanw). Fiecare dintre acestea ia o listă de argumente variadice, un parametru va_list, precum cel al printf(3).

    curses SVr3 a introdus două funcții învechite, iar Curses X/Open pe celelalte. Între timp, curses SVr4 a prevăzut posibilitatea ca o aplicație să includă fie varargs.h, fie stdarg.h. Acestea reprezentau abordări contrastante pentru gestionarea listelor de argumente variadice. Interfața mai veche, varargs.h, folosea un indicator către char pentru parametrul va_list al funcțiilor variadice. Ulterior, lista și-a dobândit propriul tip de date standard, va_list, definit în stdarg.h, permițând compilatorului să verifice tipurile parametrilor reali ai unui apel de funcție în raport cu cele formale declarate în prototipul său.

    Nicio implementare conformă a Curses X/Open nu solicită unei aplicații să includă stdarg.h înaintea curses.h, deoarece fie au permis pentru un tip special, fie, precum ncurses, includ ele însele stdarg.h pentru a oferi o interfață portabilă.

AUTORI
Zeyd M. Ben-Halim, Eric S. Raymond, Thomas E. Dickey. Bazat pe pcurses de Pavel Curtis.

CONSULTAȚI ȘI
curs_variables(3X), terminfo(5), user_caps(5)

TRADUCERE
Traducerea în limba română a acestui manual a fost făcută de Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>

Această traducere este documentație gratuită; citiți Licența publică generală GNU Versiunea 3 (https://www.gnu.org/licenses/gpl-3.0.html) sau o versiune ulterioară cu privire la condiții privind drepturile de autor. NU se asumă NICIO RESPONSABILITATE.

Dacă găsiți erori în traducerea acestui manual, vă rugăm să trimiteți un e-mail la translation-team-ro@lists.sourceforge.net.