Obtenga automáticamente diferentes colores de terminal cada vez que abro el terminal

14

A menudo me encuentro abriendo tres terminales y realmente me gusta la apariencia de tener paletas de colores distintas en cada una.

Tengo algunas paletas de colores guardadas y me gustaría que el valor predeterminado progrese a través de mis perfiles guardados cada vez que abro un terminal, de modo que si abro 3, cada uno es de un color diferente sin tener que cambiar manualmente el perfil en 2.

¿Alguna idea?

¡Gracias!

kpie
fuente
Acabo de editar mi respuesta con un script que hace lo que quieres. Debe agregarse al archivo ./bashrc . ¡Espero que se adapte a tu necesidad!
IanC

Respuestas:

10

Versión funcional

Instrucciones:

El script considera que está utilizando gnome-terminal , que es el terminal predeterminado de Ubuntu.

Antes de ejecutar el script, abra el terminal gnome y cree algunos perfiles (Edición> Preferencia> Perfiles) con las diferentes configuraciones que desee (color de fondo, color de texto, ..). Puede nombrarlos Perfil1, Perfil2, Perfil3, etc. Cree suficientes perfiles para cubrir la cantidad de terminales que se abrirán, pero si se abre un mayor número de terminales, se utilizará el perfil predeterminado.

El script crea un archivo ~ / .Bash_Color_Changer , del cual depende, ya que le dirá al script si el terminal se abrió regularmente o después de una llamada a .bashrc .

Agregue el script al final de su archivo ~ / .bashrc .

Guión:

Añadir 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

Probado pero no ampliamente. ¡Disfrutar!

IanC
fuente
Idea para mañana es agregar un condicional para exitbasado en algún archivo como ~/bashcolor.txt. Podría tener una línea que diga si el bash que se está abriendo es el "original" o la "copia". Entonces, si cat ~/bashcolor.txtdevuelve "ORIGINAL", exitse ejecuta el comando y echo COPY > ~/bashcolor.txt. De lo contrario, la salida no se ejecuta pero el archivo vuelve al original ( echo ORIGINAL > ~/bashcolor.txt). Solucionaría el problema del terminal intermitente.
IanC
Guión divertido para hacer, incluso podría usarlo yo mismo :) ¡Cualquier sugerencia de mejora es bienvenida!
IanC
Esto funciona en confianza +1
boomt14
2
Hice 1 cambio en mi versión ... De esta manera se mantiene en ciclo cuando abres más terminales de los que tienes perfiles. Number_of_bashs=$(($(($(pstree -c | grep "bash" | wc -l)-1))%${#Color_counter[@]}))
kpie
¡Agradable! No se me ocurrió usar el módulo para mantener la iteración cíclica: p
IanC
9

Una opción podría estar usando xfce4-terminal. Es muy similar al terminal predeterminado de Ubuntu (que es gnome-terminal) y muchos de sus paquetes de dependencia usan el componente gtk, lo que lo convierte en una alternativa adecuada.

Primero instálalo con

sudo apt-get install xfce4-terminal

Luego ábralo, vaya a Editar -> Preferencias , seleccione la pestaña Colores y marque la opción que dice, Varíe el color de fondo para cada pestaña , y ahora salga.

Cree el terminal predeterminado xfce4-terminalo cambie el acceso directo de Ctrl-Alt-Tpara abrirlo.

Ahora, cada vez que abra, se le presentará una paleta de colores diferente. terminal de diferentes colores

Enlaces útiles:

Anwar
fuente
5

Jaja, muy interesante. Podría intentar hacer esto también. Principalmente solo ejecuto múltiples terminales y un navegador.

Así que miré a mi alrededor y encontré esto: https://github.com/sos4nt/dynamic-colors . Un pequeño proyecto muy ordenado que te ayuda a lograr una parte de lo que quieres.

Ahora, en el directorio colorschemes/de ese proyecto, verá que actualmente tiene 4 esquemas de color. Puede agregar tantos como necesite / desee.

Así que para todos los terminales de elegir un esquema de color diferente, me gustaría añadir una función a mi .bash_profileo .bashrco donde sea, de tal manera que la función hace dos cosas:

  1. Calcula cuántas terminales están funcionando actualmente
  2. Emita un dynamic-colors switch colorscheme-namecomando basado en (1).

¡Espero que esto ayude!

PD: Escribiría un guión para ti, pero odio comer con cuchara y soy flojo. :)

theabhinavdas
fuente
bueno ... crear un contenedor / alias para el comando de terminal sería lograrlo.
Vishnu Kumar
@VishnuKumar, sí, esto es lo primero que se me ocurrió, aunque podría no ser la mejor solución. Me alegro de que te guste.
theabhinavdas
+1 para una respuesta correcta, realmente no quiero pelear con "trabajos", pero esta respuesta requiere que use las definiciones de estilo patentadas que utilicé en mi proyecto de colores dinámicos, además (y esto es lo que realmente me atrapó) no no soporta la opacidad: (Creo que la respuesta debería involucrar alguna combinación delgnome-terminal --load-config=FILE
kpie
@kpie, jaja. No es justo, la opacidad no se mencionó en la pregunta. Además, es difícil establecer la opacidad desde la línea de comandos y depende mucho de muchas cosas. Además, esta pregunta puede responderse de varias maneras, pero pensé que mi respuesta era bastante conveniente (aunque solo fuera para mí, jaja) :)
theabhinavdas
Espero poder compensar la selección de punto al proporcionar los scripts necesarios ... github.com/Krewn/stylingTerminalOnOpen Y debo especificar que no admite opacidad variable, los esquemas de color mantendrán la opacidad de su perfil predeterminado.
kpie
1

Konsole en realidad admite esta funcionalidad de forma nativa. Konsole es realmente poderoso y altamente personalizable.

Si no tienes Konsole, entonces simplemente sudo apt install konsole

  1. Ir a la configuración
  2. Configuración de Konsole
  3. Seleccione la pestaña Apariencia
  4. Selecciona tu esquema de color
  5. Seleccione "Editar" a la derecha
  6. Hay un cuadro para configurar "Variar el color de fondo para cada pestaña"

Además de eso, si está trabajando en tres servidores al mismo tiempo, puede incluir algunos alias ingeniosos que se muestran aquí

Matt O.
fuente
+1 para una respuesta correcta pero no tengo konsole. La respuesta de @ <MemoryAddress> admite más interfaces de terminal (cualquiera que admita secuencias de escape OSC). Pero el tuyo es más fácil de usar. Daré la recompensa a quien tenga más votos en un par de días. ¡Gracias por tu respuesta!
kpie
Te sorprendería cuántas personas realmente comentarían aquí diciéndome que necesito decirte cómo instalarlo -_-
Matt O.
¿Leíste los comentarios en las otras respuestas?
kpie
Yo hice. Tal vez me falta algo, pero estás buscando opacidad variable y algo que no requiera alias. Konsole logra ambos, pero no estoy seguro de las secuencias de escape.
Matt O.
1
jaja lo entiendo. No me culpes, después de tener suficientes personas chifladas sugiriendo ediciones, simplemente lo hago automáticamente. No estoy tratando de insultar tu inteligencia.
Matt O.