Por que estou perguntando isso?
Como você pode imaginar, é principalmente por curiosidade. Mas por que a curiosidade surgiu em minha mente?
Bem, houve um momento em que notei que não estava feliz porque depois de correr clear
para limpar a tela do terminal, tive que mover meus olhos da parte inferior da tela, onde o prompt acabou após os comandos sereral e seus saídas, para o topo da tela.
Foi quando eu inseri isso no meu ~/.bashrc
:
__prompt_to_bottom_line() {
tput cup $LINES
}
alias clear='clear && __prompt_to_bottom_line'
Para mim, ter o prompt na parte inferior após a execução clear
significa que o prompt está sempre na parte inferior, nunca na parte superior. Todo o resto está normal.
E os outros?
Acho que não sou o único a sentir essa necessidade. Veja esta pergunta , por exemplo: o usuário queria que o prompt estivesse sempre no topo e a saída abaixo dele, mas na ordem inversa (mas uma saída de um comando, mesmo que multilinha, não é invertida, claramente).
Se você pensar bem, o que esse usuário espera ver na tela é exatamente o tac
que eu espero (exceto que, novamente, as saídas de várias linhas não são invertidas).
Então minha pergunta é
por que o terminal foi projetado com esse comportamento não uniforme? Por não uniforme quero dizer que ele começa em uma situação que nunca será repetida a menos que um clear
s, e isso mudará comando após comando, com o prompt viajando para baixo na tela, eventualmente com o prompt terminando em uma posição "estável" em na parte inferior da tela, de onde não se moverá mais, a menos que um clear
s.
A linha sempre na parte superior/inferior com saídas empurradas para baixo/para cima não seria um design mais amigável aos olhos?
A história do comportamento dos emuladores de terminal deve ser abordada em Por que o cursor de entrada sempre vai de cima para baixo em um emulador de terminal? As respostas lá, inclusive a minha, carecem de um panorama histórico dos terminais ADM da Lear Siegler, já que muito do comportamento está atrelado à sua evolução. Os primeiros terminais suportavam apenas "entrada de linha inferior" - o cursor era fixado na linha inferior; “downline scrolling”, que é o comportamento com o qual estamos familiarizados hoje, foi uma opção introduzida com o ADM-3A.
A história desse aspecto do(s) comportamento(s) dos shells é que não existe realmente um:
sh
shells -style não estão cientes do terminal ou de suas capacidades. Em seu núcleo, seu shell só se importa se sua entrada está vindo e sua saída está indo para um dispositivo que finge ser um terminal (conforme determinado pela funçãoisatty
) ; ele não sabe se é um teleimpressor, um terminal de vidro, um emulador de terminal ou algum outro dispositivo compatível com terminal, virtual ou não.¹¹ “Em seu núcleo” porque alguns recursos de
sh
shells de estilo atual, por exemploselect
, no Bash, estão cientes de que o terminal possui um determinado número de colunas e linhas.