ncurses(3X) Apeluri de bibliotecă ncurses(3X)

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

#include <curses.h>

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

0urses 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 0urses 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\[u00BB] de mai jos.

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.

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.

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.

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

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.

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

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

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 «*\[u00BB] 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.

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.

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 “linuxu00AB]».

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.

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.

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.

(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 “wu00AB]». 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.
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.



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

/usr/share/tabset
baza de date de inițializare oprire a tabulatorului
/usr/share/terminfo
baza de date compilată privind capacitatea terminalelor

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.

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.

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.

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

Î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ș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ă.

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

curs_variables(3X), terminfo(5), user_caps(5)

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

11 noiembrie 2025 ncurses 6.6