Obter automaticamente cores diferentes de terminal cada vez que abro o terminal

14

Muitas vezes me vejo abrindo três terminais e realmente gosto da aparência de ter paletas de cores distintas em cada um.

Tenho algumas paletas de cores salvas e gostaria que o padrão progredisse nos meus perfis salvos sempre que abrir um terminal, de modo que, se eu abrir 3, elas serão de cores diferentes, sem que eu precise alterar manualmente o perfil em 2.

Alguma ideia?

Obrigado!

kpie
fonte
Acabei de editar minha resposta com um script que faz o que você deseja. Ele deve ser adicionado ao arquivo ./bashrc . Espero que atenda às suas necessidades!
CNI

Respostas:

10

Versão funcional

Instruções:

O script considera que você está usando o gnome-terminal , que é o terminal padrão do Ubuntu.

Antes de executar o script, abra o terminal gnome e crie alguns perfis (Editar> Preferências> Perfis) com configurações diferentes, conforme desejado (cor de fundo, cor do texto, etc.). Você pode nomeá-los como Perfil1, Perfil2, Perfil3 e assim por diante. Crie perfis suficientes para cobrir a quantidade de terminais que serão abertos, mas se um número maior de terminais for aberto, o perfil padrão será usado.

O script cria um arquivo ~ / .Bash_Color_Changer , do qual depende, pois informa o script se o terminal foi aberto regularmente ou após uma chamada em .bashrc .

Adicione o script ao final do seu arquivo ~ / .bashrc .

Roteiro:

Adicionar a .bashrc:

#Change color according to the number of Bash shells opened
#Creates the .Bash_Color_Changer file if it's not present
if ! [ -f ~/.Bash_Color_Changer ]; then
    echo ORIGINAL > ~/.Bash_Color_Changer
fi

#Array holding the name of the profiles: Substitute it for the names you're using
Color_counter=(Profile1 Profile2 Profile3)
#Finds out the number of opened bashs counting the lines containing "bash"
#in the pstree function. (-c deactivates compact display to avoid it showing
#lines with "2*[bash]" instead of one for each bash)
Number_of_bashs=$(($(pstree -c | grep "bash" | wc -l)-1))

#Checks if the terminal being opened was opened by the user or by
#the script, and act according to it
if [ $(cat ~/.Bash_Color_Changer) = ORIGINAL ]; then 
    if ((Number_of_bashs < ${#Color_counter[*]})); then
        echo COPY > ~/.Bash_Color_Changer
        gnome-terminal --tab-with-profile-internal-id=${Color_counter[${Number_of_bashs}]} 
        exit
    fi
else 
    echo ORIGINAL > ~/.Bash_Color_Changer
fi

Testado, mas não extensivamente. Desfrutar!

IanC
fonte
A idéia para amanhã é adicionar um condicional para exitbaseado em algum arquivo como ~/bashcolor.txt. Poderia ter uma linha para dizer se o bash sendo aberto é o "original" ou a "cópia". Portanto, se cat ~/bashcolor.txtretornar "ORIGINAL", o exitcomando será executado e echo COPY > ~/bashcolor.txt. Caso contrário, a saída não será executada, mas o arquivo retornará ao original ( echo ORIGINAL > ~/bashcolor.txt). Resolveria o problema do terminal intermitente.
CNI
Script divertido de fazer, pode até usá-lo eu mesmo :) Quaisquer sugestões de melhorias são bem-vindas!
CNI
Isso funciona no confiável +1
boomt14
2
Fiz 1 alteração na minha versão ... Dessa forma, ele continua pedalando quando você abre mais terminais do que perfis. Number_of_bashs=$(($(($(pstree -c | grep "bash" | wc -l)-1))%${#Color_counter[@]}))
Kpie 13/08/16
Agradável! Ele não veio à minha mente a utilização do módulo para manter o cíclica iteração: p
CNI
9

Uma opção pode estar usando xfce4-terminal. É muito semelhante ao terminal padrão do Ubuntu (que é gnome-terminal) e muitos de seus pacotes de dependência usam o componente gtk, o que o torna uma alternativa adequada.

Primeiro instale-o com

sudo apt-get install xfce4-terminal

Em seguida, abra-o, vá para Editar -> Preferências , selecione a guia Cores e marque a opção que diz: Varie a cor de fundo de cada guia e saia agora.

Faça o terminal padrão xfce4-terminalou altere o atalho Ctrl-Alt-Tpara abri-lo.

Agora, toda vez que você abrir, você verá uma paleta de cores diferente. terminal colorido diferente

Links Úteis:

Anwar
fonte
5

Haha, muito interessante. Eu poderia tentar fazer isso também. Na maioria das vezes, uso apenas vários terminais e um navegador.

Então, olhei em volta e encontrei isso - https://github.com/sos4nt/dynamic-colors . Um pequeno projeto bem organizado que ajuda você a obter uma parte do que deseja.

Agora, no diretório colorschemes/desse projeto, você verá que atualmente possui 4 esquemas de cores. Você pode adicionar quantos precisar / desejar.

Portanto, para que cada terminal escolha um esquema de cores diferente, eu adicionaria uma função ao meu .bash_profileou .bashrcou onde quer que seja, de modo que a função faça duas coisas:

  1. Calcula quantos terminais estão em execução no momento
  2. Emita um dynamic-colors switch colorscheme-namecomando com base em (1).

Espero que isto ajude!

PS: Eu escreveria um roteiro para você, mas odeio comer com colher e sou preguiçoso. :)

theabhinavdas
fonte
bom ... criar um wrapper / alias para o comando terminal seria alcançá-lo.
Vishnu Kumar
@VishnuKumar, sim, foi o que primeiro veio à mente, embora possa não ser a melhor solução. estou feliz por ter gostado.
Theabhinavdas
+1 para uma resposta correta, eu realmente não quero brigar com "trabalhos", mas essa resposta exige que eu use as definições de estilo proprietárias usadas no meu projeto de cores dinâmicas, além disso (e é isso que realmente me atraiu) 't apoio opacidade: (Eu sinto que a resposta deve envolver uma combinação dosgnome-terminal --load-config=FILE
kpie
@kpie, haha. Não é justo, a opacidade não foi mencionada na pergunta. Além disso, é difícil definir opacidade na linha de comando e depende muito de muitas coisas. Além disso, esta pergunta pode ser respondida de várias maneiras, mas eu pensei que a minha resposta foi muito conveniente (se apenas para mim, haha) :)
theabhinavdas
Espero poder compensar a escolha de malhas fornecendo os scripts necessários ... github.com/Krewn/stylingTerminalOnOpen E devo especificar que ele não suporta opacidade variável, os esquemas de cores manterão a opacidade do seu perfil padrão.
kpie
1

O Konsole realmente suporta essa funcionalidade nativamente. O Konsole é realmente poderoso e altamente personalizável.

Se você não possui o Konsole, simplesmente sudo apt install konsole

  1. Vá para as configurações
  2. Configurações do Konsole
  3. Selecione a guia Aparência
  4. Selecione seu esquema de cores
  5. Selecione "Editar" à direita
  6. Há uma caixa para definir "Varie a cor de fundo de cada guia"

Além disso, se você estiver trabalhando em três servidores ao mesmo tempo, poderá incluir alguns apelidos bacanas mostrados aqui

Matt O.
fonte
+1 para uma resposta correta, mas não tenho o konsole. A resposta do @ <MemoryAddress> suporta mais interfaces de terminal (qualquer uma que suporte sequências de escape OSC). Mas o seu é mais fácil de usar. Darei a recompensa a quem tiver mais votos em alguns dias. Obrigado pela sua resposta!
kpie
Você ficaria surpreso com quantas pessoas realmente iria comentar aqui me dizendo que eu preciso te dizer como instalá-lo -_-
Matt O.
Você leu os comentários nos outros países?
kpie
Eu fiz. Talvez esteja faltando alguma coisa, mas você esteja procurando por opacidade variável e algo que não exija alias. O Konsole alcança os dois, mas não tenho certeza sobre as seqüências de escape.
Matt O.
1
haha eu entendi. Não me culpe, depois de ter pessoas malucas suficientes aqui sugerindo edições, eu apenas faço isso automaticamente. Não estou tentando insultar sua inteligência.
Matt O.