Posso definir as cores do terminal da minha máquina local para usar as da máquina em que eu ssh?

7

Eu tenho um esquema de cores que eu gosto quando estou em um terminal, mas eu ssh na máquina que eu trabalho em várias fontes (localmente, PuTTY, meu netbook, etc) e eu quero manter o mesmo esquema de cores por toda parte. Isso é possível?

Eu especialmente quero isso no PuTTY; é difícil mudar as cores do PuTTY.

    
por Glacials 16.01.2011 / 00:44

2 respostas

9

As cores nos terminais são determinadas em duas etapas:

  • o programa em execução no terminal diz ao terminal para usar um determinado número de cores;
  • o terminal traduz cada número de cor em um valor de cor.

O Xterm tem uma sequência de escape para alterar o valor de cor associado a um número de cor. Não me lembro se o PuTTY suporta esta sequência; Eu sei que o Mintty funciona.

set_color_value () {
  printf "\e]4;$1;$2\a"
}
set_color_value 4 '#6495ed'  # set color 4 (blue) to CornflowerBlue

Essas configurações não sobreviverão a uma reinicialização do terminal. Você pode superar essa dificuldade adicionando a sequência de alteração da configuração do cursor à string de redefinição do seu terminal.

  • Em um sistema baseado em terminfo usando ncurses, salve as configurações do terminal do terminal em um arquivo com infocmp >>~/etc/terminfo.txt . Edite a descrição para alterar a sequência rs1 (reinicialização básica), por ex. substitua rs1=\Ec por rs1=\Ec\E]4;4;#6495ed\E\ . Com alguns programas e configurações, talvez seja necessário alterar também o rs2 (reinicialização completa). Em seguida, compile a descrição do terminfo com tic ~/etc/terminfo.txt (isso grava no diretório $TERMINFO ou ~/.terminfo se não estiver definido).
  • Em um sistema baseado em termcap, obtenha as configurações termcap do seu banco de dados termcap (geralmente /etc/termcap ). Altere as sequências is (reposição básica) e rs (reposição total) para anexar as suas configurações, por ex. %código%. Defina a variável de ambiente :is=\Ec\Ec\E]4;4;#6495ed\E\: para o valor editado (início e fim com TERMCAP ).

Agora você pode colocar algo assim em seu : :

if [ "$(ps -p $PPID -o comm=)" = sshd ] &&
   [ "$TERM" = "xterm" ]; then
  set_color_value … # set color scheme
  TERMCAP=…  # if necessary
fi
    
por 16.01.2011 / 01:39
0

Você está com ssh em apenas uma caixa, certo? por que não apenas definir a variável PS1 nessa caixa para usar o esquema de cores desejado? Se você mantê-lo em 16 cores, você não deve ter problemas em nenhum TERM moderno, a maioria deve suportar 256 cores, mas a maioria não define TERM=xterm-256color fora da caixa, e alguns tolos ( tossem meu empregador tosse ) sanitize TERM para ser apenas alfanumérico. Infelizmente, o que colocar em seu PS vars depende muito do shell que você está usando.

    
por 16.01.2011 / 03:04