Obtenez automatiquement différentes couleurs de terminal chaque fois que j'ouvre le terminal

14

Je me retrouve souvent à ouvrir trois terminaux et j'aime vraiment l'apparence d'avoir des palettes de couleurs distinctes sur chacune.

J'ai quelques palettes de couleurs enregistrées et je voudrais que la valeur par défaut progresse dans mes profils enregistrés chaque fois que j'ouvre un terminal, de sorte que si j'ouvre 3, ce sont des couleurs différentes sans que je doive changer manuellement de profil sur 2.

Des pensées?

Merci!

kpie
la source
Je viens de modifier ma réponse avec un script qui fait ce que vous voulez. Il doit être ajouté au fichier ./bashrc . J'espère que cela répond à vos besoins!
IanC

Réponses:

10

Version fonctionnelle

Instructions:

Le script considère que vous utilisez gnome-terminal , qui est le terminal Ubuntu par défaut.

Avant d'exécuter le script, ouvrez le gnome-terminal et créez des profils (Edition> Préférence> Profils) avec différents paramètres comme vous le souhaitez (couleur d'arrière-plan, couleur du texte, ..). Vous pouvez les nommer Profile1, Profile2, Profile3 et ainsi de suite. Créez suffisamment de profils pour couvrir la quantité de terminaux qui seront ouverts, mais si un nombre plus élevé de terminaux est ouvert, le profil par défaut sera utilisé.

Le script crée un fichier ~ / .Bash_Color_Changer , dont il dépend, car il indiquera au script si le terminal a été ouvert régulièrement ou après un appel sur .bashrc .

Ajoutez le script à la fin de votre fichier ~ / .bashrc .

Scénario:

Ajouter à .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

Testé mais pas intensivement. Prendre plaisir!

IanC
la source
L'idée de demain est d'ajouter un conditionnel pour exitbasé sur un fichier comme ~/bashcolor.txt. Il pourrait avoir une ligne pour dire si le bash en cours d'ouverture est "l'original" ou la "copie". Donc, si cat ~/bashcolor.txtrenvoie "ORIGINAL", la exitcommande est exécutée et echo COPY > ~/bashcolor.txt. Sinon, la sortie ne s'exécute pas mais le fichier revient à l'original ( echo ORIGINAL > ~/bashcolor.txt). Cela résoudrait le problème du terminal clignotant.
IanC
Script amusant à faire, pourrait même l'utiliser moi-même :) Toutes les suggestions d'amélioration sont les bienvenues!
IanC
Cela fonctionne en fidèle +1
boomt14
2
J'ai fait 1 changement dans ma version ... De cette façon, il continue de tourner lorsque vous ouvrez plus de terminaux que vous n'avez de profils. Number_of_bashs=$(($(($(pstree -c | grep "bash" | wc -l)-1))%${#Color_counter[@]}))
kpie
Agréable! Il ne m'est pas venu à l'esprit d'utiliser le module pour maintenir l'itération cyclique: p
IanC
9

Une option pourrait être d'utiliser xfce4-terminal. Il est très similaire au terminal Ubuntu par défaut (qui l'est gnome-terminal) et beaucoup de ses packages de dépendances utilisent le composant gtk, ce qui en fait une alternative appropriée.

Installez-le d'abord avec

sudo apt-get install xfce4-terminal

Ensuite, ouvrez-le, allez dans Edition -> Préférences , sélectionnez l' onglet Couleurs et cochez l'option qui dit, Variez la couleur d'arrière-plan pour chaque onglet et maintenant quittez.

Créez le terminal par défaut xfce4-terminalou modifiez le raccourci de Ctrl-Alt-Tpour l'ouvrir.

Maintenant, chaque fois que vous ouvrez, vous verrez une palette de couleurs différente. borne de couleur différente

Liens utiles:

Anwar
la source
5

Haha, très intéressant. Je pourrais aussi essayer de faire ça. Je n'exécute principalement que plusieurs terminaux et un navigateur.

J'ai donc regardé autour de moi et j'ai trouvé cela - https://github.com/sos4nt/dynamic-colors . Un petit projet très soigné qui vous aide à réaliser une partie de ce que vous voulez.

Maintenant, dans le répertoire colorschemes/de ce projet, vous verrez qu'il a actuellement 4 jeux de couleurs. Vous pouvez en ajouter autant que vous le souhaitez / souhaitez.

Donc, pour que chaque terminal choisisse un schéma de couleurs différent, j'ajouterais une fonction à mon .bash_profileou .bashrcou n'importe où, de sorte que la fonction fait deux choses:

  1. Détermine le nombre de terminaux en cours d'exécution
  2. Émettez une dynamic-colors switch colorscheme-namecommande basée sur (1).

J'espère que cela t'aides!

PS Je voudrais écrire un script pour vous, mais je déteste manger à la cuillère et je suis paresseux af. :)

theabhinavdas
la source
bon ... la création d'un wrapper / alias à la commande du terminal serait le réaliser.
Vishnu Kumar
@VishnuKumar, oui, c'est ce qui m'est d'abord venu à l'esprit bien que ce ne soit pas la meilleure solution. content que tu aimes ça.
theabhinavdas
+1 pour une réponse correcte, je ne veux vraiment pas me battre avec des "œuvres" mais cette réponse nécessite que j'utilise les définitions de style propriétaires utilisées dans mon projet de couleurs dynamiques, en plus (et c'est ce qui m'a vraiment attiré), il ne fonctionne pas 't support opacity: (J'ai l'impression que la réponse devrait impliquer une combinaison de lagnome-terminal --load-config=FILE
kpie
@kpie, haha. Non, l'opacité n'était pas mentionnée dans la question. En outre, il est difficile de définir l'opacité à partir de la ligne de commande et dépend beaucoup de beaucoup de choses. En outre, cette question peut être répondue de différentes manières, mais je pensais que ma réponse était assez pratique (ne serait-ce que pour moi, haha) :)
theabhinavdas
J'espère que je peux compenser la cueillette en tricot en fournissant les scripts requis ... github.com/Krewn/stylingTerminalOnOpen Et je dois préciser qu'il ne prend pas en charge l'opacité variable, les schémas de couleurs maintiendront l'opacité de votre profil par défaut.
kpie
1

Konsole prend en charge cette fonctionnalité de manière native. Konsole est vraiment puissant et hautement personnalisable.

Si vous n'avez pas Konsole, alors simplement sudo apt install konsole

  1. Aller aux paramètres
  2. Paramètres de Konsole
  3. Sélectionnez l'onglet Apparence
  4. Sélectionnez votre palette de couleurs
  5. Sélectionnez "Modifier" à droite
  6. Il y a une case pour définir "Varier la couleur de fond pour chaque onglet"

En plus de cela, si vous travaillez sur trois serveurs en même temps, vous pouvez inclure quelques alias astucieux montrés ici

Matt O.
la source
+1 pour une réponse correcte mais je n'ai pas de konsole. La réponse de @ <MemoryAddress> prend en charge davantage d'interfaces de terminaux (toutes celles qui prennent en charge les séquences d'échappement OSC). Mais le vôtre est plus facile à utiliser. Je donnerai la prime à celui qui aura le plus de votes dans quelques jours. Merci pour votre réponse!
kpie
Vous seriez surpris du nombre de personnes qui commenteraient ici en me disant que je dois vous dire comment l'installer -_-
Matt O.
Avez-vous lu les commentaires des autres enfants?
kpie
J'ai fait. Peut-être que je manque quelque chose, mais vous recherchez une opacité variable et quelque chose qui ne nécessite pas d'alias. Konsole atteint les deux, mais je ne suis pas sûr des séquences d'échappement.
Matt O.
1
haha je comprends. Ne me blâmez pas, après avoir eu assez de gens fous ici suggèrent des modifications que je fais juste automatiquement. Je n'essaie pas d'insulter votre intelligence.
Matt O.