tset(1) Polecenia uzytkownika tset(1) NAZWA tset, reset - inicjuje lub resetuje stan terminala SKLADNIA tset [-IQVcqrsw] [-] [-e znak] [-i znak] [-k znak] [-m mapowanie] [typ-terminala] reset [-IQVcqrsw] [-] [-e znak] [-i znak] [-k znak] [-m mapowanie] [typ-terminala] OPIS tset -- inicjalizacja Program ten inicjuje terminale. Na poczateku tset pobiera biezace ustawienia trybu terminala dla terminala uzytkownika. Czyni to sprawdzajac kolejno o standardowe wyjscie bledow, o standardowe wyjscie, o standardowe wejscie o i na koncu ,,/dev/tty/" w celu pobrania ustawien terminala. Po uzyskaniu ustawien, tset zapamietuje, ktorego deskryptora pliku nalezy uzyc przy aktualizowaniu ustawien. Nastepnie, tset okresla rodzaj uzywanego terminala. Robi to na podstawie ponizszych danych, korzystajac z pierwszego pasujacego typu terminala: 1. Argumentu typ-terminala, podanego w wierszu polecen. 2. Wartosci zmiennej srodowiskowej TERM. 3. (Tylko systemy BSD.) Typu terminala, zwiazanego poprzez plik /etc/ttys z urzadzeniem stderr (na komputerach z Systemem V i w systemach uzywajacych jego konwencji, robote te wykonuje getty, ustawiajac TERM zgodnie z typem, przekazanym mu przez /etc/inittab). 4. Domyslny typ terminala, ,,unknown", nie jest odpowiedni dla aplikacji korzystajacych z curses. Jesli rodzaj terminala nie byl podany w wierszu polecen, to zalaczane sa mapowania opcji -m (zob. podrozdzial ,,Mapowanie typu terminala"). Potem, jesli typ terminala zaczyna sie od pytajnika (,,?"), uzytkownik jest pytany o potwierdzenie. Pusta odpowiedz potwierdza typ, a niepusta wprowadza inny. Gdy terminal zostanie juz okreslony, odczytywany jest opis terminala. Jesli nie ma dla niego opisu terminala, uzytkownik jest proszony o podanie innego typu terminala. Po pobraniu opisu terminala: o jesli wlaczono opcje ,,-w", tset moze zaktualizowac rozmiar okna terminala; jesli rozmiaru okna nie mozna uzyskac od systemu operacyjnego, lecz mozna z opisu terminala (lub ze srodowiska np. okreslaja go zmienne LINES (wiersze) i COLUMNS (kolumny)), korzysta z tego do ustawienia wyobrazenia systemu operacyjnego o rozmiarze okna; o jesli wlaczono opcje ,,-c", ustawiane sa m.in. znaki kasowania (erase), przerwania (interrupt) i usuniecia linii (line kill); o o ile nie wlaczono opcji ,,-I", wysyla na standardowe wyjscie bledow lancuchy inicjalizacji tab lub terminala a, jesli urzadzenie terminala nie wyglada na pseudoterminal (ktory moze byc uzywany przez emulator terminala) tset odczekuje jedna sekunde (na wypadek, gdyby zarzadzono reset sprzetowy); o Na koniec, jesli znaki kasowania (erase), przerwania (interrupt) i usuniecia linii (line kill) zmienily sie, lub nie sa ustawione na wartosci domyslne, ich wartosci sa wyswietlane na wyjscie stderr. reset -- ponowna inicjalizacja Przy wywolaniu pod postacia reset, tset ustawia tryby terminala na ,,rozsadne" wartosci: o ustawia tradycyjne tryby ,,cooked" i echo, o wylacza tryby cbreak i raw, o wlacza tlumaczenie znakow nowego wiersza o i przywraca wejsciowym znakom specjalnym ich wartosci domyslne przed dokonaniem inicjalizacji terminala opisanej wyzej. Dodatkowo, zamiast korzystac z lancuchow inicjalizacji terminala, uzywa lancuchow resetowania terminala. Polecenie reset jest przydatne w sytuacjach, gdy jakis program zginie, pozostawiajac terminal w niepoprawnym stanie: o moze byc konieczne wpisanie reset (znak -- line-feed to zazwyczaj control-J) aby terminal zaczal dzialac, gdyz znak powrotu karetki moze w stanie niepoprawnym nie dzialac. o Poza tym, wpisywane znaki polecenia czesto moga nie byc widoczne na terminalu. Ustawianie srodowiska Czesto do srodowiska powloki przydaje sie wstawic typ terminala i informacje o jego wlasciwosciach. Dokonuje sie tego przy uzyciu opcji -s. Gdy podana jest opcja -s, komendy wymagane do wstawienia informacji do srodowiska powloki sa zapisywane na stdout. Jesli zmienna srodowiskowa SHELL konczy sie na ,,csh", komendy sa preparowane dla csh(1), w przeciwnym wypadku tworzone sa dla sh(1). Zestaw polecen csh ustawia, a nastepnie usuwa zmienna powloki noglob, pozostawiajac ja nieustawiona. Nastepujaca linia w .login czy .profile powinna prawidlowo zainicjowac srodowisko: eval `tset -s opcje ... ` Mapowanie typu terminala Gdy terminal nie jest scisle przywiazany do systemu (lub biezaca informacja systemowa moze nie byc prawidlowa), typ terminala wyprowadzony z pliku /etc/ttys lub ze zmiennej srodowiskowej TERM moze byc czesto czyms podstawowym, w rodzaju network, dialup czy unknown. Gdy tset jest uzywany w skrypcie startowym, czesto dobrze jest udostepnic informacje o typie terminala uzywanym na takich portach. Opcja -m mapuje z pewnych warunkow na typ terminala, tj. mowi tset ,,Jestem na tym porcie, z taka predkoscia, wiec chyba jestem na tym typie terminala". Argument opcji -m sklada sie z opcjonalnego typu portu, opcjonalnego operatora i opcjonalnej szybkosci oraz znaku dwukropka ,,:" i typu terminala. Typ portu jest lancuchem (rozdzielanym przez operator albo znak dwukropka). Operator moze byc dowolna kombinacja ,,>", ,,<", ,,@" i ,,!"; ,,>" oznacza wiekszy od, ,,<" mniejszy od, ,,@" rowny, a ,,!" odwraca sens testu. Szybkosc jest podawana jako liczba i jest porownywana z szybkoscia wyjscia standardowego bledow (ktore powinno byc kontrolujacym terminalem). Typ terminala jest lancuchem. Jesli w linii polecen nie podano typu terminala, do typu stosowane sa mapowania -m. Jesli typ portu i szybkosc odpowiadaja mapowaniu, terminal podany w mapowaniu podmienia typ obecny. Jesli podanych jest wiecej niz jedno mapowanie, uzyte zostanie pierwsze pasujace. Na przyklad, rozwazmy nastepujace mapowanie: dialup>9600:vt100. Typ portu to dialup, operator to >, szybkosc to 9600, a typ terminala to vt100. Wynikiem mapowania jest okreslenie, ze jesli typ terminala to dialup, szybkosc jest wieksza niz 9600 bodow, to nalezy uzywac terminala vt100. Jesli nie poda sie szybkosci, typ terminala bedzie pasowal do dowolnej szybkosci. Jesli nie poda sie typu portu, terminal bedzie pasowal do dowolnego portu. Na przyklad, -m dialup:vt100 -m :?xterm spowoduje, ze dowolny port dialupowy, niezaleznie od szybkosci bedzie odpowiadal terminalowi vt100, podczas gdy dowolny port niedialupowy bedzie traktowany jako ?xterm. Prosze zauwazyc, ze z uwagi na pytajnik, uzytkownik bedzie zapytany o domyslnym porcie czy rzeczywiscie uzywa terminala xterm. W argumencie opcji -m dozwolone sa znaki bialych spacji. Ponadto, aby zapobiec problemom z metaznakami, cala opcje -m zaleca sie umieszczac wewnatrz cytatow, a uzytkownikom csh umieszczanie lewych ukosnikow (,,\") przed znakami wykrzyknikow (,,!"). OPCJE Dostepne sa nastepujace opcje: -c Ustawia tryby i znaki sterujace. -e znak Ustawia znak kasowania (erase) na znak. -I Nie wysyla na terminal lancuchow inicjalizacji tab lub terminala. -i znak Ustawia znak przerwania (interrupt) na znak. -k znak Ustawia znak usuwania linii (line kill) na znak. -m mapowanie Podaje mapowanie z typu portu na terminal; zob. podrozdzial ,,Mapowanie typu terminala". -Q Nie wyswietla wartosci dla znakow kasowania (erase), przerwania (interrupt) i usuniecia linii (line kill). Zwykle tset wyswietla wartosci znakow kontrolnych, ktore roznia sie od domyslnych wartosci systemowych. -q Typ terminala jest wyswietlany na standardowe wyjscie i nie jest on w zaden sposob inicjowany. Opcja ,,-" jest rownowazna, lecz archaiczna. -r Wypisuje typ terminala na standardowe wyjscie bledow. -s Wypisuje na standardowe wyjscie sekwencje komend powloki, inicjujacych zmienna srodowiskowa TERM; zob. podrozdzial ,,Ustawianie srodowiska". -V Zglasza wersje ncurses, z ktorej skorzystal program i wychodzi. -w Zmienia rozmiar okna do rozmiaru wydedukowanego za pomoca setupterm(3X). Zwykle opcja ta nic nie zmienia, chyba ze setupterm nie byl w stanie wykryc rozmiaru okna. Argumenty dla -e, -i i -k moga byc wprowadzane jako normalne znaki, z uzyciem notacji ,,kapeluszowej", tj. control-h moze byc podawany jako ,,^H" czy ,,^h". Jesli nie poda sie zadnej z opcji -c i -w, stosowane sa obie. SRODOWISKO Polecenie tset uzywa nastepujacych zmiennych srodowiskowych: SHELL Przekazuje tset informacje, czy do zainicjowania TERM uzyc skladni sh(1) czy csh(1). TERM Wskazuje typ terminala uzytkownika. Kazdy typ jest odmienny, choc wiele jest podobnych. TERMCAP Moze wskazywac polozenie bazy danych termcap. Jesli nie jest to sciezka absolutna (tj. zaczynajaca sie od ,,/"), tset usunie te zmienna ze srodowiska przed rozpoczeciem szukania opisow terminali. PLIKI /etc/ttys Baza mapowan nazw portow na typy terminali (tylko wersje BSD). /usr/share/terminfo Katalog ze skompilowana baza danych o terminalach. PRZENOSNOSC Ani IEEE Std 1003.1/The Open Group Base Specifications Issue 7 (POSIX.1-2008), ani X/Open Curses Issue 7 nie dokumentuja tset i reset. Narzedzie tput AT&T (AIX, HP-UX, Solaris) dolaczylo: mozliwosc modyfikacji trybu termianala oraz funkcje korzystajace z termcap, takie jak resetowanie tabulatorow, z tset w BSD (4.1c), prawdopodobnie z intencja pozniejszego zastapienia tset. Jednak kazdy z tych systemow wciaz zawiera tset. Co wiecej, czesto stosowane narzedzie reset jest zawsze aliasem tset. Narzedzie tset zapewnia wsteczna kompatybilnosc ze srodowiskami BSD (pod wiekszoscia Uniksow /etc/inittab i getty(1) moga ustawiac odpowiednio TERM dla dowolnej linii dial-up, a to trywializuje to, co bylo najwazniejszym zastosowaniem tset). Implementacja ta zachowuje sie jak tset z 4.4BSD, lecz zawiera kilka wyjatkow, do ktorych teraz przejdziemy. Kilka opcji jest odmiennych, poniewaz zmienna TERMCAP nie jest juz obslugiwana w ncurses korzystajacej z terminfo: o Opcja -S tset z BSD juz nie dziala; wypisuje blad na standardowe wyjscie bledow i ginie. o Opcja -s ustawia jedynie TERM, lecz nie TERMCAP. Istniala nieudokumentowana wlasciwosc 4.4BSD, wedlug ktorej wywolanie tset poprzez dowiazanie o nazwie ,,TSET" (lub poprzez inna nazwe, rozpoczynajaca sie od duzej litery) ustawialo terminal na uzywanie tylko duzych liter. Wlasciwosc ta zostala pominieta. Opcje -A, -E, -h, -u i -v skasowano z narzedzia tset w 4.4BSD. Zadne z nich nie bylo udokumentowane w 4.3BSD i wszystkie mialy w najlepszym wypadku ograniczona przydatnosc. Opcje -a, -d i -p sa podobnie nieopisane lub nieuzyteczne, lecz zostaly utrzymane, gdyz okazuje sie ze sa powszechnie uzywane. Jest mocno zalecane zmienienie wykorzystywania tych opcji na opcje -m. Opcje -a, -d i -p sa z tej przyczyny pominiete w opisie powyzej. Bardzo stare systemy, takie jak 3BSD, korzystaly z innego sterownika terminala, ktory zastapiono w 4BSD, we wczesnych latach 1980. Do obslugi tych systemow tset z 4BSD udostepnial opcje -n wskazujaca, ze nalezy korzystac z nowego sterownika terminala. Niniejsza implementacja nie umozliwia takiego wyboru. Wciaz jest dozwolone podawanie opcji -e, -i i -k bez argumentow, choc mocno jest zalecane, by zmienic to na jawne podawanie znaku. Od 4.4BSD, wywolywanie tset jako reset nie implikuje juz opcji -Q. Poza tym, interakcja miedzy opcja - a argumentem terminal, pochodzaca z historycznych implementacji tset zostala usunieta. We wczesniejszych implementacjach nie bylo opcji -c i -w. W 4.4BSD wystepowala jednak inna funkcja zmiany wymiarow okna. o W 4.4BSD, jesli tset nie byl w stanie uzyskac rozmiaru okna od systemu operacyjnego, w celu ustawienia rozmiaru okna, tset uzywal rozmiaru okna z opisu termcap. o W ncurses, tset uzyskuje rozmiar okna za pomoca setupterm(3X), ktore moze pochodzic z systemu operacyjnego; ze zmiennych srodowiskowych LINES i COLUMNS; albo z opisu terminala. Uzyskiwanie rozmiaru okna z opisu typu terminala jest powszechne w obu implementacjach, lecz jest uwazane za przestarzale. Ma praktyczne zastosowanie jedynie w terminalach sprzetowych. Rozmiar okna pozostanie niezainicjowany zwykle jedynie, gdy wystapil problem w uzyskiwaniu tej wartosci od systemu operacyjnego (i wciaz zawiedzie setupterm). Zmienne srodowiskowe LINES (wiersze) i COLUMNS (kolumny) moga byc zatem przydatne przy obchodzeniu problemow z rozmiarem okna, jednak maja te wade, ze jesli zmieni sie rozmiar okna, wartosci te musza byc przeliczone ponownie i podane na nowo. Pomaga w tym program resize(1), dostarczany razem z xterm(1). HISTORIA Polecenie reset napisane przez Kurta Shoensa pojawilo sie w 1BSD (marzec 1978 r.). Ustawia ono znaki erase i kill odpowiednio na ^H (backspace) i @. Mark Horton dokonal usprawnien reset w 3BSD (pazdziernik 1979 r.), dodajac znaki intr, quit, start/stop i eof oraz zmieniajac program w ten sposob, aby unikac modyfikacji ustawien uzytkownika. Ta wersja reset nie korzystala z termcap. Eric Allman napisal oddzielne polecenie tset dla 1BSD, korzystajac z poprzednika termcap, zwanego ttycap. Komentarza Allmana w kodzie zrodlowym wskazuja, ze rozpoczal nad tym prace w pazdzierniku 1977 r., kontynuujac ja przez kolejne kilka lat. Pod koniec roku 1979, dokonal migracji na termcap, pojawila sie tez obsluga zmiennej TERMCAP. Kolejne komentarze wskazuja, ze tset zostal zmodyfikowany we wrzesniu 1980 r. w celu uzywania logiki skopiowanej z programu ,,reset" z 3BSD, gdy byl on wywolywany jako reset. Ta wersja pojawila sie w 4.1cBSD, pod koniec 1982 r. Inni deweloperzy, tacy jak Keith Bostic i Jim Bloom kontynuowali modyfikowanie tset do momentu wydania 4.4BSD w 1993 r. Implementacja ncurses zostala czesciowo zaadaptowana ze zrodel 4.4BSD do interfejsu programistycznego terminfo przez Erica S. Raymonda . ZOBACZ TAKZE csh(1), sh(1), stty(1), curs_terminfo(3X), tty(4), terminfo(5), ttys(5), environ(7) TLUMACZENIE Tlumaczenie niniejszej strony podrecznika: Przemek Borys , Wojtek Kotwica i Michal Kulach Niniejsze tlumaczenie jest wolna dokumentacja. Blizsze informacje o warunkach licencji mozna uzyskac zapoznajac sie z GNU General Public License w wersji 3 lub nowszej. Nie przyjmuje sie ZADNEJ ODPOWIEDZIALNOSCI. Bledy w tlumaczeniu strony podrecznika prosimy zglaszac na adres listy dyskusyjnej . ncurses 6.6 18 stycznia 2025 r. tset(1)