Terminale to urządzenia sprzętowe składające się z klawiatury i urządzenia wyjściowego (początkowo drukarka drukowana, później monitor CRT). Duży komputer może mieć do niego podłączone kilka odległych terminali. Każdy terminal miałby protokół umożliwiający wydajną komunikację z komputerem, w przypadku terminali opartych na CRT obejmuje to specjalne "sekwencje kontrolne" w celu zmiany pozycji kursora, usunięcia części bieżącej linii/ekranu, przełączenia na alternatywny tryb pełnoekranowy,. ..
Emulator terminala to aplikacja emulująca jeden z tych starszych terminali. Pozwala wykonywać funkcje takie jak pozycjonowanie kursora, ustawianie kolorów pierwszego planu i tła, ... Emulatory terminalowe próbują emulować określony protokół terminala, ale każdy ma swój własny zestaw dziwactw i odchyleń.
Systemy uniksowe mają bazy danych opisujące terminale i emulatory terminali, więc aplikacje są pobierane z konkretnego używanego terminala (lub emulatora terminala). Starsza baza danych to termcap(5)
, a terminfo(5)
jest nowszą bazą danych. Te bazy danych umożliwiają aplikacjom wyszukiwanie informacji o możliwościach terminalu w użyciu. Możliwości mogą być wartościami logicznymi, numerycznymi, a nawet łańcuchowymi, np .: jeśli określony typ terminala ma/obsługuje klawisz F12, będzie miał zdolność "key_f12" (długa nazwa terminfo), "kf12" (krótka nazwa terminfo), "F2" (nazwa termcap) opisująca łańcuch, który tworzy klucz. Wypróbuj za pomocą: tput kf12 | od -tx1
.
Od programowania bezpośrednio z możliwości może być uciążliwe, aplikacje zazwyczaj korzystają z biblioteki wyższego poziomu jak przekleństw/ncurses, slang, itp ...
Istnieje specjalna zmienna nazywa TERM
aplikacji, która mówi, jakiego rodzaju terminala oni rozmawiają z. Ta zmienna powinna być ustawiona dokładnie na typ terminala, jeśli istnieje w bazie danych, dla uzyskania najlepszych wyników. To właśnie mówi aplikacji, które dokładny protokół i odchylenia protokołu ma rozumieć terminal. Zmiana zmiennej TERM
powoduje zmianę typu terminala, zmienia tylko typ terminala, z którym aplikacja myśli, że rozmawia.
Wszystko to powiedziawszy, Ctrl+arrow
jest zachowaniem xterm (zależnym od opcji konfiguracji), którego nie ma w ogóle w bazach terminfo/termcap, więc większość aplikacji nie będzie o tym wiedziała. Tak czy inaczej, albo twój emulator terminala (w twoim przypadku pyte
) obsługuje go, albo nie.
Zakładając, że główne zastosowanie jest bash
lub jakaś inna aplikacja, która korzysta z biblioteki readline
, można uciec z wykorzystaniem readline za backward-word
(Meta-b/Alt-b/ESC b domyślnie konfigurowane w inputrc
) zamiast.
Typowa domyślna konfiguracja readline (bash używa readline) ma "Alt-B" dla ** wstecznego słowa **. terminfo nie ma nawet wpisu dla 'Ctrl-←'. – ninjalj
Ale działa na konsoli xterm ... Czy mógłbyś powiedzieć więcej o terminfo, najlepiej w odpowiedzi? – johndodo
Konsola systemu Linux nie jest nawet * blisko * do vt220. Jest to podzbiór (mniej zdolnego) vt100. Każda odpowiedź na to pytanie zawiera co najmniej jeden błąd. –