Sim, você pode fazer essas coisas. Focando apenas na questão de como colocar um texto colorido em posições específicas, uma rota direta, embora um pouco de baixo nível, é usar o utilitário tput
. tput
possui vários comandos que, com a ajuda do banco de dados terminfo
, manipulam a tela do terminal. Por exemplo, tput cup 23 4
moverá o cursor para a linha 23, coluna 4 do seu terminal. Alguns outros exemplos:
tput ed # clear to end of screen
tput setaf 2 # set foreground color to bright green
tput cubl # move cursor left one space
tput rev # turn on reverse video mode
tput sc # save the cursor position
tput rc # restore the cursor position
Você também pode encontrar uso para o utilitário stty
. Por exemplo, se você quiser determinar as dimensões da tela atual, você pode fazer stty size
.
Eu já construí um 'GUI' bruto para alguma utilidade minha que divide a tela em duas seções. A seção superior era um cabeçalho de altura fixa. A seção inferior continha a saída do comando (rolagem). Eu fiz isso usando o script Bash e tput
+ stty
apenas. Eu descobri muito disso apenas por tentativa e erro, mas existem alguns recursos interessantes on-line como o link
Veja man tput
e man 5 terminfo
. Para este último, você vai querer rolar para a seção Predefined Capabilities em particular.
Pode haver abstrações de nível mais alto para a manipulação de tela baseada em terminfo , mas se você tiver requisitos relativamente simples tput
é uma boa opção. (Eu acredito que tput
é parte do pacote ncurses mencionado em outra resposta aqui.)
Editar: devo acrescentar, já que parece que você quer alguns desses recursos em todas as suas telas, que você pode fazer isso escrevendo um script de shell que utiliza tput
como descrito acima e defina a variável de ambiente PROMPT_COMMAND
nesse script para que seja invocada toda vez que seu prompt for atualizado. Se você quiser uma atualização mais frequente, precisará executar algum processo para ser executado em segundo plano enquanto ainda está sendo anexado à sua tela. Isso é mais do que tentarei morder nesta resposta.