É uma situação que já aconteceu muitas vezes comigo: depois que eu pressiono (com uma intenção diferente) Ctrl-Sem um terminal, a interação (entrada ou saída) com ele é congelada. Provavelmente é uma espécie de "bloqueio de rolagem" ou o que quer.
Como descongelar o terminal depois disso?
(Desta vez, tenho vindo a trabalhar com apt-shell
dentro de um bash
interior urxvt
--não certeza de qual deles é responsável pelo manuseio especial de Ctrl-S: eu estava pesquisando a história de comandos para trás com C-r, como de costume para readline, mas então eu queria ir "de volta "avança pela história com o habitual - pelo menos no Emacs-- C-s( 1 , 2 , 3 ), mas isso causou o congelamento do terminal. Bem, rolagem / paginação para ver as coisas passadas ainda funciona no terminal, mas nenhuma interação com os processos executados lá.)
vim
e pressionei Ctrl-S para salvar minhas edições. Uh-ohXD
Respostas:
Ctrl-Q
Para desabilitar isso completamente, insira
stty -ixon
um script de inicialização. Para permitir que qualquer tecla faça com que as coisas fluam novamente, usestty ixany
.ps: Não é o terminal nem o shell que faz isso, mas o driver do terminal do sistema operacional.
fonte
Ctrl-C
; também funciona? (E em outro lugar , eles sugeriramCtrl-Q
, assim como você.)stty
.)Ctrl-S
e depoisCtrl-Q
retomar.Ctrl- Qé de fato a resposta. Eu pensei em relatar um pouco dessa história que é muito longa para caber nas margens da resposta correta do ak2 .
Na era das trevas, um terminal era um grande equipamento conectado a um dispositivo remoto (originalmente outro terminal porque os teletipos eram muito mais fáceis de aprender a operar do que uma tecla telegráfica) por um fio longo ou por linhas telefônicas com modems. No momento em que o Unix estava desenvolvendo, o código ASCII já estava bem estabelecido (embora o código EBCDIC concorrente da IBM ainda fosse uma força a ser reconhecida).
Os primeiros terminais mantinham um registro impresso de todos os caracteres recebidos. Contanto que os caracteres não cheguem mais rápido do que a cabeça de impressão possa digitá-los, pelo menos. Mas assim que os terminais baseados em CRT foram possíveis, surgiu o problema de que apenas cerca de 25 linhas cabiam no CRT e 25 linhas de 80 caracteres representavam RAM suficiente para que ninguém pensasse seriamente em fornecer mais RAM para caracteres que rolavam do topo da tela. a tela.
Por isso, foi necessária alguma convenção para sinalizar que o final do envio deveria fazer uma pausa para permitir que o leitor o alcançasse.
O código ASCII de 7 bits possui 33 pontos de código dedicados ao controle de caracteres (0 a 31 e 127). Alguns dos que tinham propósitos muito bem estabelecidas, tais como
NUL
(líder fita de papel em branco para threading, lacunas, e emendas),DEL
( "riscado" personagens na fita de papel indicados por socos todos os sete buracos),BEL
(ding!),CR
,LF
, ETAB
. Mas quatro foram definidos explicitamente para controlar o próprio dispositivo terminal (DC1
aDC4
aka Ctrl + Q, Ctrl + R, S Ctrl + e Ctrl + T).Meu melhor palpite é que algum engenheiro pensou que (conforme a mnemônica), "S" para "Parar" e "Q" para "Continuar" não fossem muito ruins e designados
DC3
para significar "por favor, pare de enviar" eDC1
signifique "ok" , continue enviando agora ".Até essa convenção já estava bem estabelecida quando o Unix estava deixando o ninho no Bell Labs para sair para o mundo.
A convenção é conhecida como controle de fluxo de software e é extremamente comum em dispositivos seriais reais. Não é fácil de implementar corretamente, pois impede o uso de qualquer um desses caracteres para qualquer outra finalidade no canal de comunicação, e o sinal de parada deve ser manipulado antes de qualquer caractere recebido pendente para evitar o envio de mais do que a extremidade receptora pode. lidar com.
Se possível, é amplamente preferido o uso de sinais adicionais fora da banda do fluxo de dados seriais para controle de fluxo. Nas conexões com fio diretamente que podem pagar os fios de sinal adicionais, você encontrará o handshake de hardware em uso, que libera esses caracteres para outros usos.
Obviamente, a janela do terminal de hoje não está usando uma porta serial física real, possui barras de rolagem e não precisa realmente de handshake de software. Mas a convenção persiste.
Lembro-me da alegação de que Richard Stallman recebeu reclamações sobre o mapeamento de Ctrl + S para pesquisa incremental nos primeiros lançamentos do emacs, e que ele era pouco simpático a qualquer usuário que tivesse que depender de uma conexão de fluxo de software de 7 bits.
fonte