tput(1)

NUME
tput - inițializează un terminal, exercită capacitățile acestuia sau interoghează baza de date terminfo

SINOPSIS
tput [-T tip-terminal] {cod-capacitate [parametru ...]} ...

tput [-T tip-terminal] [-x] clear

tput [-T tip-terminal] init

tput [-T tip-terminal] reset

tput [-T tip-terminal] longname

tput -S

tput -V

DESCRIERE
tput utilizează biblioteca și baza de date terminfo pentru a pune la dispoziția shell-ului capacitățile și informațiile specifice terminalului, pentru a inițializa sau reinițializa terminalul, sau pentru a raporta o descriere a tipului de terminal curent (sau specificat). Capacitățile terminalului sunt accesate prin cod-capacitate.

terminfo(5) abordează pe larg capacitățile terminalului și prezintă o listă completă de coduri-capacități.

Când se preiau valorile capacității, rezultatul depinde de tipul capacității.

Boolean
    tput își stabilește starea de ieșire la 0 dacă terminalul posedă cod-capacitate și la 1 dacă nu.

numeric
    tput scrie valoarea zecimală a cod-capacitate în fluxul de ieșire standard, dacă este definit (-1 dacă nu este definit), urmată de o linie nouă.

șir tput scrie valoarea lui cod-capacitate în fluxul de ieșire standard, dacă este definit, fără o linie nouă la sfârșit.

Înainte de a utiliza o valoare returnată la ieșirea standard, aplicația trebuie să testeze starea de ieșire a tput pentru a se asigura că este 0; a se vedea secțiunea «STARE DE IEȘIRE» de mai jos.

  Operanzi
În general, un operand este un cod-capacitate, un cod de capacitate din baza de date a terminalului, sau un parametru al acestuia. tput recunoaște în mod special alte trei: init, reset și longname. Cu toate că acestea seamănă cu codurile de capacitate, ele beneficiază de fapt de un tratament special; le numim „pseudo-capacități”.

cod-capacitate
    indică o capacitate din baza de date a terminalului.

    Dacă cod-capacitate este de tip șir de caractere și are parametri, tput interpretează argumentele care urmează lui cod-capacitate ca parametri, până la cantitatea (fixă) cerută de capacitate.

    Majoritatea parametrilor sunt numerici. Doar câteva capacități ale terminalului necesită parametri de tip șir de caractere; tput utilizează un tabel pentru a decide care să fie trecuți ca șiruri de caractere. În mod normal, tput utilizează tparm(3X) pentru a efectua substituția. Dacă nu sunt furnizați parametri pentru capacitate, tput scrie șirul de caractere fără a efectua substituția.

init
    inițializează terminalul. Dacă baza de date a terminalului este prezentă și există o intrare pentru tipul de terminal al utilizatorului, se întâmplă următoarele.

    (1) tput preia parametrii de mod ai terminalului. Acesta testează succesiv descriptorii de fișier corespunzători
        fluxului de ieșire de eroare standard, fluxului de ieșire standard, fluxului de intrare standard și /dev/tty

        tput preia parametrii de mod ai terminalului. Acesta testează succesiv descriptorii de fișier corespunzători fluxului standard de eroare, fluxului standard de ieșire, fluxului standard de intrare și X pentru a obține parametrii terminalului. După ce i-a obținut, tput memorează ce descriptor să utilizeze pentru actualizările ulterioare.

    (2) Dacă dimensiunile terminalului nu pot fi obținute de la sistemul de operare, dar intrarea din baza de date a mediului sau a tipului de terminal le descrie, tput actualizează noțiunea sistemului de operare despre acestea.

    (3) tput actualizează modurile terminalului.
        Orice întârzieri specificate în intrare (de exemplu, atunci când este trimisă o linie nouă) sunt definite în controlorul terminalului. Extinderea tabulatoarelor este activată sau dezactivată conform specificațiilor din intrare, iar dacă tabulatoarele nu sunt extinse, sunt definite tabulatoare standard (la fiecare 8 spații).

    (4) Dacă sunt prezente capacități de inițializare, detaliate în subsecțiunea «File și inițializare» din terminfo(5), tput le scrie în fluxul de ieșire standard.

    (5) tput golește fluxul de ieșire standard.

    Dacă o intrare nu conține informațiile necesare pentru o activitate de mai sus, activitatea respectivă este ignorată în mod silențios.

reset
    reinitializează terminalul. O reinițializare diferă de inițializare în două moduri.

    (1) tput aduce modurile terminalului într-o stare „corectă de funcționare”,
        activând modurile pregătit „cooked” și ecou „echo”, dezactivând modurile cbreak și raw, activând traducerea liniei noi și stabilind orice caractere speciale nedefinite la valorile lor implicite.

    (2) Dacă sunt definite capacități de reinițializare pentru tipul de terminal, tput le scrie în fluxul de ieșire. În caz contrar, tput utilizează orice capacități de inițializare definite. Capacitățile de reinițializare sunt detaliate în subsecțiunea «File și inițializare» din terminfo(5).

longname
    O intrare terminfo începe cu unul sau mai multe nume prin care o aplicație se poate referi la intrare, înainte de lista capacităților terminalului. Numele sunt separate prin caractere „|”. X/Open Curses numește ultimul nume „long name - nume lung” și indică faptul că acesta poate include spații albe.

    tic avertizează dacă ultimul nume nu include spații albe, pentru a acomoda vechile intrări terminfo care tratau numele lung ca o caracteristică opțională. Numele lung este adesea denumit câmp de descriere.

    Dacă baza de date a terminalului este prezentă și există o intrare pentru tipul de terminal al utilizatorului, tput raportează descrierea acestuia pe fluxul de ieșire standard, fără o linie nouă la sfârșit. Consultați terminfo(5).

Notă: Redirecționarea ieșirii “tput init” or “tput reset” către un fișier va capta doar o parte din acțiunile lor. Modificările modurilor terminalului nu sunt afectate de redirecționarea descriptorului de fișier, deoarece modurile terminalului sunt modificate prin ioctl(2).

  Alias
Dacă tput este invocat prin intermediul unei legături cu oricare dintre numele clear, init sau reset, acesta funcționează ca și cum ar fi executat cu operandul (pseudo-)capacității corespunzătoare. De exemplu, executarea unei legături numite reset care indică tput are același efect ca și “tput reset”.

Această caracteristică a fost introdusă de ncurses 5.2 în 2000. Este rar utilizată:

clear
    este un program separat, care este deopotrivă mai mic și mai frecvent executat.

init
    are același nume ca un alt program utilizat pe scară largă.

reset
    este furnizat de instrumentul tset(1) (de asemenea, prin intermediul unei legături denumite reset).

  Dimensiunea terminalului
Pe lângă pseudo-capacități (cum ar fi init), tput tratează în mod special codurile capacitate, lines și cols: poate apela setupterm(3X) pentru a obține dimensiunea terminalului. În primul rând, tput încearcă să obțină aceste capacități din baza de date a terminalului. În general, acest lucru eșuează în cazul emulatoarelor de terminale, care nu au o dimensiune fixă a ferestrei și astfel omit capacitățile. Apoi solicită sistemului de operare dimensiunea terminalului, ceea ce în general funcționează, cu excepția cazului în care conexiunea se face printr-o linie serială care nu acceptă „NAWS”: negocieri privind dimensiunea ferestrei. În cele din urmă, acesta 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).

OPȚIUNI

-S  recuperează mai mult de o capacitate per invocare a tput. Capacitățile trebuie transmise către tput din fluxul de intrare standard și nu din linia de comandă (a se vedea secțiunea «EXEMPLE» de mai jos). Este permis un singur cod-capacitate pe linie. Opțiunea -S modifică semnificația stărilor de ieșire 0 și 1 (a se vedea secțiunea «STARE DE IEȘIRE» de mai jos).

    Unele capacități utilizează parametri de tip șir și nu parametri numerici. tput utilizează un tabel încorporat și prezența parametrilor în intrarea sa pentru a decide cum să îi interpreteze și dacă să utilizeze tparm(3X).

-T tip
    indică tipul terminalului. În mod normal, această opțiune nu este necesară, deoarece o valoare implicită este preluată de la variabila de mediu TERM. Dacă sunt specificate, variabilele de mediu LINES și COLUMNS sunt de asemenea ignorate.

-V  raportează versiunea de ncurses asociată cu tput și iese cu o stare de succes.

-x  împiedică «tput clear» să încerce să șteargă tamponul de derulare înapoi.

STARE DE IEȘIRE
În mod normal, stările de ieșire ale lui tput ar trebui interpretate după cum urmează.

Stare | Semnificație când opțiunea „-S” nu este specificată
0 | boolean sau șir capacitate prezent
1 | boolean sau capacitate numerică absentă
2 | eroare de utilizare sau niciun tip de terminal specificat
3 | tip de terminal nerecunoscut
4 | cod de capacitate nerecunoscut
>4 | eroare de sistem (4 + errno)

Atunci când se utilizează opțiunea -S, unele stări își schimbă semnificația.

Stare | Semnificație când opțiunea „-S” este specificată
0 | toți operanzii interpretați
1 | neutilizat
4 | unii operanzi nu sunt interpretați

MEDIU
tput citește o variabilă de mediu.

TERM
    indică tipul de terminal. Fiecare tip de terminal este distinct, deși multe sunt similare. Opțiunea -T prevalează asupra acestei valori.

FIȘIERE

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

/usr/share/terminfo
    baza de date compilată pentru descrierea terminalelor

PORTABILITATE
De-a lungul timpului, tput ncurses s-a diferențiat de cel a System V în două privințe importante, dintre care una este acum mai ales istorică. «tput cod-capacitate» scrie la ieșirea standard, care nu trebuie să fie un dispozitiv terminal. Cu toate acestea, operanzii care manipulează modurile terminal pot să nu utilizeze ieșirea standard.

    Operanzii init și reset ai tput System V utilizează logica din tset 4.1cBSD, manipulând modurile terminalului. Acesta verifică aceiași descriptori de fișiere (și /dev/tty) pentru asocierea cu un dispozitiv terminal, așa cum face acum ncurses, iar dacă nu există niciunul, în cele din urmă presupune un terminal de 1200 baud. Atunci când actualizează modurile terminalului, acesta ignoră erorile.

    Până la ncurses 6.1 (a se vedea secțiunea «ISTORIC» de mai jos), tput nu a modificat modurile terminalului. Acesta utilizează acum o schemă similară cu System V, folosind funcții comune cu tset (și în cele din urmă bazat pe tset 4.4BSD). Dacă nu este capabil să deschidă un terminal (de exemplu, atunci când este rulat de cron(1)), tput iese cu o stare de eroare. tput System V presupune că tipul unui operand cod-capacitate este numeric dacă toate caracterele din valoarea sa sunt numere zecimale; dacă nu sunt, tratează cod-capacitate ca o capacitate de șir.

    Majoritatea implementărilor care oferă suport pentru operanzi cod-capacitate utilizează funcția tparm(3X) pentru a-și extinde parametrii. 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.

    ncurses tput utilizează un tabel pentru a determina tipurile de parametri pentru operanzii cod-capacitate standard și o funcție internă pentru a analiza operanzii cod-capacitate non-standard.

    Deși este mai fiabilă decât utilitatea System V, această analiză introduce o problemă de portabilitate. Un dezvoltator OpenBSD a adaptat funcția bibliotecii interne din ncurses pentru a adapta tput bazat pe termcap din NetBSD la terminfo, și a modificat-o pentru a interpreta mai multe coduri-capacitate (și parametri) în linia de comandă. Aplicațiile portabile nu trebuie să se bazeze pe această caracteristică; ncurses o oferă pentru a oferi suport aplicațiilor scrise special pentru OpenBSD.

Această implementare, spre deosebire de altele, acceptă atât termcap, cât și terminfo cod-capacitate dacă este compilat suportul termcap. Totuși, în acest caz, codurile predefinite termcap și terminfo au două ambiguități; ncurses presupune codul terminfo. cod-capacitate dl înseamnă delete_line pentru termcap, dar parm_delete_line pentru terminfo. termcap utilizează codul DL pentru parm_delete_line. terminfo utilizează codul dl1 pentru delete_line. cod-ul-decapacitate ed înseamnă exit_delete_mode pentru termcap, dar clr_eos pentru terminfo. termcap utilizează codul cd pentru clr_eos. terminfo utilizează codul rmdc pentru exit_delete_mode.

Operandul \%longname, opțiunea -S și caracteristicile de substituire a parametrilor utilizate în exemplul cup de mai jos nu erau acceptate în AT&T/USL curses înainte de SVr4 (1989). Ulterior, 4.3BSD-Reno (1990) a adăugat suport pentru longname, iar în 1994, NetBSD a adăugat suport pentru caracteristicile de substituire a parametrilor.

IEEE Std 1003.1/The Open Group Base Specifications Issue 7 (POSIX.1-2008) documentează numai operanzii clear, init și reset. Din această selecție rezultă câteva observații de interes. ncurses acceptă clear ca orice alt cod-capacitate standard. Celelalte (init și longname) nu corespund capacităților terminalului. tput pe sistemele bazate pe SVr4, cum ar fi Solaris, IRIX64 și HP-UX, precum și pe altele, cum ar fi AIX și Tru64, acceptă, de asemenea, operanzi cod-capacitate standard. Câteva platforme, cum ar fi FreeBSD, recunosc codurile termcap și nu codurile de capacități terminfo în comenzile lor tput respective. Din 2010, comanda tput a NetBSD utilizează codurile terminfo. Înainte de această dată, aceasta (ca și FreeBSD) recunoștea codurile termcap.

    Începând cu 2021, FreeBSD utilizează tput ncurses, 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 coduri de capacitate, motivul pentru documentarea doar a câtorva poate să nu fie evident. X/Open Curses Issue 7 documentează diferit tput, cu cod-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 includerii X/Open Curses și a bazei de date a capacităților terminalului. Deși este cu siguranță posibil să scrieți un program tput fără a utiliza curses, niciun sistem cu o implementare curses nu oferă un instrument tput care să nu accepte și codurile-de-capacitate standard.

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 (și anume, comportamentul curses System V). Acesta atribuie starea de ieșire 4 la „invalid operand - (operand nevalid(”, care poate avea același înțeles ca „unknown capability - (capacitate necunoscută)”. De exemplu, codul sursă pentru Solaris xcurses utilizează termenul „invalid - (nevalid)” în acest caz. Acesta atribuie starea 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 a indica o capacitate numerică absentă sau anulată cu o stare de ieșire (fără semn).

Diferitele implementări System V (AIX, HP-UX, Solaris) utilizează aceleași stări de ieșire ca ncurses.

NetBSD curses documentează stările de ieșire care nu corespund nici ncurses, nici X/Open Curses.

ISTORIC
Bill Joy a scris o comandă tput în timpul dezvoltării 4BSD în octombrie 1980. Această versiune inițială ștergea doar ecranul și nu era livrată cu distribuțiile oficiale.

System V a dezvoltat o comandă tput diferită. SVr2 (1984) a furnizat o versiune rudimentară tput care verifica parametrul în raport cu fiecare capacitate predefinită și returna valoarea corespunzătoare. Această versiune a tput nu folosea tparm(3X) pentru capacitățile parametrizate. SVr3 (1987) l-a înlocuit cu un program mai extins al cărui suport pentru operanzii init și reset (mai mult de jumătate din program) a încorporat funcția reset din BSD tset scrisă de Eric Allman. SVr4 (1989) a adăugat inițializarea culorilor prin utilizarea capacităților orig_colors (oc) și orig_pair (op) în logica sa init.

Keith Bostic a refactorizat tput BSD pentru livrarea în 4.3BSD-Tahoe (1988), apoi l-a înlocuit în anul următor cu o nouă implementare bazată pe tput System V. Versiunea lui Bostic a acceptat în mod similar unii parametri numiți pentru (pseudo-)capacitățile terminfo: clear, init, longname și reset. Cu toate acestea, deoarece el avea la dispoziție doar termcap, a acceptat coduri termcap pentru alte capacități. De asemenea, tput BSD al lui Bostic nu modifica modurile 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 lui tput.

Originea programului ncurses tput se află în afara System V și BSD, în 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. Încorporând 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ă.

Înainte de ncurses 6.1 (2018), utilitățile sale tset și tput erau diferite. tset a fost mai eficient, reinițializând modurile terminalului și caracterele speciale. Pe de altă parte, repertoriul tset de capacități ale terminalului pentru reinițializarea terminalului a fost mai limitat; a avut doar echivalenți ai reset_1string (rs1), reset_2string (rs2) și reset_file (rf), și nu caracteristicile de oprire a tabulării și actualizare a marginilor ale tput.

Programul reset este în mod tradițional un alias pentru tset datorită capacității sale de a reinițializa modurile terminalului și caracterele speciale.

Începând cu ncurses 6.1, caracteristicile «reset» ale celor două programe sunt (în mare parte) aceleași. Rămân două diferențe minore. 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.

EXEMPLE

tput init
    Inițializează terminalul în funcție de tipul de terminal din variabila de mediu TERM. Dacă sistemul nu inițializează în mod fiabil terminalul la autentificare, această comandă poate fi inclusă în $HOME/.profile după exportarea variabilei de mediu TERM.

tput -T5620 reset
    Reinițializează un terminal AT&T 5620, suprascriind tipul de terminal din variabila de mediu TERM.

tput cnorm
    Stabilește cursorul la vizibilitate normală.

tput home
    Mută cursorul pe rândul 0, coloana 0: colțul din stânga sus al ecranului, cunoscut de obicei ca poziția cursorului „home” (inițială).

tput clear
    Șterge ecranul: scrie valoarea capacității clear_screen în fluxul de ieșire standard.

tput cols
    Raportează numărul de coloane utilizate de tipul de terminal curent.

tput -Tadm3a cols
    Raportați numărul de coloane utilizate de un terminal ADM-3A.

strong=`tput smso` normal=`tput rmso`
    Stabilește variabilele shell la valori de capacitate: strong and normal, pentru început și sfârșit, respectiv, modul de evidențiere pentru terminal. Acestea pot fi utilizate pentru a prezenta un prompt.

        printf "${strong}Nume-utilizator:${normal} "

tput hc
    Indică, prin intermediul stării de ieșire, dacă terminalul este un dispozitiv de tip „hard copy” (care imprimă informația pe hârtie).

tput cup 23 4
    Mută cursorul la rândul 23, coloana 4.

tput cup
    Raportează valoarea capacității cursor_address (cup) (utilizată pentru deplasarea cursorului), fără înlocuirea parametrilor.

tput longname
    Raportează descrierea din baza de date terminfo a tipului de terminal specificat în variabila de mediu TERM.

tput -S
    Procesarea capacităților multiple Opțiunea -S poate fi utilizată în mod profitabil cu un shell pentru a indica „here document” (aici document în română, ce indică terminalului că șirurile care urmează este un text, nu șiruri de caractere speciale).

        $ tput -S <<!
        > clear
        > cup 10 10
        > bold
        > !

    Aceasta șterge ecranul, mută cursorul în poziția (10, 10) și activează modul îngroșat (foarte luminos).

tput clear cup 10 10 bold
    Efectuează aceleași acțiuni ca în exemplul precedent «tput -S».

CONSULTAȚI ȘI
clear(1), stty(1), tabs(1), tset(1), curs_termcap(3X), terminfo(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.