it-swarm-eu.dev

Jak rozmrazit po náhodném stisknutí Ctrl-S v terminálu?

Je to situace, která se mi stala docela často: poté, co jsem stiskl (s jiným záměrem) Ctrl-S v terminálu je interakce (vstup nebo výstup) s ním zmrazená. Pravděpodobně jde o jakýsi „zámek rolování“ nebo cokoli jiného.

Jak poté uvolním terminál?

(Tentokrát jsem pracoval s apt-Shell uvnitř bash uvnitř urxvt-- nevím, kdo z nich je zodpovědný za speciální zacházení s Ctrl-S: Prohledával jsem historii příkazů zpět C-r, jako obvykle pro readline, ale pak jsem se chtěl vrátit „zpět“ dopředu historií s obvyklým - alespoň v Emacsu -C-s ( 1 , 2 , ), ale to způsobilo, že terminál zamrzl. V terminálu stále funguje rolování/stránkování, aby se zobrazily minulé věci, ale nedochází k žádné interakci s procesy.)

Ctrl-Q

Chcete-li to úplně zakázat, držte se stty -ixon ve spouštěcím skriptu. Chcete-li povolit, aby kterýkoli klíč mohl znovu proudit, použijte stty ixany.

ps: Není to ani terminál, ani Shell, ale ovladač terminálu OS.

924
ak2

Ctrl-Q je opravdu odpověď. Myslel jsem, že bych to hodil do malé historie, která je příliš dlouhá, aby se vešla na okraje správná odpověď ak2 .

V temných dobách byl terminál velkým kusem zařízení, které bylo připojeno ke vzdálenému zařízení (původně dalšímu terminálu, protože teletypy se naučily ovládat mnohem snadněji než telegrafní klíč) přes dlouhý drát nebo přes telefonní linky s modemy. V době, kdy se Unix vyvíjel, byl kód ASCII=) již dobře zaveden (ačkoli konkurenční kód EBCDIC od IBM byl stále silou, se kterou je třeba počítat).

Nejdříve terminály vedly tištěný záznam každé přijaté postavy. Dokud postavy dorazily, ne rychlejší, než by je tisková hlava mohla napsat. Ale jakmile byly možné terminály založené na CRT, objevil se problém, že na CRT se vejde pouze asi 25 řádků a 25 řádků po 80 znakech představovalo dost RAM, že nikdo o vážném poskytnutí více = RAM pro znaky, které se posunuly mimo horní část obrazovky.

Byla tedy potřeba nějaká konvence, která by signalizovala, že vysílací konec by se měl pozastavit, aby čtenář dohonil.

7bitový kód ASCII kód má 33 kódových bodů věnovaných kontrolním znakům (0 až 31 a 127). Některé z nich měly opravdu dobře zavedené účely, například NUL (prázdné) vodítko papírové pásky pro řezání závitů, mezery a spojování), DEL ("přeškrtnuté" znaky na papírové páse označené děrováním všech sedmi otvorů), BEL (Ding!), CR, LF a TAB. Čtyři však byly explicitně definovány pro ovládání samotného koncového zařízení (DC1 to DC4 aka Ctrl + Q, Ctrl + R, Ctrl + S a Ctrl + T).

Můj nejlepší odhad je, že někteří inženýři si mysleli, že (jak mnemonici jdou), "S" pro "Stop" a "Q" pro "Pokračovat" nebyly příliš špatné a přiřazeny DC3 znamená „prosím, zastavte odesílání“ a DC1 znamenat „ok, pokračovat v odesílání nyní“.

I ta úmluva byla dobře zavedena v době, kdy Unix opouštěl hnízdo v Bell Labs, aby vyšel na svět.

Tato konvence je známá jako řízení toku softwaru a je ve skutečných sériových zařízeních extrémně běžná. Není snadné implementovat správně, protože brání použití některého z těchto znaků pro jakýkoli jiný účel v komunikačním kanálu a signál Stop musí být zpracován před čekajícími přijatými znaky, aby se zabránilo odesílání více než přijímací konec může Rukojeť.

Pokud je to praktické, je použití dalších signálů mimo pásmo ze sériového datového proudu pro řízení toku velmi výhodné. Na přímých kabelových připojeních, která si mohou dovolit další signální dráty, najdete hardwarové handshake, které tyto znaky uvolňuje pro další použití.

Dnešní terminálové okno samozřejmě nepoužívá skutečný fyzický sériový port, má posuvníky a opravdu nepotřebuje softwarové handshaking. Ale úmluva přetrvává.

Vzpomínám si na tvrzení, že Richard Stallman obdržel stížnosti na jeho mapování Ctrl + S na postupné vyhledávání v prvních vydáních emaců, a že byl poněkud nesympatický pro každého uživatele, který musel záviset na 7bitovém, softwarově řízeném připojení.

412
RBerteig