Цветовая маркировка окон терминала хостом

Цветовая маркировка окон терминала хостом

Я регулярно работаю на разных хостах, используя ssh, и иногда путаю, на каком компьютере я запускаю команды. Иногда я был близок к тому, чтобы выдать команды halt(8) неправильному хосту.

В идеале я бы хотел сделать верхнюю ленту окна терминала цветной в зависимости от того, на каком хосте я сейчас вошел. Я использую Openbox и gnome-terminal, но рассмотрел бы возможность перехода на любой эмулятор терминала, который делает такие вещи простыми или, по крайней мере, возможными.

Кто-нибудь знает, как это сделать? Я не боюсь делать работу самостоятельно, если вы можете указать мне способ программной смены цвета окон.

решение1

Под «цветами окон» вы подразумеваете цвет границ окна? Если так, то скажите своему оконному менеджеру задать цвет границ окна на основе заголовка окна, так как большинство из них имеют шаблон user@host: /path. Ему было бы легко проверить, является ли это Терминалом, по его классу окна, а затем проанализировать заголовок, когда он изменится, и обновить используемый цвет. Но я не знаю задействованных потоков, поэтому не знаю, сколько работы потребуется.

но это возможно.

(не знаю, может ли Openbox сделать это, но если подумать, то это более простой способ)

Обновлять:

Посмотрев на исходный код Openbox, я думаю, что нужно исправить функцию framerender_frameтак, openbox/framerender.cчтобы, если окно является Терминалом, в зависимости от хоста в заголовке, вместо глобальной использовалась другая тема ob_rr_theme, в которой есть нужные вам цвета для этого окна.

[в контексте framerender_frameзаголовок окна может быть self->client->title]

для этого потребуется внести изменения framerender_frameтаким образом, чтобы он ссылался на глобальный объект ob_rr_themeчерез локальный объект theme, а также потребуется написать код для загрузки карты host:theme и дополнительных тем

в псевдокоде (т.е. это не будет работать):

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

где by_hostсопоставляет строки хоста с RrThemeтемами

Связанный контент