Jaka jest historia klawiszy Shift + Arrow w terminalu?

21

Zastanawiam się dlaczego Shift+ Arrow Keywynik w jednym z A, B, Club Dliter.

Dlaczego nie inne litery? Dlaczego w ogóle jakiś list?

Dan
źródło
Intrygujące: D Mój zakład? Ma związek z grami tekstowymi: D
Rinzwind
2
Tylko spostrzeżenie: w tty Shift + Arrow Keysnic nie robi.
Radu Rădeanu
@Rinzwind: :)))
Radu Rădeanu
1
Zadałem to pytanie na Unix / Linux Stack Exchange. Istnieje kilka przydatnych odpowiedzi. Może chcesz na nie spojrzeć. unix.stackexchange.com/questions/73669/…
yfklon 30.04.2013

Odpowiedzi:

27

Emulatory terminali, takich jak gnome-terminal( „Terminal” w Ubuntu), ale także xtermi urxvtsą nazywane „emulatory”, ponieważ odtworzyć zachowanie starszych terminali, które były tylko wyświetlacz komputera. Takie terminale komunikowały się z komputerem za pomocą protokołu tekstowego i początkowo zostały zaprojektowane tak, aby odbierać tylko tekst. Szybko potrzebna była większa kontrola: jak usunąć linię? Używasz kolorów? Lub zmienić pozycję kursora?

Terminal VT-100 Źródło: The Art of Unix Usability - Interfejsy wiersza poleceń

Sekwencje specjalne zostały zaprojektowane dla każdego terminalu, aby robić takie rzeczy. Są one nazwane ucieczka ponieważ zaczynają się kodem ASCII ucieczki: 33. Nie ma sposobu, aby wydrukować taki znak bezpośrednio, co sprawia, że ​​dobrze pasuje do takich sekwencji. Kiedy nadal chcemy wyświetlać ten znak, ^[[jest używany i tego właśnie użyję w moich objaśnieniach.

Kiedy terminal otrzymał ^[[A, nie oznaczało to „print ^ [[A”, ale „użytkownik nacisnął klawisz strzałki w górę”). „A” tutaj jest całkowicie arbitralne: to akurat list, na który wszyscy się zgodzili, ponieważ właśnie tego używał DEC VT-52 i jego następca popularny terminal VT-100.

DEC VT-52 Maintenance Manuel 1976

Źródło: DEC VT-52 Maintenance Manual 1976

Jest to nadal sposób, w jaki dziś działają emulatory terminali: w zależności od $TERMzmiennej nazwa bazy danych terminfoodpowiada za określenie , jakie kody należy wysłać do powłoki (bash, sh, zsh ...), która jest następnie odpowiedzialna za ich zrozumienie i zareagowanie do nich.

Teraz kod Shift+ upjest następujący ^[[1;2A: emulator terminala wysyła ten kod do powłoki, która próbuje interpretować, ^[[1;2ale niczego nie wyświetla, ponieważ nie wie o tej sekwencji ucieczki. Ale Ajest pozostawiony i wyświetlony.

Jennifer Wilson
źródło
5
Wow, ciekawe. Teraz wszystkie ^[[Amają sens, kiedy klikam klawisze strzałek, gdy proces jest uruchomiony na terminalu.
Dan
4
Możesz nacisnąć CTRL-v tuż przed wciśnięciem SHIFT-UpArrow, aby „zobaczyć” sekwencje specjalne w surowej postaci. O ile nie zmieniłeś domyślnych, ESC powinien pojawić się na ekranie terminala jako ^ [
arielf 26.04.13
@arielf Możesz także uruchomić, cat >/dev/nulla następnie wpisać i nacisnąć Ctrl + C (lub Enter, a następnie Ctrl + D) po zakończeniu.
wjandrea