Programy konsolowe zwykle używają przekleństw lub jednego z ich następców¹ do tworzenia różnego rodzaju tekstowych interfejsów użytkownika, o których mówisz.
Te biblioteki używają jednej z dwóch baz danych, zwanych termcap
i terminfo
.². Te bazy danych zawierają mapy, które informują bibliotekę, jakie kody wysłać, aby uzyskać pożądane działania przy dużej liczbie różnych typów terminali. Zdecydowana większość typów terminali, które znajdziesz w tych bazach danych, nie przetrwała dni prawdziwych terminali , a zatem mają teraz jedynie znaczenie historyczne.
Terminale ANSI
Nowoczesne emulatory terminali Unix³ wykorzystują protokół ANSI X3.64 lub jeden z jego późniejszych wariantów:
ANSI X3.64 : Standard kontrolowania „szklanych terminali” - w przeciwieństwie do teletypów - opiera się na specjalnych sekwencjach znaków, które interpretuje terminal zdalny. Na przykład, jeśli pole Unix chce powiedzieć terminalowi zgodnemu z ANSI X3.64, aby przesunął kursor do lewego górnego rogu ekranu, wysyła znakiESC
[
1
;
1
H
. Pierwsze dwa znaki mówią terminalowi, że oczekuje sekwencji kontrolnej, 1 to rząd i kolumna, aH
polecenie oznacza „przesuń kursor”.
Ciekawostki: wiele PC BBS również używało kodów ANSI. ( Właściwie to nadal .)
DEC VT100 : Pierwszym naprawdę popularnym terminalem szklanym kompatybilnym z ANSI był VT100 firmy Digital Equipment Corporation. Sprawdzając standard de jure firmy ANSI na rynku, ustanowił on de facto standard, który jest nadal ważny.
Czasami jest to nazywane protokołem VT102, który jest późniejszą, a przez to bardziej popularną, wersją VT100 plus wszystkie wbudowane opcje rozszerzenia.
Protokoły końcowe DEC są seriami kompatybilnymi wstecz, począwszy od pierwszego modelu zgodnego z ANSI, wprowadzonego w 1978 roku (VT100), aż po modele serii VT500 wyprodukowane przez Boundless Technologies po zakupie terminalu od DEC w 1995 r. (Boundless jest obecnie nie działa, ale ich terminale wciąż pojawiają się na używanym rynku).
xterm : Rodzaj amalgamatu ANSI i VT-niezależnie od standardów. Ilekroć używasz emulatora terminala GUIxterm
lub jednego z jego pochodnych, zwykle używasz równieżxterm
protokołu terminala, zazwyczaj bardziej nowoczesnegoxterm-color
lubxterm-color256
wariantów.
Linux : konsola Linux używa również rozszerzonego wariantu protokołu terminala ANSI, w tym samym duchu coxterm
protokoły. Większość jego rozszerzeń ma związek z różnicami między komputerem a szklanym terminalem. Na przykład klawiatura IBM ma niektóre klawisze, których nie ma w DEC VT. (I wzajemnie.)
Niektóre systemy uniksowe mają również własny protokół terminala konsoli. Na przykład scoansi
istnieje wariant ANSI X3.64 dla Uniksów SCO.
Typowy program emulujący terminal jest czymś w rodzaju kundla i nie emuluje dokładnie żadnego pojedynczego modelu terminala. Może obsługiwać 96% wszystkich sekwencji ucieczki DEC VT w górę przez VT320, ale obsługuje także rozszerzenia takie jak kolor ANSI (funkcja VT525) oraz dowolną liczbę wierszy i kolumn. 4% kodów, których nie rozumie, może nie zostać pominiętych, jeśli twoje programy nie potrzebują tych funkcji, nawet jeśli powiedziałeś curses
(lub cokolwiek), że chcesz, aby programy korzystały z protokołu VT320. Taki program może reklamować się jako zgodny z VT320, a nawet, ściśle mówiąc, nie jest
Terminale inne niż ANSI
Istnieje jeszcze kilka innych godnych uwagi standardów, z którymi się czasem zdarza:
Wyse : Jeden z pierwszych niezależnych producentów szklanych terminali, Wyse zaczął produkować terminale na początku lat osiemdziesiątych, zanim obliczenia stacji roboczych zaczęły zastępować minikomputery. Chociaż terminale Wyse były w stanie emulować VT100 i inne popularne protokoły terminali, miały także własne kody natywne.
IBM 3270 : Chociaż nie jest to typ terminala „uniksowego”, potrzeba połączenia systemów uniksowych z komputerami mainframe IBM doprowadziła do stworzenia programów emulujących terminal serii IBM 3270, które wciąż można znaleźć w użyciu. Emulatory dla późniejszychterminali serii IBM 5250 są również dość powszechne, najczęściej używane obecnie do łączenia zminikomputerami AS / 400 i System i .
Tektronix 4014 : Zanim komputery PC i stacje robocze w dużej mierze przesunęły szklane terminale, a tym samym uczyniły grafikę bitmapową standardową funkcją, istniały drogie terminale graficzne, które rysowały grafikę na ekranie w odpowiedzi na polecenia tekstowe podobne do sekwencji ucieczki opisanych powyżej. Prawdopodobnie najpopularniejszą z nich była seria Tektronix 4010.
Używanie ich było całkiem przyjemne. Możesz napisać program, który narysował grafikę, ale zamiast po prostu uruchomić go w celu rysowania na lokalnym terminalu, możesz przekierować jego wyjście do pliku:
$ ./my4014program > my-neat-graphic
Następnie możesz wysłać ten plik do kogoś innego, a on może cat
to zrobić na terminalu Tek, aby zobaczyć grafikę bez posiadania programu. Częścią uroku było to, jak powolnie rysowały się te terminale, abyś mógł obserwować narastanie grafiki przez kilka sekund.
Dzisiejsza praca z emulacją terminala Unix
Możesz dowiedzieć się, jakiego standardu terminala chcesz curses
używać w bibliotekach, patrząc na TERM
zmienną środowiskową:
$ echo $TERM
xterm-color
Kiedy przechodzisz ssh
do innego systemu, TERM
zmienna jest przenoszona, więc zdalna skrzynka uniksowa wie, jak komunikować się z lokalnym terminalem.
Ponieważ tak wiele z tych protokołów to warianty ANSI X3.64 i ponieważ wszechobecne standardy kodowania znaków ASCII i UTF-8 zajmują się tak wiele innymi, niepoprawna TERM
zmienna nie jest zazwyczaj katastrofalna. Rzeczy, które zwykle się psują, to rozszerzone klawisze, takie jak Home i Page Up, kombinacje klawiszy Alt-cokolwiek i funkcje wyświetlania typograficznego, takie jak kolor, pogrubienie itp.
Przypisy:
Najczęściej ncurses .
curses
Interfejs API ma również bezpośrednich konkurentów , takich jak S-Lang .
AT&T ogłosił terminfo
jako zamiennik termcap
bazy danych BSD i w dużej mierze udało się ją zastąpić, ale wciąż istnieją programy, które nadal używają starej termcap
bazy danych. Jest to jedna z wielu różnic między BSD a AT&T, które wciąż można znaleźć w nowoczesnych systemach.
Moje pudełko macOS nie ma /etc/termcap
, ale ma /usr/share/terminfo
, podczas gdy standardowa instalacja FreeBSD jest odwrotna, chociaż te dwa systemy operacyjne są często dość podobne na poziomie wiersza poleceń.
minicom
, xterm
, mintty
, GNOME Terminal , Terminal.app , etc.
Prawidłowo napisane programy uniksowe nie emitują bezpośrednio tych sekwencji specjalnych . Zamiast tego używają jednej z wyżej wymienionych bibliotek, mówiąc jej, aby „przesunęła kursor do pozycji (1,1)” lub cokolwiek, a biblioteka emituje niezbędne kody sterujące terminala w oparciu o TERM
ustawienia zmiennej środowiskowej. Dzięki temu program działa poprawnie bez względu na typ terminala, na którym go uruchomisz.
Stare terminale tekstowe miały wiele dziwnych funkcji, które nie były zbyt często używane przez programy, więc wiele popularnych programów emulujących terminale po prostu nie implementuje tych funkcji. Typowymi pominięciami są obsługa trybów tekstowych Sixel i podwójnej szerokości / podwójnej wysokości.
Opiekun xterm
napisał program vttest
do testowania emulatorów terminali VT, takich jak xterm
. Możesz uruchomić go z innymi emulatorami terminali, aby dowiedzieć się, które funkcje nie obsługują.