O Mac OS X terminal.app algumas vezes começa a interpretar novas linhas de maneira diferente! Isso pode ser corrigido?

1

Algumas vezes, o Mac OS X Terminal acaba em um estado estranho, em que as novas linhas não são interpretadas como normalmente são. É como se estivessem fazendo a parte de alimentação de linha, mas não o retorno de carro. Por exemplo, eu normalmente vejo algo assim:

% git status
# On branch master
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#

Mas quando o Terminal acaba nesse modo estranho, eu o recebo:

% git status
# On branch master
                  # Untracked files:
                                    #   (use "git add <file>..." to include in what will be committed)
                                                                                                      #

Eu posso criar uma nova janela do Terminal para corrigir isso, mas isso é um pouco chato. Eu gostaria de manter a mesma janela ativa, se possível, caso eu precise de algo no buffer de rolagem. Existe algo que eu possa fazer para consertar as coisas quando isso dá errado?

(Eu não sei se é relevante, mas eu normalmente recebo isso ao sair do emacs. De vez em quando, faço algo errado, e seleciono outro comando por acidente em vez de C-x C-c . Meus dedos cancelam antes de eu até percebi o que está acontecendo, então eu não sei qual comando pode ser, mas uma vez que o emacs foi embora, o terminal está neste novo modo engraçado.)

    
por brone 13.10.2010 / 17:46

2 respostas

3

Quando esse problema aparecer novamente, emita o seguinte comando no terminal:

reset

Isso deve redefinir seu terminal para os padrões e resolver seu problema.

    
por 13.10.2010 / 17:49
2

Quando os primeiros terminais (e impressoras) recebem um caractere LF (ASCII 10), eles avançam o cursor (cabeça de impressão) para a próxima linha sem movê-lo horizontalmente. Assim, uma sequência de caracteres / palavras separados por apenas LFs formaria o que parece ser uma escada. Isso é o que você está vendo.

Quando um programa queria passar para o início da próxima linha, eles definiam CR (ASCII 13) e LF para o terminal. CR move o cursor para o início da linha atual e o LF avança para a próxima linha.

O driver tty em sistemas Unix possui um pós-processamento de saída opcional que geralmente é habilitado para converter um LF de saída em uma combinação de CR e LF.

O problema que você está vendo é que o tty que o seu emulador de terminal está usando teve essa parte do pós-processamento de saída desabilitada. Você pode re-processar o pós-processamento de saída e a conversão LF → CR LF com este comando:

stty opost onlcr

Este tipo de processamento de saída é freqüentemente desabilitado em programas baseados em terminal de “tela inteira”, de forma que eles tenham melhor controle sobre o cursor. Assim, se um programa desse tipo falhar (ou for eliminado) de tal forma que não seja possível restaurar as configurações do tty, é provável que você acabe no “modo de etapa da escada”. Como existem outras configurações tty que podem ser afetadas após uma falha, você pode precisar de algo um pouco mais completo para limpar os efeitos. Você pode redefinir as configurações atuais do tty para padrões razoáveis com o seguinte comando:

stty sane

O comando reset faz muito do que o stty sane faz, além de enviar várias seqüências de controle de reinicialização / inicialização para o emulador de terminal.

    
por 13.10.2010 / 19:37