Scroll to navigation

tput(1) General Commands Manual tput(1)

NUME

tput, reset - inițializează un terminal sau consultă baza de date terminfo

SINOPSIS

tput [-Ttip] nume-capacitate [parametri]
tput [-Ttip] [-x] clear
tput [-Ttip] init
tput [-Ttip] reset
tput [-Ttip] longname
tput -S <<
tput -V

DESCRIERE

Utilitarul tput utilizează baza de date terminfo pentru a pune la dispoziția shell-ului valorile capacităților și informațiile dependente de terminal (a se vedea sh(1)), pentru a inițializa sau reinițializa terminalul, sau pentru a returna numele lung al tipului de terminal solicitat. Rezultatul depinde de tipul capacității:

șir
tput scrie șirul la ieșirea standard. Nu este furnizată nici o linie nouă finală.
tput scrie valoarea zecimală la ieșirea standard, cu o linie nouă la sfârșit.
tput stabilește pur și simplu codul de ieșire (0 pentru TRUE dacă terminalul are această capacitate, 1 pentru FALSE dacă nu are) și nu scrie nimic la ieșirea standard.

Înainte de a utiliza o valoare returnată la ieșirea standard, aplicația trebuie să testeze codul de ieșire (de exemplu, $?, consultați sh(1)) pentru a fi sigură că este 0. (Consultați secțiunile CODURI DE IEȘIRE și DIAGNOSTICARE.) Pentru o listă completă a capacităților și nume-capacitate asociat cu fiecare, consultați terminfo(5).

Opțiuni

permite mai mult de o capacitate per invocare a tput. Capacitățile trebuie transmise către tput de la intrarea standard și nu din linia de comandă (a se vedea exemplul). Este permis un singur nume-capacitate pe linie. Opțiunea -S modifică semnificația codurilor de ieșire boolean 0 și 1, și șir (a se vedea secțiunea «CODURI DE IEȘIRE»).
Deoarece unele capacități pot utiliza parametri șir de caractere în loc de numere, tput utilizează un tabel și prezența parametrilor în intrarea sa pentru a decide dacă să utilizeze tparm(3X) și cum să interpreteze parametrii.
indică tipul terminalului. În mod normal, această opțiune nu este necesară, deoarece valoarea implicită este preluată din variabila de mediu TERM. Dacă este specificat -T, atunci variabilele shell LINES și COLUMNS vor fi de asemenea ignorate.
Raportează versiunea de „ncurses” care a fost folosită în acest program și iese.
nu încearcă să șteargă memoria tampon de derulare înapoi a terminalului folosind capacitatea extinsă „E3”.

Comenzi

Câteva comenzi (init, reset și longname) sunt speciale; ele sunt definite de programul tput. Celelalte sunt nume de capacități din baza de date a terminalului (a se vedea terminfo(5) pentru o listă). Deși init și reset seamănă cu numele capacităților, tput utilizează mai multe capacități pentru a îndeplini aceste funcții speciale.

indică o capacitate din baza de date a terminalului.
Dacă capabilitatea este un șir care acceptă parametri, argumentele care urmează capacității vor fi utilizate ca parametri pentru șir.
Majoritatea parametrilor sunt numere. Doar câteva capacități ale terminalului necesită parametri de tip șir de caractere; tput utilizează un tabel pentru a decide care dintre aceștia să fie trecuți ca șiruri de caractere. În mod normal, tput utilizează tparm(3X) pentru a efectua substituția. Dacă nu se dau parametri pentru capacitate, tput scrie șirul de caractere fără a efectua substituția.
Dacă baza de date a terminalului este prezentă și există o intrare pentru terminalul utilizatorului (a se vedea -Ttip, mai sus), se va întâmpla următorul lucru:
(1)
mai întâi, tput recuperează parametrii actuali ai modului terminal pentru terminalul dumneavoastră. Face acest lucru prin testarea succesivă a
  • ieșirea de eroare standard,
  • ieșirea standard,
  • intrarea standard și
  • în final „/dev/tty”
pentru a obține parametrii terminalului. După ce a obținut acești parametri, tput memorează descriptorul de fișier care trebuie utilizat la actualizarea parametrilor.
(2)
dacă dimensiunea ferestrei nu poate fi obținută de la sistemul de operare, dar descrierea terminalului (sau mediul, de exemplu, variabilele LINES și COLUMNS specifică acest lucru), actualizează noțiunea de dimensiune a ferestrei a sistemului de operare.
(3)
modurile terminalului vor fi actualizate:
  • orice întârziere (de exemplu, linie nouă) specificată în intrare va fi definită în controlorul tty,
  • extinderea tabulatoarelor va fi activată sau dezactivată în conformitate cu specificațiile din intrare și
  • dacă tabulatoarele nu sunt extinse, vor fi definite tabulatoare standard (la fiecare 8 spații).
(4)
dacă este prezent, șirurile de inițializare ale terminalului vor fi afișate conform detaliilor din secțiunea terminfo(5) privind Tabulatoare și inițializare,
(5)
ieșirea este golită.
În cazul în care o intrare nu conține informațiile necesare pentru oricare dintre aceste activități, activitatea respectivă va fi ignorată în mod silențios.
Acesta este similar cu init, cu două diferențe:
(1)
înainte de orice altă inițializare, modurile terminalului vor fi readuse la o stare „corectă de funcționare”':
  • activează modurile pregătit „cooked” și ecou „echo”,
  • dezactivează modurile cbreak și raw,
  • activând traducerea liniei noi și
  • restabilind orice caractere speciale nedefinite la valorile lor implicite.
(2)
În loc să se afișeze șirurile initialization, vor fi afișate șirurile reset ale terminalului, dacă sunt prezente (rs1, rs2, rs3, rf). Dacă șirurile reset nu sunt prezente, dar șirurile initialization sunt, se vor afișa șirurile initialization.
În caz contrar, reset acționează identic cu init.
Dacă baza de date a terminalului este prezentă și există o intrare pentru terminalul utilizatorului (a se vedea -Ttip de mai sus), atunci numele lung al terminalului va fi afișat. Numele lung este ultimul nume din prima linie a descrierii terminalului în baza de date terminfo [a se vedea term(5)].

Alias

tput tratează în mod special comenzile clear, init și reset: permite posibilitatea ca aceasta să fie invocată de o legătură cu aceste nume.

Dacă tput este invocat de o legătură numită reset, aceasta are același efect ca tput reset. Utilitatea tset(1) tratează de asemenea în mod special o legătură numită reset.

Înainte de ncurses 6.1, cele două instrumente erau diferite între ele:

  • Instrumentul tset reinițializează modurile terminalului și caracterele speciale (nu se face cu tput).
  • Pe de altă parte, repertoriul de capacități ale terminalului tset pentru reinițializarea terminalului a fost mai limitat, și anume, doar reset_1string, reset_2string și reset_file, spre deosebire de limitele de tabulare și marginile care sunt stabilite de acest instrument.
  • Programul reset este de obicei un alias pentru tset, din cauza acestei diferențe în ceea ce privește restabilirea modurilor terminalului și a caracterelor speciale.

Cu modificările făcute pentru ncurses 6.1, funcția reset a celor două programe este (în mare parte) aceeași. Rămân câteva diferențe:

  • Programul tset așteaptă o secundă la reinițializare, în cazul în care terminalul se întâmplă să fie un dispozitiv hardware.
  • Cele două programe scriu șirurile de inițializare a terminalului în fluxuri diferite; adică, ieșirea de eroare standard pentru tset și ieșirea standard pentru tput.
Nota: deși aceste programe scriu în fluxuri diferite, redirecționarea ieșirii lor către un fișier va capta doar o parte din acțiunile lor. Modificările modurilor terminalului nu sunt afectate de redirecționarea ieșirii.

Dacă tput este invocat de o legătură numită init, aceasta are același efect ca tput init. Din nou, este mai puțin probabil să utilizați această legătură deoarece un alt program numit init are o utilizare mai bine stabilită.

Dimensiunea terminalului

Pe lângă comenzile speciale (de exemplu, clear), tput tratează în mod special anumite capacități terminfo: lines și cols. tput apelează setupterm(3X) pentru a obține dimensiunea terminalului:

  • mai întâi, acesta obține dimensiunea din baza de date a terminalului (care, în general, nu este furnizată pentru emulatoarele de terminale care nu au o dimensiune fixă a ferestrei),
  • apoi solicită sistemului de operare dimensiunea terminalului (care, în general, funcționează, cu excepția cazului în care conectarea se face prin intermediul unei linii seriale care nu acceptă NAWS: negocieri privind dimensiunea ferestrei).
  • în cele din urmă, inspectează variabilele de mediu LINES și COLUMNS care pot înlocui dimensiunea terminalului.

Dacă este dată opțiunea -T, tput ignoră variabilele de mediu prin apelarea use_tioctl(TRUE), bazându-se pe sistemul de operare (sau, în cele din urmă, pe baza de date a terminalului).

EXEMPLE

Inițializează terminalul în funcție de tipul de terminal din variabila de mediu TERM. Această comandă ar trebui să fie inclusă în profilul .profile al fiecăruia după ce variabila de mediu TERM a fost exportată, așa cum este ilustrat pe pagina de manual profile(5).
Reinițializează un terminal AT&T 5620, suprascriind tipul de terminal din variabila de mediu TERM.
Trimite secvența pentru a muta cursorul pe rândul 0, coloana 0 (colțul din stânga sus al ecranului, cunoscut de obicei ca poziția inițială „home” a cursorului).
Trimite secvența de ștergere a ecranului pentru terminalul curent.
Afișează numărul de coloane pentru terminalul curent.
Afișează numărul de coloane pentru terminalul 450.
Definește variabilele shell bold, pentru a începe secvența modului stand-out, și offbold, pentru a termina secvența modului stand-out, pentru terminalul curent. Aceasta poate fi urmată de un prompt: echo "${bold}Tastați vă rog numele dumneavoastră: ${offbold}\c"
Definește codul de ieșire pentru a indica dacă terminalul curent este un terminal „hard copy” (care imprimă informația pe hârtie).
Trimite secvența pentru a deplasa cursorul la rândul 23, coloana 4.
Trimite șirul terminfo pentru deplasarea cursorului, fără substituirea parametrilor.
Imprimă numele lung din baza de date terminfo pentru tipul de terminal specificat în variabila de mediu TERM.

tput -S <<!
> clear
> cup 10 10
> bold
> !
Acest exemplu arată cum tput procesează mai multe capacități într-o singură invocare. Acesta șterge ecranul, mută cursorul la poziția 10, 10 și activează modul bold (extra luminos). Lista este încheiată de un semn al exclamării (!) pe o linie de sine stătătoare.

FIȘIERE

/etc/terminfo
baza de date compilată pentru descrierea terminalelor
/usr/share/tabset/*
parametrii de tabulare pentru unele terminale, într-un format adecvat pentru a fi afișat pe terminal (secvențe de eludare care stabilesc marginile și tabulările); pentru mai multe informații, consultați secțiunea Tabs and Initialization, din terminfo(5)

CODURI DE IEȘIRE

Dacă se utilizează opțiunea -S, tput verifică erorile de pe fiecare linie și, dacă sunt găsite erori, va stabili codul de ieșire la 4 plus numărul de linii cu erori. Dacă nu sunt găsite erori, codul de ieșire este 0. Nu poate fi indicată linia care a eșuat, astfel încât codul de ieșire 1 nu va apărea niciodată. Codurile de ieșire 2, 3 și 4 își păstrează interpretarea obișnuită. Dacă opțiunea -S nu este utilizată, codul de ieșire depinde de tipul nume-capacitate:

boolean
o valoare de 0 este stabilită pentru TRUE și 1 pentru FALSE.
șir
o valoare de 0 este stabilită dacă nume-capacitate este definit pentru acest tip de terminal (valoarea lui nume-capacitate este returnată la ieșirea standard); o valoare de 1 este stabilită dacă nume-capacitate nu este definit pentru acest tip de terminal (nimic nu este scris la ieșirea standard).
o valoare de 0 este întotdeauna stabilită, indiferent dacă nume-capacitate este definit sau nu pentru acest tip de terminal. Pentru a determina dacă nume-capacitate este definit pentru acest tip de terminal, utilizatorul trebuie să testeze valoarea scrisă la ieșirea standard. O valoare de -1 înseamnă că nume-capacitate nu este definit pentru acest tip de terminal.
Este posibil ca reset sau init să nu își găsească fișierele respective. În acest caz, codul de ieșire este stabilit la 4 + errno.

Orice alt cod de ieșire indică o eroare; consultați secțiunea «DIAGNOSTICARE».

DIAGNOSTICARE

tput afișează următoarele mesaje de eroare și stabilește codurile de ieșire corespunzătoare.

cod de ieșire mesaj de eroare
0 (nume-capacitate este o variabilă numerică care nu este specificată în terminfo(5) pentru acest tip de terminal, de exemplu tput -T450 lines și tput -Thp2621 xmc)
1 nu este afișat niciun mesaj de eroare, consultați secțiunea CODURI DE IEȘIRE.
2 eroare de utilizare
3 tip de terminal necunoscut sau nicio bază de date terminfo
4 capacitate nume-capacitate necunoscută terminfo
>4 a apărut o eroare în „-S”

ISTORIC

Comanda tput a fost inițiată de Bill Joy în 1980. Versiunea inițială doar ștergea ecranul.

Sistemul AT&T V a furnizat o comandă tput diferită:

  • SVr2 a furnizat un tput rudimentar care a verificat parametrul în raport cu fiecare capacitate predefinită și a returnat valoarea corespunzătoare. Această versiune a tput nu folosea tparm(3X) pentru capacitățile care sunt parametrizate.
  • SVr3 l-a înlocuit, un an mai târziu, cu un program mai extins ale cărui subcomenzi init și reset (mai mult de jumătate din program) au fost încorporate din funcția reset a tset BSD scrisă de Eric Allman.
  • SVr4 a adăugat inițializarea culorilor utilizând capacitățile orig_colors și orig_pair în subcomanda init.

Keith Bostic a înlocuit comanda tput BSD în 1989 cu o nouă implementare bazată pe programul tput AT&T System V. Ca și programul AT&T, versiunea lui Bostic a acceptat unii parametri denumiți pentru capacitățile terminfo (clear, init, longname și reset). Cu toate acestea (deoarece el avea la dispoziție numai termcap), a acceptat numele termcap pentru alte capacități. De asemenea, tput BSD al lui Bostic nu a modificat modurile I/O ale terminalului, așa cum făcuse tset BSD anterior.

În același timp, Bostic a adăugat un script shell numit „clear”, care folosea tput pentru a șterge ecranul.

Ambele au apărut în 4.4BSD, devenind implementarea BSD „modernă” a tput.

Această implementare a tput a pornit de la o altă sursă decât AT&T sau BSD: pachetul mytinfo al lui Ross Ridge, publicat pe comp.sources.unix în decembrie 1992. Programul lui Ridge a făcut o utilizare mai sofisticată a capacităților terminalului decât programul BSD. Eric Raymond a folosit acel program tput (și alte părți din mytinfo) în ncurses în iunie 1995. Folosind porțiunile referitoare la capacitățile terminalului aproape fără modificări, Raymond a adus îmbunătățiri modului în care erau gestionați parametrii liniei de comandă.

PORTABILITATE

Această implementare a tput diferă de AT&T tput în două aspecte importante:

tput nume-capacitate scrie la ieșirea standard. Aceasta nu trebuie să fie un terminal obișnuit. Cu toate acestea, subcomenzile care manipulează modurile terminalului pot să nu utilizeze ieșirea standard.
Comenzile init și reset ale implementării AT&T utilizează sursa tset BSD (4.1c), care manipulează modurile terminalelor. Aceasta încearcă succesiv ieșirea standard, ieșirea de eroare standard, intrarea standard înainte de a reveni la „/dev/tty\[u201D] și, în final, presupune doar un terminal 1200Bd. Atunci când actualizează modurile terminalului, ignoră erorile.
Până la modificările efectuate după ncurses 6.0, tput nu modifica modurile terminalelor. tput utilizează acum o schemă similară, folosind funcții partajate cu tset (și în cele din urmă bazate pe tset 4.4BSD). Dacă nu este capabil să deschidă un terminal, de exemplu, atunci când rulează din cron(1), tput va returna o eroare.
tput a AT&T ghicește tipul operanzilor săi nume-capacitate văzând dacă toate caracterele sunt numerice sau nu.
Majoritatea implementărilor care oferă suport pentru operanzi nume-capacitate utilizează funcția tparm pentru a extinde parametrii în aceasta. Această funcție așteaptă un amestec de parametri numerici și de șir de caractere, necesitând ca tput să știe ce tip să utilizeze.
Această implementare utilizează un tabel pentru a determina tipurile de parametri pentru operanzii nume-capacitate standard și o funcție de bibliotecă internă pentru a analiza operanzii nume-capacitate non-standard.
Pe lângă faptul că oferă o funcționare mai fiabilă decât utilitarul AT&T, această analiză introduce o problemă de portabilitate: Un dezvoltator OpenBSD a adaptat funcția bibliotecii interne de la ncurses pentru a adapta tput bazat pe termcap din NetBSD la terminfo. Aceasta a fost modificată pentru a interpreta mai multe comenzi într-o linie. Aplicațiile portabile nu ar trebui să se bazeze pe această funcție; ncurses o oferă pentru a oferi suport aplicațiilor scrise special pentru OpenBSD.

Această implementare (spre deosebire de altele) poate accepta atât numele termcap, cât și terminfo pentru caracteristica nume-capacitate, în cazul în care suportul termcap este compilat. Cu toate acestea, numele predefinite termcap și terminfo au două ambiguități în acest caz (și se presupune numele terminfo):

  • Numele termcap dl corespunde numelui terminfo dl1 (șterge o linie).
    Numele terminfo dl corespunde numelui termcap DL (șterge un anumit număr de linii).
  • Numele termcap ed corespunde numelui terminfo rmdc (modul de ștergere până la sfârșit).
    Numele terminfo ed corespunde numelui termcap cd (curăță până la sfârșitul ecranului).

Opțiunile longname și -S, precum și caracteristicile de substituire a parametrilor utilizate în exemplul cup, nu erau acceptate în curses BSD înainte de 4.3reno (1989) sau în curses AT&T/USL înainte de SVr4 (1988).

IEEE Std 1003.1/The Open Group Base Specifications Issue 7 (POSIX.1-2008) documentează numai operanzii pentru clear, init și reset. Există câteva observații interesante de făcut în această privință:

  • În această implementare, clear face parte din suportul capname. Celelalte (init și longname) nu corespund capacităților terminalului.
  • Alte implementări ale tput pe sisteme bazate pe SVr4, cum ar fi Solaris, IRIX64 și HPUX, precum și altele, cum ar fi AIX și Tru64, oferă suport pentru operanzi nume-capacitate.
  • Câteva platforme, cum ar fi FreeBSD, recunosc numele termcap mai degrabă decât numele capacităților terminfo în comenzile lor respective tput. Din 2010, comanda tput a NetBSD utilizează nume terminfo. Înainte de aceasta, acesta (ca și FreeBSD) recunoștea numele termcap.
Începând cu 2021, FreeBSD utilizează ncurses tput, configurat atât pentru terminfo (testat mai întâi), cât și pentru termcap (ca soluție de rezervă).

Deoarece (aparent) toate sistemele Unix certificate acceptă întregul set de nume de capacități, raționamentul pentru documentarea doar a câtorva poate să nu fie evident.

  • X/Open Curses Issue 7 documentează diferit tput, cu nume-capacitate și alte caracteristici utilizate în această implementare.
  • Adică, există două standarde pentru tput: POSIX (un subset) și X/Open Curses (implementarea completă). POSIX documentează un subset pentru a evita complicația de a include X/Open Curses și baza de date a capacităților terminalului.
  • Deși este cu siguranță posibil să scrieți un program tput fără a utiliza curses, niciunul dintre sistemele care au o implementare curses nu oferă un utilitar tput care să nu ofere caracteristica nume-capacitate.

X/Open Curses Issue 7 (2009) este prima versiune care documentează utilitățile. Cu toate acestea, această parte a X/Open Curses nu respectă practicile existente (de exemplu, caracteristicile Unix documentate în SVID 3):

  • Acesta atribuie codul de ieșire 4 lui „invalid operand” (operand nevalid)', care poate fi același cu unknown capability (capacitate necunoscută). De exemplu, codul sursă pentru xcurses din Solaris utilizează termenul „invalid” (nevalid) în acest caz.
  • Acesta atribuie codul de ieșire 255 unei variabile numerice care nu este specificată în baza de date terminfo. Aceasta este probabil o eroare de documentare, confundând -1 scris la ieșirea standard pentru o valoare numerică absentă sau anulată cu un cod de ieșire (fără semn).

Diferitele sisteme Unix (AIX, HPUX, Solaris) utilizează aceleași coduri de ieșire ca și ncurses.

curses NetBSD documentează coduri de ieșire diferite care nu corespund nici cu ncurses, nici cu X/Open.

CONSULTAȚI ȘI

clear(1), stty(1), tabs(1), tset(1), termcap(3NCURSES), terminfo(5).

Aceasta descrie ncurses versiunea 6.4 (patch 20221231).

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