Saída do terminal de pushdown

14

Existe uma maneira padrão de reverter a ordem de saída de um 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

Sinto que sempre ter seu prompt na parte inferior é uma maneira mais eficaz de apresentar a saída para reverter a ordem de saída. Como eu poderia implementar isso? Especificamente onde a porção de saída do programa do terminal OSX foi definida?

    
por rudolph9 03.04.2012 / 19:16

3 respostas

5

No bash, isso exibirá o prompt / comando atual no topo e sua saída abaixo, mas sem nenhum comando de rolagem ou anterior:

PROMPT_COMMAND='tput cup 0 0; tput el; tput el1'

Esta função irá colocar os comandos anteriores abaixo, mas você tem que canalizar cada um e todos os comandos para ele individualmente. Infelizmente, exec > >(f) não pode 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 a length + 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 porcaria, mas alternativa automática para essa coisa toda da função, podemos adicionar um comando ao final de 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 várias chamadas binárias.

Eu tenho o $PROMPT_COMMAND do link .

    
por 14.10.2013 / 06:44
5

Infelizmente, isso será bastante difícil. O protocolo entre os aplicativos e o terminal OS-X é uma variante do protocolo de controle de terminal VT100 / ANSI , especificamente o protocolo XTerm .

Isso inclui várias suposições sobre a posição da tela, etc., o que seria desafiador para remapear para um mundo onde a exibição fosse invertida.

Ainda pior, tudo o que o seu emulador de terminal obtém é uma cadeia de comandos do tipo "coloque este caractere 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 uma coisa para ambas as partes - pelo menos, não sem cooperação do shell abaixo.

O shell e os programas assumem que a tela prossegue para cima - novos dados na parte inferior e continuam para baixo para sempre.

Você poderia, pelo menos teoricamente, ter seu emulador de terminal modificado para que exibisse 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, portanto, o resto do conteúdo também apareceria para trás. Se você quisesse que os comandos (por exemplo: ls, cat) fossem executados "para baixo", mas os prompts para mover a vida "para cima" fossem mais difíceis.

Eu não conheço nenhum software que implemente isso. (... mas veja o comentário do JdeBD sobre isso para um link para um.):)

    
por 03.04.2012 / 19:28
4

Embora isso não faça exatamente a saída reversa, ele manterá seu prompt no topo:

link

Para usá-lo, execute:

git clone https://github.com/swirepe/alwaysontop.git
cd alwaysontop/
source alwaysontop.sh

Se você decidir que gostou, basta fazer isso em seu .bash_profile com algo como:

echo "source ~/alwaysontop/alwaysontop.sh" >> ~/.bash_profile

Espero que ajude!

    
por 11.10.2014 / 01:05

Tags