Я регулярно работаю на разных хостах, используя 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
темами