Exibir legenda na primeira linha do terminal

8

Quando inicio um novo terminal, o prompt está na primeira linha. Depois de trabalhar por um tempo (ou executar um comando que produz alguma saída), o prompt está na última linha. Não vai ficar durante o resto da sessão a menos que eu pressione Ctrl- l, run clearou resetou algo similar.

Para obter alguma medida de continuidade no trabalho, eu uso screencom um truque para exibir o nome da sessão na legenda (eu uso a última com os dois screencomandos .screenrc).

Para evitar sobrecarga cognitiva desordenando a área de trabalho, eu gostaria que essa legenda fosse exibida na parte superior do terminal.

l0b0
fonte

Respostas:

3

Você tem sorte, a tela honra os comandos de salvar e resore. Portanto, com o bash, isso pode ser feito.

Isso fornece instruções sobre como mover o cursor com seqüências de escape especiais. Você pode escrever "Olá, mundo!" no canto superior esquerdo com isso:

echo -e "\033[s\033[2;0HHello World!            \n                        \033[u"

Explicado: O caractere \033[ssalva a posição atual do cursor, que é o que queremos que os tamanhos dos terminais da tela b / c possam variar muito. Em seguida, \033[2;0move o cursor para a terceira linha para o primeiro caractere (começamos a contar no canto superior esquerdo e com 0). Depois vem o texto e uma pequena ilustração do que é possível. Finalmente, o código \033[ucoloca o cursor de volta para onde ele \033[sfoi emitido.

Este exemplo move o cursor para a segunda linha porque, ao emitir o comando, 2 novas linhas são impressas; então, qual é a terceira linha atual será a primeira linha.

Você pode usar isso junto com a legenda da sessão que já pode obter pela explicação que já vinculou.

Bananguin
fonte
2
Você pode tputfazer isso de maneira independente do terminal, sem precisar codificar esses códigos de escape. Por exemplo:echo -n "$(tput sc)$(tput cup 0 0)----Hello, world----$(tput rc)"
Jim Paris
Eu tenho certeza que todo shell tem uma maneira de emitir esses caracteres, mas eu só sei bash :-) Obrigado pela entrada tput, eu não sabia disso.
Bananguin
@ user1129682: Tentei screen $SHELL -c 'echo -n "$(tput sc)$(tput cup 0 0)${STY}$(tput rc)"'e screen $SHELL -c 'screen -X caption always "$(tput sc)$(tput cup 0 0)${STY}$(tput rc)"'não funcionou. Alguma ideia?
L0b0
Depende do que você quer. Se você quiser apenas o título da sessão atual em sua legenda, então você o faria screen -X caption always; screen -X caption string "%t". Se você quiser o título atual no canto superior esquerdo, precisará modificar sua PS1variável de ambiente para excluir a tputmágica.
Bananguin
@ l0b0: e ao ler isso de novo, o tput cup 0 0 pode ter o problema da nova linha dupla, e é por isso que coloquei meu texto na terceira linha, não na primeira. você já tentou tput cup 2 0 ou 0 2 ... ainda não reembolsaram ler sobre tput ...
Bananguin