tput(1) Comenzi utilizator tput(1) NUME tput - iniializeaza un terminal, exercita capacitaile acestuia sau interogheaza 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 utilizeaza biblioteca i baza de date terminfo pentru a pune la dispoziia shell-ului capacitaile i informaiile specifice terminalului, pentru a iniializa sau reiniializa terminalul, sau pentru a raporta o descriere a tipului de terminal curent (sau specificat). Capacitaile terminalului sunt accesate prin cod-capacitate. terminfo(5) abordeaza pe larg capacitaile terminalului i prezinta o lista completa de coduri-capacitai. Cand se preiau valorile capacitaii, rezultatul depinde de tipul capacitaii. Boolean tput ii stabilete starea de ieire la 0 daca terminalul poseda cod-capacitate i la 1 daca nu. numeric tput scrie valoarea zecimala a cod-capacitate in fluxul de ieire standard, daca este definit (-1 daca nu este definit), urmata de o linie noua. ir tput scrie valoarea lui cod-capacitate in fluxul de ieire standard, daca este definit, fara o linie noua la sfarit. Inainte de a utiliza o valoare returnata la ieirea standard, aplicaia trebuie sa testeze starea de ieire a tput pentru a se asigura ca este 0; a se vedea seciunea <IRE>> de mai jos. Operanzi In general, un operand este un cod-capacitate, un cod de capacitate din baza de date a terminalului, sau un parametru al acestuia. tput recunoate in mod special alte trei: init, reset i longname. Cu toate ca acestea seamana cu codurile de capacitate, ele beneficiaza de fapt de un tratament special; le numim ,,pseudo-capacitai". cod-capacitate indica o capacitate din baza de date a terminalului. Daca cod-capacitate este de tip ir de caractere i are parametri, tput interpreteaza argumentele care urmeaza lui cod-capacitate ca parametri, pana la cantitatea (fixa) ceruta de capacitate. Majoritatea parametrilor sunt numerici. Doar cateva capacitai ale terminalului necesita parametri de tip ir de caractere; tput utilizeaza un tabel pentru a decide care sa fie trecui ca iruri de caractere. In mod normal, tput utilizeaza tparm(3X) pentru a efectua substituia. Daca nu sunt furnizai parametri pentru capacitate, tput scrie irul de caractere fara a efectua substituia. init iniializeaza terminalul. Daca baza de date a terminalului este prezenta i exista o intrare pentru tipul de terminal al utilizatorului, se intampla urmatoarele. (1) tput preia parametrii de mod ai terminalului. Acesta testeaza succesiv descriptorii de fiier corespunzatori o fluxului de ieire de eroare standard, o fluxului de ieire standard, o fluxului de intrare standard i o /dev/tty tput preia parametrii de mod ai terminalului. Acesta testeaza succesiv descriptorii de fiier corespunzatori fluxului standard de eroare, fluxului standard de ieire, fluxului standard de intrare i X pentru a obine parametrii terminalului. Dupa ce i-a obinut, tput memoreaza ce descriptor sa utilizeze pentru actualizarile ulterioare. (2) Daca dimensiunile terminalului nu pot fi obinute de la sistemul de operare, dar intrarea din baza de date a mediului sau a tipului de terminal le descrie, tput actualizeaza noiunea sistemului de operare despre acestea. (3) tput actualizeaza modurile terminalului. o Orice intarzieri specificate in intrare (de exemplu, atunci cand este trimisa o linie noua) sunt definite in controlorul terminalului. o Extinderea tabulatoarelor este activata sau dezactivata conform specificaiilor din intrare, o iar daca tabulatoarele nu sunt extinse, sunt definite tabulatoare standard (la fiecare 8 spaii). (4) Daca sunt prezente capacitai de iniializare, detaliate in subseciunea <i iniializare>> din terminfo(5), tput le scrie in fluxul de ieire standard. (5) tput golete fluxul de ieire standard. Daca o intrare nu conine informaiile necesare pentru o activitate de mai sus, activitatea respectiva este ignorata in mod silenios. reset reinitializeaza terminalul. O reiniializare difera de iniializare in doua moduri. (1) tput aduce modurile terminalului intr-o stare ,,corecta de funcionare", o activand modurile pregatit ,,cooked" i ecou ,,echo", o dezactivand modurile cbreak i raw, o activand traducerea liniei noi i o stabilind orice caractere speciale nedefinite la valorile lor implicite. (2) Daca sunt definite capacitai de reiniializare pentru tipul de terminal, tput le scrie in fluxul de ieire. In caz contrar, tput utilizeaza orice capacitai de iniializare definite. Capacitaile de reiniializare sunt detaliate in subseciunea <i iniializare>> din terminfo(5). longname O intrare terminfo incepe cu unul sau mai multe nume prin care o aplicaie se poate referi la intrare, inainte de lista capacitailor terminalului. Numele sunt separate prin caractere ,,|". X/Open Curses numete ultimul nume ,,long name - nume lung" i indica faptul ca acesta poate include spaii albe. tic avertizeaza daca ultimul nume nu include spaii albe, pentru a acomoda vechile intrari terminfo care tratau numele lung ca o caracteristica opionala. Numele lung este adesea denumit camp de descriere. Daca baza de date a terminalului este prezenta i exista o intrare pentru tipul de terminal al utilizatorului, tput raporteaza descrierea acestuia pe fluxul de ieire standard, fara o linie noua la sfarit. Consultai terminfo(5). Nota: Redirecionarea ieirii "tput init" or "tput reset" catre un fiier va capta doar o parte din aciunile lor. Modificarile modurilor terminalului nu sunt afectate de redirecionarea descriptorului de fiier, deoarece modurile terminalului sunt modificate prin ioctl(2). Alias Daca tput este invocat prin intermediul unei legaturi cu oricare dintre numele clear, init sau reset, acesta funcioneaza ca i cum ar fi executat cu operandul (pseudo-)capacitaii corespunzatoare. De exemplu, executarea unei legaturi numite reset care indica tput are acelai efect ca i "tput reset". Aceasta caracteristica a fost introdusa de ncurses 5.2 in 2000. Este rar utilizata: clear este un program separat, care este deopotriva mai mic i mai frecvent executat. init are acelai nume ca un alt program utilizat pe scara larga. reset este furnizat de instrumentul tset(1) (de asemenea, prin intermediul unei legaturi denumite reset). Dimensiunea terminalului Pe langa pseudo-capacitai (cum ar fi init), tput trateaza in mod special codurile capacitate, lines i cols: poate apela setupterm(3X) pentru a obine dimensiunea terminalului. o In primul rand, tput incearca sa obina aceste capacitai din baza de date a terminalului. In general, acest lucru eueaza in cazul emulatoarelor de terminale, care nu au o dimensiune fixa a ferestrei i astfel omit capacitaile. o Apoi solicita sistemului de operare dimensiunea terminalului, ceea ce in general funcioneaza, cu excepia cazului in care conexiunea se face printr-o linie seriala care nu accepta ,,NAWS": negocieri privind dimensiunea ferestrei. o In cele din urma, acesta inspecteaza variabilele de mediu LINES i COLUMNS, care pot inlocui dimensiunea terminalului. Daca este data opiunea -T, tput ignora variabilele de mediu prin apelarea use_tioctl(TRUE), bazandu-se pe sistemul de operare (sau, in cele din urma, pe baza de date a terminalului). OPIUNI -S recupereaza mai mult de o capacitate per invocare a tput. Capacitaile trebuie transmise catre tput din fluxul de intrare standard i nu din linia de comanda (a se vedea seciunea <> de mai jos). Este permis un singur cod-capacitate pe linie. Opiunea -S modifica semnificaia starilor de ieire 0 i 1 (a se vedea seciunea <IRE>> de mai jos). Unele capacitai utilizeaza parametri de tip ir i nu parametri numerici. tput utilizeaza un tabel incorporat i prezena parametrilor in intrarea sa pentru a decide cum sa ii interpreteze i daca sa utilizeze tparm(3X). -T tip indica tipul terminalului. In mod normal, aceasta opiune nu este necesara, deoarece o valoare implicita este preluata de la variabila de mediu TERM. Daca sunt specificate, variabilele de mediu LINES i COLUMNS sunt de asemenea ignorate. -V raporteaza versiunea de ncurses asociata cu tput i iese cu o stare de succes. -x impiedica <> sa incerce sa tearga tamponul de derulare inapoi. STARE DE IEIRE In mod normal, starile de ieire ale lui tput ar trebui interpretate dupa cum urmeaza. Stare Semnificaie cand opiunea ,,-S" nu este specificata ------------------------------------------------------------------------ 0 boolean sau ir capacitate prezent 1 boolean sau capacitate numerica absenta 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 cand se utilizeaza opiunea -S, unele stari ii schimba semnificaia. Stare Semnificaie cand opiunea ,,-S" este specificata ------------------------------------------------------------------------ 0 toi operanzii interpretai 1 neutilizat 4 unii operanzi nu sunt interpretai MEDIU tput citete o variabila de mediu. TERM indica tipul de terminal. Fiecare tip de terminal este distinct, dei multe sunt similare. Opiunea -T prevaleaza asupra acestei valori. FIIERE /usr/share/tabset baza de date de iniializare oprire a tabulatorului /usr/share/terminfo baza de date compilata pentru descrierea terminalelor PORTABILITATE De-a lungul timpului, tput ncurses s-a difereniat de cel a System V in doua privine importante, dintre care una este acum mai ales istorica. o <> scrie la ieirea standard, care nu trebuie sa fie un dispozitiv terminal. Cu toate acestea, operanzii care manipuleaza modurile terminal pot sa nu utilizeze ieirea standard. Operanzii init i reset ai tput System V utilizeaza logica din tset 4.1cBSD, manipuland modurile terminalului. Acesta verifica aceiai descriptori de fiiere (i /dev/tty) pentru asocierea cu un dispozitiv terminal, aa cum face acum ncurses, iar daca nu exista niciunul, in cele din urma presupune un terminal de 1200 baud. Atunci cand actualizeaza modurile terminalului, acesta ignora erorile. Pana la ncurses 6.1 (a se vedea seciunea <> de mai jos), tput nu a modificat modurile terminalului. Acesta utilizeaza acum o schema similara cu System V, folosind funcii comune cu tset (i in cele din urma bazat pe tset 4.4BSD). Daca nu este capabil sa deschida un terminal (de exemplu, atunci cand este rulat de cron(1)), tput iese cu o stare de eroare. o tput System V presupune ca tipul unui operand cod-capacitate este numeric daca toate caracterele din valoarea sa sunt numere zecimale; daca nu sunt, trateaza cod-capacitate ca o capacitate de ir. Majoritatea implementarilor care ofera suport pentru operanzi cod-capacitate utilizeaza funcia tparm(3X) pentru a-i extinde parametrii. Aceasta funcie ateapta un amestec de parametri numerici i de ir de caractere, necesitand ca tput sa tie ce tip sa utilizeze. ncurses tput utilizeaza un tabel pentru a determina tipurile de parametri pentru operanzii cod-capacitate standard i o funcie interna pentru a analiza operanzii cod-capacitate non-standard. Dei este mai fiabila decat utilitatea System V, aceasta analiza introduce o problema de portabilitate. Un dezvoltator OpenBSD a adaptat funcia 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) in linia de comanda. Aplicaiile portabile nu trebuie sa se bazeze pe aceasta caracteristica; ncurses o ofera pentru a oferi suport aplicaiilor scrise special pentru OpenBSD. Aceasta implementare, spre deosebire de altele, accepta atat termcap, cat i terminfo cod-capacitate daca este compilat suportul termcap. Totui, in acest caz, codurile predefinite termcap i terminfo au doua ambiguitai; ncurses presupune codul terminfo. o cod-capacitate dl inseamna delete_line pentru termcap, dar parm_delete_line pentru terminfo. termcap utilizeaza codul DL pentru parm_delete_line. terminfo utilizeaza codul dl1 pentru delete_line. o cod-ul-decapacitate ed inseamna exit_delete_mode pentru termcap, dar clr_eos pentru terminfo. termcap utilizeaza codul cd pentru clr_eos. terminfo utilizeaza codul rmdc pentru exit_delete_mode. Operandul \%longname, opiunea -S i caracteristicile de substituire a parametrilor utilizate in exemplul cup de mai jos nu erau acceptate in AT&T/USL curses inainte de SVr4 (1989). Ulterior, 4.3BSD-Reno (1990) a adaugat suport pentru longname, iar in 1994, NetBSD a adaugat suport pentru caracteristicile de substituire a parametrilor. IEEE Std 1003.1/The Open Group Base Specifications Issue 7 (POSIX.1-2008) documenteaza numai operanzii clear, init i reset. Din aceasta selecie rezulta cateva observaii de interes. o ncurses accepta clear ca orice alt cod-capacitate standard. Celelalte (init i longname) nu corespund capacitailor terminalului. o tput pe sistemele bazate pe SVr4, cum ar fi Solaris, IRIX64 i HP-UX, precum i pe altele, cum ar fi AIX i Tru64, accepta, de asemenea, operanzi cod-capacitate standard. o Cateva platforme, cum ar fi FreeBSD, recunosc codurile termcap i nu codurile de capacitai terminfo in comenzile lor tput respective. Din 2010, comanda tput a NetBSD utilizeaza codurile terminfo. Inainte de aceasta data, aceasta (ca i FreeBSD) recunotea codurile termcap. Incepand cu 2021, FreeBSD utilizeaza tput ncurses, configurat atat pentru terminfo (testat mai intai), cat i pentru termcap (ca soluie de rezerva). Deoarece (aparent) toate sistemele Unix certificate accepta intregul set de coduri de capacitate, motivul pentru documentarea doar a catorva poate sa nu fie evident. o X/Open Curses Issue 7 documenteaza diferit tput, cu cod-capacitate i alte caracteristici utilizate in aceasta implementare. o Adica, exista doua standarde pentru tput: POSIX (un subset) i X/Open Curses (implementarea completa). POSIX documenteaza un subset pentru a evita complicaia includerii X/Open Curses i a bazei de date a capacitailor terminalului. o Dei este cu sigurana posibil sa scriei un program tput fara a utiliza curses, niciun sistem cu o implementare curses nu ofera un instrument tput care sa nu accepte i codurile-de-capacitate standard. X/Open Curses Issue 7 (2009) este prima versiune care documenteaza utilitaile. Cu toate acestea, aceasta parte a X/Open Curses nu respecta practicile existente (i anume, comportamentul curses System V). o Acesta atribuie starea de ieire 4 la ,,invalid operand - (operand nevalid(", care poate avea acelai ineles ca ,,unknown capability - (capacitate necunoscuta)". De exemplu, codul sursa pentru Solaris xcurses utilizeaza termenul ,,invalid - (nevalid)" in acest caz. o Acesta atribuie starea de ieire 255 unei variabile numerice care nu este specificata in baza de date terminfo. Aceasta este probabil o eroare de documentare, confundand ,,-1" scris la ieirea standard pentru a indica o capacitate numerica absenta sau anulata cu o stare de ieire (fara semn). Diferitele implementari System V (AIX, HP-UX, Solaris) utilizeaza aceleai stari de ieire ca ncurses. NetBSD curses documenteaza starile de ieire care nu corespund nici ncurses, nici X/Open Curses. ISTORIC Bill Joy a scris o comanda tput in timpul dezvoltarii 4BSD in octombrie 1980. Aceasta versiune iniiala tergea doar ecranul i nu era livrata cu distribuiile oficiale. System V a dezvoltat o comanda tput diferita. o SVr2 (1984) a furnizat o versiune rudimentara tput care verifica parametrul in raport cu fiecare capacitate predefinita i returna valoarea corespunzatoare. Aceasta versiune a tput nu folosea tparm(3X) pentru capacitaile parametrizate. o SVr3 (1987) l-a inlocuit cu un program mai extins al carui suport pentru operanzii init i reset (mai mult de jumatate din program) a incorporat funcia reset din BSD tset scrisa de Eric Allman. o SVr4 (1989) a adaugat iniializarea culorilor prin utilizarea capacitailor orig_colors (oc) i orig_pair (op) in logica sa init. Keith Bostic a refactorizat tput BSD pentru livrarea in 4.3BSD-Tahoe (1988), apoi l-a inlocuit in anul urmator cu o noua implementare bazata pe tput System V. Versiunea lui Bostic a acceptat in mod similar unii parametri numii pentru (pseudo-)capacitaile terminfo: clear, init, longname i reset. Cu toate acestea, deoarece el avea la dispoziie doar termcap, a acceptat coduri termcap pentru alte capacitai. De asemenea, tput BSD al lui Bostic nu modifica modurile terminalului aa cum facuse tset BSD anterior. In acelai timp, Bostic a adaugat un script shell numit,,clear" care folosea tput pentru a terge ecranul. Ambele au aparut in 4.4BSD, devenind implementarea BSD ,,moderna" a lui tput. Originea programului ncurses tput se afla in afara System V i BSD, in pachetul mytinfo al lui Ross Ridge, publicat pe comp.sources.unix in decembrie 1992. Programul lui Ridge a facut o utilizare mai sofisticata a capacitailor terminalului decat programul BSD. Eric Raymond a folosit acel program tput (i alte pari din mytinfo) in ncurses in iunie 1995. Incorporand poriunile referitoare la capacitaile terminalului aproape fara modificari, Raymond a adus imbunatairi modului in care erau gestionai parametrii liniei de comanda. Inainte de ncurses 6.1 (2018), utilitaile sale tset i tput erau diferite. o tset a fost mai eficient, reiniializand modurile terminalului i caracterele speciale. o Pe de alta parte, repertoriul tset de capacitai ale terminalului pentru reiniializarea terminalului a fost mai limitat; a avut doar echivaleni ai reset_1string (rs1), reset_2string (rs2) i reset_file (rf), i nu caracteristicile de oprire a tabularii i actualizare a marginilor ale tput. Programul reset este in mod tradiional un alias pentru tset datorita capacitaii sale de a reiniializa modurile terminalului i caracterele speciale. Incepand cu ncurses 6.1, caracteristicile <> ale celor doua programe sunt (in mare parte) aceleai. Raman doua diferene minore. o Programul tset ateapta o secunda la reiniializare, in cazul in care terminalul se intampla sa fie un dispozitiv hardware. o Cele doua programe scriu irurile de iniializare a terminalului in fluxuri diferite; adica, ieirea de eroare standard pentru tset i ieirea standard pentru tput. EXEMPLE tput init Iniializeaza terminalul in funcie de tipul de terminal din variabila de mediu TERM. Daca sistemul nu iniializeaza in mod fiabil terminalul la autentificare, aceasta comanda poate fi inclusa in $HOME/.profile dupa exportarea variabilei de mediu TERM. tput -T5620 reset Reiniializeaza un terminal AT&T 5620, suprascriind tipul de terminal din variabila de mediu TERM. tput cnorm Stabilete cursorul la vizibilitate normala. tput home Muta cursorul pe randul 0, coloana 0: colul din stanga sus al ecranului, cunoscut de obicei ca poziia cursorului ,,home" (iniiala). tput clear terge ecranul: scrie valoarea capacitaii clear_screen in fluxul de ieire standard. tput cols Raporteaza numarul de coloane utilizate de tipul de terminal curent. tput -Tadm3a cols Raportai numarul de coloane utilizate de un terminal ADM-3A. strong=`tput smso` normal=`tput rmso` Stabilete variabilele shell la valori de capacitate: strong and normal, pentru inceput i sfarit, respectiv, modul de evideniere pentru terminal. Acestea pot fi utilizate pentru a prezenta un prompt. printf "${strong}Nume-utilizator:${normal} " tput hc Indica, prin intermediul starii de ieire, daca terminalul este un dispozitiv de tip ,,hard copy" (care imprima informaia pe hartie). tput cup 23 4 Muta cursorul la randul 23, coloana 4. tput cup Raporteaza valoarea capacitaii cursor_address (cup) (utilizata pentru deplasarea cursorului), fara inlocuirea parametrilor. tput longname Raporteaza descrierea din baza de date terminfo a tipului de terminal specificat in variabila de mediu TERM. tput -S Procesarea capacitailor multiple Opiunea -S poate fi utilizata in mod profitabil cu un shell pentru a indica ,,here document" (aici document in romana, ce indica terminalului ca irurile care urmeaza este un text, nu iruri de caractere speciale). $ tput -S < clear > cup 10 10 > bold > ! Aceasta terge ecranul, muta cursorul in poziia (10, 10) i activeaza modul ingroat (foarte luminos). tput clear cup 10 10 bold Efectueaza aceleai aciuni ca in exemplul precedent <>. CONSULTAI I clear(1), stty(1), tabs(1), tset(1), curs_termcap(3X), terminfo(5) TRADUCERE Traducerea in limba romana a acestui manual a fost facuta de Remus- Gabriel Chelu Aceasta traducere este documentaie gratuita; citii Licena publica generala GNU Versiunea 3 sau o versiune ulterioara cu privire la condiii privind drepturile de autor. NU se asuma NICIO RESPONSABILITATE. Daca gasii erori in traducerea acestui manual, va rugam sa trimitei un e-mail la . ncurses 6.5 20 aprilie 2024 tput(1)