Ventanas de terminal codificadas por colores por host

Ventanas de terminal codificadas por colores por host

Trabajo regularmente en diferentes hosts usando ssh y, a veces, me confundo acerca de en qué computadora estoy ejecutando comandos. En ocasiones he estado a punto de emitir comandos halt(8) al host equivocado.

Idealmente, me gustaría codificar con colores la cinta superior de la ventana del terminal según el host en el que estoy conectado actualmente. Utilizo Openbox y gnome-terminal, pero consideraría cambiar a cualquier emulador de terminal que haga que este tipo de cosas sea fácil o al menos posible.

¿Alguien sabe alguna manera de hacer esto? No tengo miedo de trabajar yo mismo si puedes indicarme la forma de cambiar los colores de las ventanas mediante programación.

Respuesta1

Por "colores de ventana", ¿te refieres al color del borde de la ventana? Si es así, dígale a su administrador de ventanas que establezca el color del borde de la ventana según el título de la ventana, ya que la mayoría tiene un patrón de user@host: /path. Sería fácil para él verificar si se trata de una Terminal por su clase de ventana y luego analizar el título cuando cambie y actualizar el color utilizado. pero no conozco los flujos involucrados, así que no sé cuánto trabajo.

pero esto es posible.

(No sé si Openbox podría hacer esto pero después de pensarlo esta es la forma más fácil de hacerlo)

Actualizar:

Después de mirar la fuente de openbox, creo que parchear la framerender_framefunción openbox/framerender.cpara que si la ventana es una Terminal dependiendo del host en el título, se use un tema diferente en lugar del global ob_rr_theme, uno que tenga los colores que desea para esa ventana. él.

[en el contexto de framerender_frame, el título de la ventana podría ser self->client->title]

Hacer esto requeriría cambiarlo framerender_framepara que se refiera a lo global ob_rr_themea través de un local themey requeriría escribir código para cargar el host:mapa temático y los temas adicionales.

en pseudocódigo (es decir, esto no se ejecutará):

RrTheme* theme = ob_rr_theme;
if "gnome-terminal" equals self->client->class: # for example only
    host = parse_title(self->client->title)
    theme = lookup host in by_host if not found use theme
# and then in the rest of framerender_frame use theme instead of ob_rr_theme

donde by_hostlos mapas alojan cadenas a RrThemetemas

información relacionada