Ctrl- Qjest rzeczywiście odpowiedzią. Pomyślałem, że wrzucę krótką historię tego, która jest zbyt długa, aby zmieścić się w marginesie poprawnej odpowiedzi ak2 .
W średniowieczu terminal był dużym urządzeniem, które podłączało się do zdalnego urządzenia (pierwotnie innego terminala, ponieważ telegrafy były o wiele łatwiejsze do nauczenia się obsługi niż klucz telegraficzny) za pomocą długiego drutu lub linii telefonicznych z modemami. Do czasu, kiedy Unix się rozwijał, kod ASCII był już dobrze ugruntowany (chociaż konkurencyjny kod EBCDIC od IBM wciąż był siłą, z którą należy się liczyć).
Najwcześniejsze terminale prowadziły drukowany zapis każdej otrzymanej postaci. Tak długo, jak znaki przybywają nie szybciej niż głowica drukująca może je wpisać. Ale gdy tylko możliwe były terminale oparte na CRT, pojawił się problem, że tylko około 25 linii mieści się w CRT, a 25 linii 80 znaków reprezentuje wystarczającą ilość pamięci RAM, że nikt nie myślał poważnie o zapewnieniu większej ilości pamięci RAM dla znaków, które przewinęły się z góry ekran.
Potrzebna była więc pewna konwencja, aby zasygnalizować, że koniec wysyłający powinien zatrzymać się, aby czytelnik mógł nadrobić zaległości.
7-bitowy kod ASCII ma 33 punkty kodowe przeznaczone na znaki kontrolne (od 0 do 31 i 127). Niektóre z nich miały naprawdę dobrze określone cele, takie jak NUL
(puste lidera Taśma papierowa do gwintowania, luk i spawów), DEL
( „przekreślonego” znaki na taśmie papierowej wskazane przez wbicie wszystkich siedmiu otworów), BEL
(ding!) CR
, LF
Oraz TAB
. Jednak cztery zostały wyraźnie zdefiniowane dla sterowania urządzeniem terminala sam ( DC1
dla DC4
aka Ctrl + Q Ctrl-R, Ctrl + S i CTRL + T).
Moje przypuszczenie jest takie, że jakiś inżynier pomyślał, że (jak idą mnemoniki), „S” dla „Stop” i „Q” dla „Kontynuuj” nie były takie złe i przypisane DC3
do oznaczenia „proszę przestać wysyłać” i DC1
oznaczenia „ok , kontynuuj wysyłanie teraz ”.
Nawet ta konwencja była już dobrze ustalona, zanim Unix opuszczał gniazdo w Bell Labs, aby wyjść na świat.
Konwencja znana jest jako oprogramowanie do kontroli przepływu i jest niezwykle powszechna w rzeczywistych urządzeniach szeregowych. Nie jest łatwo wdrożyć poprawnie, ponieważ uniemożliwia użycie któregokolwiek z tych znaków w jakimkolwiek innym celu w kanale komunikacyjnym, a sygnał Stop musi być obsługiwany przed wszystkimi oczekującymi odebranymi znakami, aby uniknąć wysyłania więcej niż koniec odbierający może uchwyt.
Jeśli jest to praktyczne, zdecydowanie zaleca się stosowanie dodatkowych sygnałów poza pasmem z szeregowego strumienia danych do kontroli przepływu. W przypadku połączeń bezpośrednio okablowanych, na które można pozwolić sobie na dodatkowe przewody sygnałowe, znajdziesz używany sprzętowy uścisk dłoni, który uwalnia te znaki do innych zastosowań.
Oczywiście dzisiejsze okno terminala nie korzysta z rzeczywistego fizycznego portu szeregowego, ma paski przewijania i tak naprawdę wcale nie wymaga uzgadniania oprogramowania. Ale konwencja trwa.
Przypominam sobie twierdzenie, że Richard Stallman otrzymał skargi dotyczące mapowania Ctrl + S na przyrostowe wyszukiwanie w pierwszych wydaniach emacsa i że był raczej niesympatyczny dla każdego użytkownika, który musiał polegać na 7-bitowym, sterowanym przepływem oprogramowania połączeniu.
vim
i nacisnąłem Ctrl-S, aby zapisać zmiany. Uh-ohXD