E não diga " $TERM
" - é sempre xterm
.
Como um bash
script pode dizer em qual terminal está sendo executado, especificamente se é iTerm, Terminal.app ou, na verdade, um xterm?
Eu pergunto porque reset
não funciona fora da caixa no Terminal.app e iTerm2. O iTerm2, no entanto, reconhece uma sequência de escape para fazer um reset de terminal ( \x1b]50;ClearScrollback\x07
), e se eu pudesse detectá-lo, eu poderia substituir reset
por um alias que fizesse a coisa certa. AFAICT, Terminal.app não possui uma sequência de reinicialização, e as pessoas recorrem à ridícula tom-hacker para descobrir isso .
Meu objetivo final aqui é ter reset
o mesmo trabalho, seja trabalhando no OS X ou Linux, trabalhando local ou remotamente através do SSH. (Eu não quero ter que tentar lembrar qual, e é útil fazer reset && command-that-outputs-a-bunch
e ter up-enter funcionar.) Terminal.app e iTerm estão jogando uma chave neste plano, não implementando reset
corretamente.
Isso significa que simplesmente reset
não há nada: se estou em uma máquina Linux, ele precisa saber se estou usando o gnome-terminal
iTerm para enviar a sequência de escape correta.
Existe alguma maneira (mesmo se eu precisar de um ioctl
) para perguntar ao terminal o que realmente é?
ThePara os fins desta questão, a reinicialização deve limpar a tela, redefinir o cursor e limpar o buffer de rolagem.
reset
, já que é o que meus dedos sabem.
reset
comando para limpar o conteúdo de rolagem traseira do emulador de terminal, mas isso não é garantido para fazer isso, porque scroll-back é um recurso específico do emulador de terminal, não realmente um parte de um terminal. No entanto, o Terminal suporta uma extensão da sequência de escape ED (Apagar na Exibição) para apagar o deslocamento de retorno ESC [ 3 J
. Você pode limpar a tela, então use isso, por exemplo,reset && printf '\e[3J’
xterm
(através de TERM=xterm
) eu esperaria que você emula um superconjunto do XTerm, que limpa o seu retrocesso na reinicialização. (Assim como se você mandasse a seqüência de escape para "blue", você esperaria azul.) Concedido, meu xterm me diz isso Erase is backspace.
, o que eu sou grato mais nada faz; isso é simplesmente chato.
Terminal.app
as configurações, a guia do terminal e definir as linhas de rolagem para 0? Isso desativa todo e qualquer texto acima da linha atual, ou qualquer coisa acima da parte superior da tela? Eu sei, não é exatamente o que você pediu, vale um tiro.