Estou fazendo um script em zsh no mac que usa tmux e depois da incrível resposta https://unix.stackexchange.com/users/22565/st%c3%a9phane-chazelas , descobri que quando uso tmux, ele usa um intérprete diferente daquele da minha máquina host.
Portanto, como estou gerando os mesmos literais para os painéis tty e tmux a partir dos meus comandos tput de script, queria saber se havia alguma incompatibilidade nas sequências de escape ANSI que estou produzindo.
Descobri que $TERM é xterm-256color no meu mac e screen-256color em um painel tmux, por isso emiti
%> infocmp xterm-256color screen-256color
Estou usando código que usa tput clear, civis, sgr0, cnorm, rc, sc, home, cd, cr, el, cub1, cud, cuf. O código está funcionando, a saída é produzida no contexto xterm com tput e é bem renderizada em tty e tmux quando tee'ed.
Mas de acordo com o infocmp, clear, por exemplo, tem sequências de escape diferentes em ambos os termos:
comparing xterm-256color to screen-256color.
clear: '\E[H\E[2J', '\E[H\E[J'
então como isso pode funcionar?
Como questão secundária, muitos dos meus comandos não aparecem na comparação. Isso significa que eles não são suportados teoricamente ou que são comuns em ambos os termos?
Funciona porque em um terminal padrão (ECMA-48), não há diferença no efeito das duas strings. Ambos enviam o cursor para o canto superior esquerdo da tela. Então um (
\E[J
) limpa o restante da tela enquanto o outro (\E[2J
) limpa a tela inteira:(de sequências de controle XTerm )