Exibir legenda na primeira linha do terminal
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.
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:
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.
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)"
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.
@ 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?
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.
@ 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 ...