Existe uma maneira padrão de reverter a ordem de saída de uma saída terminal, ou seja:
~/Developer $ command0
-bash: comman0: command not found
~/Developer $ command2
-bash: command2: command not found
~/Developer $ command3
-bash: command3: command not found
~/Developer $
seria exibido como:
~/Developer $
-bash: command3: command not found
~/Developer $ command3
-bash: command2: command not found
~/Developer $ command2
-bash: comman0: command not found
~/Developer $ comman0
Acho que sempre ter seu prompt na parte inferior é contra-intuitivo. Uma maneira mais eficaz de apresentar a saída seria inverter a ordem de saída. Como posso implementar isso? Especificamente, onde é definida a parte de saída do programa do terminal OSX?
Responder1
No bash, isso exibirá o prompt/comando atual na parte superior e sua saída abaixo, mas sem rolagem ou comandos anteriores:
PROMPT_COMMAND='tput cup 0 0; tput el; tput el1'
Esta função colocará os comandos anteriores abaixo, mas você terá que canalizar cada comando para ela individualmente. Infelizmente, exec > >(f)
não posso ajudar com isso, pois redireciona todo o bash, não comandos individuais. Aqui está a função:
f () { tee ~/.STDIN | wc -l | xargs expr 1 + | xargs tput il && cat ~/.STDIN; }
Em seguida, execute todos os comandos como:
command args |f
Ele salva a saída, cria um número de linhas em branco igual ao comprimento + 1 e, em seguida, coloca a saída de volta. Você pode marcar uma linha no final que exibirá um prompt falso ou uma regra horizontal, se desejar. Por exemplo
printf '%*s' $COLUMNS | tr ' ' _;
Como uma alternativa ruim, mas automática, para toda essa coisa de função, podemos adicionar um comando ao final do nosso $PROMPT_COMMAND anterior que limpa 11 linhas um tanto arbitrárias:
PROMPT_COMMAND='tput cup 0 0; tput el; tput el1; tput il 11'
Você também pode usar tput -S
para evitar múltiplas chamadas binárias.
Eu peguei o $PROMPT_COMMAND
dehttps://github.com/swirepe/alwaysontop.
Responder2
Infelizmente, isso será bastante difícil. O protocolo entre os aplicativos e o terminal OS-X é uma variante doVT100/ANSIprotocolo de controle de terminal, especificamente oXtermoprotocolo.
Isso inclui um monte de suposições sobre a posição da tela, etc., que seriam um desafio para remapear para um mundo onde a exibição fosse invertida.
Pior ainda, tudo o que o seu emulador de terminal obtém é uma sequência de comandos do tipo "coloque este caracter nesta posição". Não há distinção entre o prompt de comando e a saída de um comando executado por ele, então você não pode fazer nada para ambas as partes - pelo menos, não sem a cooperação do shell abaixo.
O shell e os programas assumem que a tela sobe - novos dados na parte inferior e continua descendo para sempre.
Você poderia, pelo menos teoricamente, modificar seu emulador de terminal para exibir as linhas na ordem inversa - a linha "inferior" primeiro e assim por diante até a linha "superior" na parte inferior da tela.
Isso inverteria a ordem das linhas na saída do comando, de modo que o restante do conteúdo também apareceria ao contrário. Se você quiser que os comandos (por exemplo: ls, cat) sejam executados "para baixo", mas os prompts para moverem "para cima", a vida será mais difícil.
Não conheço nenhum software que implemente isso. (...mas veja o comentário do JdeBD sobre isso para obter um link para um.) :)
Responder3
Embora isso não reverta exatamente a saída, manterá seu prompt no topo:
https://github.com/swirepe/alwaysontop
Para usá-lo execute:
git clone https://github.com/swirepe/alwaysontop.git
cd alwaysontop/
source alwaysontop.sh
Se você decidir que gosta, basta colocá-lo em seu .bash_profile com algo como:
echo "source ~/alwaysontop/alwaysontop.sh" >> ~/.bash_profile