Eu acidentalmente estraguei meu terminal tmux depois de inserir cat
um arquivo binário. Agora meu tmux
está bagunçado. Desanexar e reconectar não ajuda, nem um redesenho (Cb r). A execução reset
redesenha apenas o painel ativo, não o restante. Executar ssty sane
dentro ou fora tmux
também não ajuda.
Dentro de cada painel, tenho feedback normal do que digito (a chamada inicial reset
imediatamente após o terminal ter atrapalhado resolvido isso), mas não consigo consertar a barra de status.
Em gnome-terminal
, todas as atualizações da barra de status levam ao aumento da barra de status (veja a captura de tela acima). Por exemplo, isso acontece quando executo um novo aplicativo, alterno painéis ou redimensiono um painel. Forçar um redesenho (Por C-b r
, executando reset
ou através do menu do terminal gnome) reduz a barra de status para uma única linha, mas permanece corrompida.
Em xterm
, a barra de status permanece dentro de uma linha, mas permanece corrompida conforme a figura.
Estou usando o tmux 1.5.
- Como faço para corrigir meu
tmux
terminal?
Este relatório de bug de 2008 parece descrever o mesmo problema, mas foi marcado como corrigido. Não sei em que versão foi corrigida, mas o tmux 1.5 deve incluir uma correção a partir de 2008.
Control
+b
+:
e, em seguida,set -g status-right "#H"
defina status-right como o nome do host.Respostas:
Tente renomear a janela 4
(Isso é uma vírgula no meio)
Ou: Control+b
:rename-window myNewname
fonte
ctrl+u
, então a sequência completa éctrl+b , ctrl+u newname
byobu
também (f8, <newname>
)Control-u
necessário?Control-,
já está renomeando certo? Embora eu possa confirmar que era necessário no meu caso, é algum tipo de redefinição?Você precisa de duas seqüências de comandos para limpar a bagunça:
Primeiro, execute isso na janela ilegível (isso funciona mesmo quando você está
ssh
):stty sane; printf '\033k%s\033\\\033]2;%s\007' "`basename "$SHELL"`" "`uname -n`"; tput reset; tmux refresh
Em seguida, execute isso no computador que é executado
tmux
(funciona dentro e fora detmux
):tmux list-windows -a | while IFS=: read -r a b c; do tmux set-window-option -t "$a:$b" automatic-rename on; done
Explicado em detalhes
Isso foi montado para resolver todos os bits encontrados em outras respostas e comentários. Atualmente, parece apenas um pouquinho menor com o segundo comando. (Veja no "bit ausente" abaixo).
Para entender como isso funciona, vamos primeiro matar a linha de status de
tmux
etty
. Depois, corrigimos novamente, usando um método que deve estar sempre disponível (ao contrário do comandoreset
).Como tornar um
tmux
terminal (assumeUTF-8
) inutilizávelExplicado:
stty -echo
mata a resposta do tipo terminalprintf '\016'
faz aSO
, então você está no conjunto de caracteres alternativoprintf '\033]2;%s\007' 'right status text'
define o status correto, neste caso$'\355
', que expõe um erro de apresentaçãoprintf '\033k%2000s\033\\' $'\302\217'
define o nome do título da janelaEssa pode ser a combinação que você pode ver no terminal depois que algum comando interativo travou e caiu de volta no shell. (Com
/bin/cat
você não pode provocar ostty -echo
IMHO, mas comandos interativos comovim
geralmente definem isso.)Agora limpe essa bagunça
Explicado:
stty sane
define parâmetros de terminal "sãos", para que você retorne seu eco ao digitarprintf '\033k%s\033\\' "$(basename "$SHELL")"
define o título da janela de volta ao normal. Você pode usar comotmux rename-window "$(basename "$SHELL")"
alternativa, no entanto,tmux rename-window
é limitado atmux
onde a sequência de escape sempre funciona.printf '\033]2;%s\007' "$(uname -n)"
redefine o status direito para ser mostrado como padrão. (Observe que você não deve usá-tmux set status-right "something"
lo, porque ele gera apenas opane title
que foi corrompido, portanto,status-right
apenas expõe alguns erros de apresentação. Observe também que não encontrei umtmux
comando para definir o título do painel diretamente.)tput reset
redefine o terminal, caso isso tenha sido prejudicadotmux refresh
atualiza a tela para se livrar de outros detritos que possam ter aparecidoBit ausente
Ele
printf '\033k%s\033\\' "$(basename "$SHELL")"
perde a capacidade padrão detmux
apresentar o comando atual na área de status esquerda. Depois queprintf '\033k%s\033\\' "something"
foi executada, essa habilidade está perdida e eu não encontrei um bom caminho, ainda, como trazê-la de volta como era antes.Mas, conforme observado nos comentários abaixo, você pode ativar um recurso semelhante
tmux
como substituto pela seguintetmux
configuração:Faça isso na
tmux
linha de comando, que pode ser acessada na janela atual com "Escape":
(onde "Escape" é suatmux
chave de comando) e, em seguida, insira o comando.Ou faça uma multa
tmux set-window-option automatic-rename on
no seu terminal atual, mas isso falhará caso você não esteja diretamente no nível do shell certo, por exemplo, ele não funciona emsudo
oussh
.Ou abra outra janela na
tmux
sessão atual e execute o seguinte comando:Ou abra outro shell no computador que está executando
tmux
e execute o seguinte comando (isso está fora do tmux):PS: Obrigado a todos que ajudaram a montar esta solução.
fonte
uname -n
vez dehostname -s
.hostname
é perigoso noroot
contexto, pois você pode acabar com o host renomeado para-s
Linux / Unix mais antigo, ondehostname
não grok opções.stty sane
peça me ajudou quando meu terminal foi ferrado e não mostrou nada. Obrigado!set-window-option automatic-rename
.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 conter caracteres estranhos que fazem com que o tmux o avalie como sendo mais curto (portanto, falha em limitar adequadamente a barra de status para a largura da tela) Não sei como redefini-lo (no meu ele rastreia o nome do processo em primeiro plano), pode ser necessário fechar a janela.
fonte
^b - ,
Ctrl
-b
então,
.Backspace
por um minuto para limpar o nome atual. Para mim, o feedback visual acabou deixando claro que todo o nome antigo havia sido apagado.Ctrl-b
:
a janela de renomeação <name goes here>; isso usa o sistema de comando tmux em vez do atalho de teclado para esse comando.simplesmente faça isso
$ reset && tmux rename-window <new_window_name>
fonte
corrigi isso para mim quando algo diferente do nome da janela estava corrompido e eu não me incomodei em descobrir o que era.
fonte
tmux
pode constituir apenas parte do problema. Pode ser necessário chamarstty sane
na linha de comando. Isso redefine os drivers TTY no kernel para algum conjunto de valores padrão que geralmente permitem que você prossiga. Se os drivers TTY estiverem confusos o suficiente, talvez seja necessário digitarstty sane
"cego", ou seja, sem comentários na tela.fonte
stty sane
também não resolve o problema. Eu tenho feedback na tela, em cada um dostmux
painéis posso digitar e ter feedback normalmente, mas assim que o tmux precisar desenhar algo (por exemplo, executando um novo aplicativo, alternando ou redimensionando painéis), a barra de status se move para os painéis ...Tente recarregar seu arquivo de configuração?
Ctrlb, então:
:source-file ~/.tmux.conf
fonte
para corrigir o problema para mim:
Acabei de matar o painel de problemas e a janela e criei uma nova janela e painel.
No painel de problemas, CTRL+ AXe CTRL+ AC.
fonte