Zastanawiam się dlaczego Shift+ Arrow Keywynik w jednym z A, B, Club Dliter.
Dlaczego nie inne litery? Dlaczego w ogóle jakiś list?
Shift + Arrow Keysnic nie robi.
Zastanawiam się dlaczego Shift+ Arrow Keywynik w jednym z A, B, Club Dliter.
Dlaczego nie inne litery? Dlaczego w ogóle jakiś list?
Shift + Arrow Keysnic nie robi.
Odpowiedzi:
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?
Ź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.

Ź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.
^[[Amają sens, kiedy klikam klawisze strzałek, gdy proces jest uruchomiony na terminalu.
cat >/dev/nulla następnie wpisać i nacisnąć Ctrl + C (lub Enter, a następnie Ctrl + D) po zakończeniu.