Эмулятор терминала, который позволяет динамически менять цвет фона - PullRequest
2 голосов
/ 25 сентября 2011

В настоящее время я пытаюсь найти эмулятор терминала для системы на основе Linux, который позволяет мне менять фон в зависимости от того, какое приложение я запускаю. Я думаю, что это должно быть довольно легко сделать с некоторой escape-последовательностью OSC, но я не могу найти документацию о существовании какого-либо терминала, поддерживающего его.

Есть предложения?

Ответы [ 3 ]

5 голосов
/ 26 сентября 2011

Если ваш эмулятор терминала поддерживает стирание фона цвета (BCE), вы можете использовать escape-последовательность «erase display» для установки цвета фона дисплея.Например, это устанавливает красный фон в bash:

tput setab 1; tput clear

tput setab 1 устанавливает «Цвет фона ANSI» в 1 (красный).put clear очищает экран, обычно с помощью кодов, чтобы переместить курсор в верхний / левый угол и очистить дисплей.Если вы не хотите стирать весь экран, вы можете просто стереть его с текущей строки до конца экрана:

tput setab 1; tput ed

Если ваш эмулятор терминала поддерживает BCE, различные команды, которые очищают частидисплей заполнит очищенную область текущим цветом фона.Вы можете сказать, поддерживает ли ваш эмулятор терминала BCE, используя tput:

tput bce && echo Yes || echo No

. Если BCE поддерживается, будет отображаться «Да».

Чтобы использовать это, вы можете использовать shellфункции (или файлы сценариев), чтобы обернуть команды, для которых вы хотите установить цвет.Например, в bash это при установке ssh будет отображать синий цвет:

ssh () {
    trap 'tput sgr0; tput ed' RETURN;
    tput setab 4; tput ed
    command ssh $*;
}

Использование trap гарантирует, что он сбрасывает цвет фона (и другие текстовые атрибуты), когда функция возвращается.Я использовал tput ed здесь, поэтому он влияет только на цвет фона вывода строк при запуске команды ssh.Вы можете использовать tput clear, если вы предпочитаете заполнить весь экран, и вы не против стереть текущее содержимое в начале (и / или конце) команды.

Конечно, если что-тосделать с удаленным хостом цвет фона, он переопределит ваш цвет.

1 голос
/ 23 сентября 2013

Вы можете сделать это с помощью xterm, используя xtermset:

xtermset -bg darkred

или xtermcontrol:

xtermcontrol --bg=darkred
0 голосов
/ 24 декабря 2018

Я использую терминал xfce для cmus, и меняю фон, основываясь на обложке. Для изменения фона я использую sed - sleep - sed, чтобы понять, что изображение изменилось (хотелось бы узнать лучше):

sed -i "s:/path/to/old/image:null:g" $HOME/.config/xfce4/terminal/terminalrc ; \
    sleep 1; \
    sed -i "s:null:/path/to/new/image:g" $HOME/.config/xfce4/terminal/terminalrc 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...