barra de status do tmux corrompida após catting um arquivo binário, como redefinir?

93

Eu acidentalmente estralho meu terminal tmux após cat ing um arquivo binário. Agora meu tmux está confuso. Desanexar e voltar a ligar não ajuda, nem faz um redesenho (C-b r). A execução de reset apenas redesenha o painel ativo, não o restante. A execução de ssty sane dentro ou fora de tmux também não ajuda.

Dentrodecadapainel,tenhoumfeedbacknormaldoqueeudigito(achamadainicialderesetimediatamentedepoisqueoterminalficoudesordenadoresolveuisso),masnãoconsigoconsertarabarradestatus.

Emgnome-terminal,cadaatualizaçãonabarradestatuslevaàbarradestatusparacrescer(vejaacapturadetelaacima).Porexemplo,issoacontecequandoeuexecutoumnovoaplicativo,quandoalternoospainéisouquandoredimensionoumpainel.Forçandoumredesenho(PorC-br,executandoresetouatravésdomenugnome-terminal)encolheabarradestatusparaumaúnicalinha,maselacontinuacorrompida.

Emxterm,abarradestatuspermanecedentrodeumalinha,maspermanececorrompidacomonafoto.

Estouusandootmux1.5.

  • Comocorrijomeutmux-terminal?

Este relatório de erros de 2008 parece descrever o mesmo problema, mas foi marcado como fixo. Eu não sei em qual versão foi corrigida, mas o tmux 1.5 deve incluir uma correção de 2008.

    
por gerrit 04.10.2012 / 14:23

8 respostas

82

Tente renomear a janela 4

  • Muda para a janela 4: Controle + b 4
  • Renomear janela: Controle + b , Controle + u myNewname

(Isso é uma vírgula no meio)

Ou: Controle + b :rename-window myNewname

    
por 04.10.2012 / 15:39
53

Você precisa de duas sequências de comando para limpar a bagunça:

Primeiro, execute isso na janela ilegível (isso funciona mesmo quando você está em ssh ):

stty sane; printf '3k%s3\3]2;%stmux7' "'basename "$SHELL"'" "'uname -n'"; tput reset; tmux refresh

Em seguida, execute isso no computador que executa tmux (funciona dentro e fora de tmux list-windows -a | while IFS=: read -r a b c; do tmux set-window-option -t "$a:$b" automatic-rename on; done ):

The following command affects all tmux instances, which may change the left status of more than the current window. If you do not need that feature, leave it away.

tmux

Explicado em detalhes

Isso foi montado para abordar todos os bits encontrados em outras respostas e comentários. Atualmente parece apenas um pouco menor com o segundo comando. (Veja no "bit em falta" abaixo).

Para entender como isso funciona, vamos primeiro eliminar a linha de status de tty e reset . Depois, corrigimos novamente, usando um método que deve estar sempre disponível (ao contrário do comando tmux ).

Como tornar um terminal UTF-8 (assume stty -echo ) inutilizável

stty -echo; printf '63k%2000s\33]2;5
stty sane; printf '3k%s3\3]2;%s
set-window-option automatic-rename on
7' "$(basename "$SHELL")" "$(uname -n)"; tput reset; tmux refresh
7' $'27'

Warning: After running above command, the shell looks blind and deaf and seems only to talk bullshit in some unknown alien language. See below on how to repair this.

Explicado:

  • printf '6' mata a resposta do tipo de terminal

  • SO faz um printf '3]2;%s$'57' 'right status text' , então você está no conjunto de caracteres alternativo

  • printf '3k%2000s3\' $'27' define o status correto, neste caso /bin/cat ', que expõe um bug de apresentação

  • stty -echo define o nome do título da janela

Esta pode ser a combinação que você pode ver no terminal depois que algum comando interativo caiu e caiu de volta no shell. (Com vim você não pode provocar stty sane IMHO, mas comandos interativos como printf '3k%s3\' "$(basename "$SHELL")" geralmente configuram isso.)

Agora limpe essa bagunça

for a in 'tmux list-windows | sed 's/:.*//'; do tmux set-window-option -t "$a" automatic-rename on; done'

Note: If you use copy and paste (you probably need to hold down Shift while pasting), you probably cannot see your paste if you have used the above command to mess up with your tty. Hence, just blindly press the Enter key after pasting this.

Explicado:

  • tmux rename-window "$(basename "$SHELL")" define os parâmetros do terminal "sane", para que você recupere o eco durante a digitação

  • tmux rename-window define o título da janela de volta ao normal. Você pode usar tmux alternativamente, mas printf '3]2;%stmux set status-right "something"7' "$(uname -n)" está limitado a pane title , onde a sequência de escape sempre funciona.

  • status-right redefine o status-direito para ser mostrado como padrão. (Observe que você não deve usar tmux , porque ele exibe apenas o tput reset que ficou corrompido, então tmux refresh apenas expõe algum bug de apresentação. Observe também que eu não encontrei um comando printf '3k%s3\' "$(basename "$SHELL")" para definir o painel título diretamente.)

  • tmux redefine o terminal, apenas no caso de ter sido mexido com

  • printf '3k%s3\' "something" atualiza a tela para se livrar de outros fragmentos que possam ter aparecido

Falta de bits

O tmux perde a capacidade padrão de tmux para apresentar o comando atual na área de status à esquerda. Depois que tmux foi executado, essa habilidade é perdida e eu não encontrei um bom caminho, ainda, como trazê-lo de volta como era antes.

Mas, conforme observado nos comentários abaixo, você pode ativar um recurso semelhante de : como substituto da seguinte configuração de tmux :

tmux list-windows -a | while IFS=: read -r a b c; do tmux set-window-option -t "$a:$b" automatic-rename on; done
  • Faça isso na linha de comando tmux set-window-option automatic-rename on , que pode ser acessada na janela atual com "Escape" sudo (onde "Escape" é sua chave de comando ssh ) e insira o comando .

  • Ou excute tmux em seu terminal atual, mas isso falhará no caso de você não estar diretamente no nível de shell correto, por exemplo, não funciona dentro de tmux ou %code% .

  • Ou abra outra janela na sessão %code% atual e execute o seguinte comando:

    stty -echo; printf '63k%2000s\33]2;5
    stty sane; printf '3k%s3\3]2;%s
    set-window-option automatic-rename on
    
    7' "$(basename "$SHELL")" "$(uname -n)"; tput reset; tmux refresh
    7' $'27'
  • Ou abra outro shell no computador que está executando %code% e execute o seguinte comando (isto é fora do tmux):

    for a in 'tmux list-windows | sed 's/:.*//'; do tmux set-window-option -t "$a" automatic-rename on; done'
    

PS: Obrigado a todos que ajudaram a montar essa solução.

    
por 05.01.2016 / 13:52
26

O problema específico que você está vendo tem a ver com o nome / título da janela 4. Uma combinação de ser muito longo (obviamente) e contendo caracteres estranhos que fazem o tmux mensurá-lo como sendo mais curto (então ele não consegue limitar adequadamente a barra de status para a largura da tela) Eu não sei como redefini-la (no meu, ele rastreia o nome do processo de primeiro plano), você pode ter que fechar a janela.

    
por 04.10.2012 / 14:56
5

simplesmente faça isso $ reset && tmux rename-window <new_window_name>

    
por 12.01.2015 / 19:31
5
tmux set-option -g status off && tmux set-option -g status on 

consertou isso para mim quando algo diferente do nome da janela foi corrompido e não pude ser incomodado para descobrir o que era.

    
por 13.05.2015 / 17:49
2

tmux só pode constituir parte do problema. Você pode ter que invocar stty sane na linha de comando. Isso redefine os drivers TTY no kernel para algum conjunto de valores padrão que geralmente permitem que você continue. Se os drivers TTY estiverem bagunçados o suficiente, você pode ter que digitar stty sane "blind", ou seja, sem feedback na tela.

    
por 04.10.2012 / 14:36
2

Tente recarregar seu arquivo de configuração?

Ctrl b , em seguida: :source-file ~/.tmux.conf

    
por 04.10.2012 / 20:35
-3

para corrigir o problema para mim:

Acabei de matar o painel e a janela do problema e criei uma nova janela e um painel.

Na área de edição, CTRL + A X e CTRL + A C .

    
por 03.06.2016 / 09:37

Tags