Mantenha a linha de entrada do terminal no topo do terminal?

5

É realmente difícil explicar exatamente o que estou procurando exatamente, por isso, fiz alguns exemplos de como gostaria que meu terminal se comportasse. (cada número no início de uma linha representa um retorno nessa linha e > representa a linha de entrada.

>   me@computer:~$ 
5.  me@computer:~$ cat somefile                 < command
    start of file                               < output
                                                < output
    this                                        < output
    is                                          < output
    the                                         < output
    content                                     < output
    of                                          < output
    the                                         < output
    file                                        < output
                                                < output
    end of file                                 < output
4.  me@computer:~$ 
3.  me@computer:~$ 
2.  me@computer:~$ 
1.  me@computer:~$ echo this is the first line  < command
    this is the first line                      < output

Neste exemplo, a linha de entrada onde você digita os comandos que você quer executar sempre estará no topo. E vai empurrar cada comando e sua saída para baixo como "eventos", por assim dizer. Então, se você catar um arquivo, ele produzirá tudo na ordem inversa, então a aparência da saída de cada comando é inalterada, apenas a posição.

    
por Ian 01.09.2016 / 11:28

2 respostas

3

Talvez alguém tenha feito isso (talvez não). Teria que ser feito por um shell que saiba coletar a saída de comandos e atualizar a tela. Por si só, um terminal normal não fará isso.

Supondo que houvesse um programa fazendo isso, em cada comando

  • aceitaria seu comando de entrada (possivelmente várias linhas). Para simplificar, comece limitando as entradas a uma única linha.
  • depois de obter o texto, o shell executaria o comando, coletando uma linha por vez a partir do erro de saída padrão e do comando.
  • à medida que adquire uma nova linha de saída, ela precisa inserir essa linha na tela, pressionando o texto existente. O ponto de inserção desce à medida que mais saída é lida. (Os terminais fornecem operações baixo nível para ajudar, mas isso é muito longe de fazê-lo funcionar ).
  • se houver mais saída do que couber na tela, o usuário provavelmente espera que a saída comece a rolar para cima quando o ponto de inserção atingir a parte inferior da tela.
  • quando não há mais saída (o comando pára), o shell move o cursor de volta para o topo da tela.

Todos que podem ser feitos em um programa simples. O que é difícil é se o comando quiser assumir a tela por si mesmo. Programas que fazem isso escrevem - você adivinha - para a saída padrão e o erro padrão. E eles não escrevem texto simples: eles usam seqüências de escape para se mover pela tela.

Se você limitar isso aos aplicativos bem-comportados que enviam uma sequência de inicialização de terminal, seu shell poderia (em princípio) detectar isso e desistir por enquanto, permitindo que o comando grave na tela. Mas aplicativos bem-comportados não são a maioria, e você terá muitos casos especiais interessantes para lidar.

    
por 01.09.2016 / 23:10
2

Esta é uma ideia interessante, mas não acho que exista algo que atualmente faça isso. Há muitos bits interconectados que precisam trabalhar juntos para fazer isso.

Não tem havido muita tentativa de mudar a maneira como os terminais funcionam, pois eles têm décadas de histórico incremental e sempre funcionaram da mesma maneira básica, mudando drasticamente isso quebraria as aplicações existentes.

Dito isso, não seria muito difícil escrever um aplicativo ncurses simples para fazer o que você quer, mas funcionaria apenas com comandos básicos, qualquer coisa que esperasse que um terminal completo falhasse (como vim, nano, screen, top etc). Apoiá-los seria uma grande quantidade de trabalho.

No entanto, houve algumas tentativas recentes de criação de aplicativos de terminal modernos, alguns permitem que você exiba imagens / vídeo diretamente; por exemplo, terminologia . O mais radical destes que eu vi é tela preta que você pode estar interessado polegadas não é exatamente o que você está procurando e ainda está em desenvolvimento bem cedo (você pode ter problemas com isso), mas pode dar algumas das mesmas vantagens para a maneira como deseja que ele funcione (destacando comandos, facilitando ver a saída de um comando iniciada / pára, etc).

    
por 01.09.2016 / 15:00