como mudar o hardstatus da tela dinamicamente com formato, a partir do shell?

2

como alterar o hardstatus da tela dinamicamente com formato, a partir do shell? Eu configurei a tela com sucesso usando 256 cores e guias e assim por diante, aqui está o meu .screenrc: link

Eu uso a legenda para as guias e o hardstatus da maneira que deveria ser: uma linha de status de mensagens.

O que eu quero fazer é simples: mostrar mensagens coloridas no hardstatus, a partir de retornos de scripts de shell.

Aqui está o que eu consegui fazer neste momento:

# changing xterm window title:
echo -e '3k'window_title'3\'
echo -ne "\ek window_title\e\"

# sending non colored messages to hardstatus:
echo -ne "\e! hardstatus_global_message\e\"
echo -ne "\e^ hardstatus_private_message\e\"

# reformating the hardstatus string:
echo -ne "\e]0; %{.BW}%{..G}colored hardstatus try\e\"
echo -ne "\e_ %{.BW}%{..G}colored hardstatus try\e\"

Os códigos de escape estão disponíveis aqui: link

eu ainda não vejo como reformatar a string hardstatus, nem como enviar códigos de cores para ela, nem se é possível ou não? procurou aqui e em todos os lugares por horas, agora estou cansado e pedindo, obrigado!

    
por scavenger 07.08.2013 / 12:31

2 respostas

1

É possível colorir as strings do hardstatus como você está dizendo. Ao usar os códigos de cores como saída de script, você precisa usar um caractere ASCII especial (005) para escapar dos códigos de cores, em vez do sinal de porcentagem (%) que normalmente usaria em seu arquivo .screenrc. Em um script de exemplo, você teria algo assim:

#script.sh
Black="
# .screenrc
backtick 101 5 5 /path/to/script.sh

hardstatus alwayslastline "%101'"
5{K}" Red="
#script.sh
Black="
# .screenrc
backtick 101 5 5 /path/to/script.sh

hardstatus alwayslastline "%101'"
5{K}" Red="%pre%5{R}" Green="%pre%5{G}" Yellow="%pre%5{Y}" Blue="%pre%5{B}" Purple="%pre%5{M}" Cyan="%pre%5{C}" White="%pre%5{W}" echo -ne "Here is$Green Green$White text."
5{R}" Green="%pre%5{G}" Yellow="%pre%5{Y}" Blue="%pre%5{B}" Purple="%pre%5{M}" Cyan="%pre%5{C}" White="%pre%5{W}" echo -ne "Here is$Green Green$White text."

Então, no seu arquivo .screenrc, como você já deve saber, chame o script acima com um comando backtick:

%pre%     
por 20.08.2013 / 05:27
0

A solução do gnil com backtick é muito útil se você quiser que o hardstatus atualize cada x número de segundos. Se você quer apenas que o hardstatus seja atualizado quando você executa algo no shell ( quando você pressiona enter ), é melhor seguir estas etapas

  1. coloque em algum lugar na sua linha de hardstatus %h
  2. teste-o executando echo -ne '\x1B_Hello World\x1B\ , isso deve mostrar Hello World no seu hardstatus, onde seu %h
  3. crie um script semelhante ao sugerido por gnil %código%
  4. Teste esse script, quando você executá-lo, deverá ver o diretório de trabalho atual no seu status de disco rígido
  5. Para que este script seja executado toda vez que você digitar, atualize seu .bashrc e adicione esta linha

    HARDLINE="export PROMPT_COMMAND="set_hardline"5{g}$PWD%code%5{-}" echo -ne '\x1B_'$HARDLINE'\x1B\'

por 08.12.2015 / 08:38