
Как изменить цвет фона терминала таким образом, чтобы использовался ТОЛЬКО протокол терминала и не зависел от ЛЮБОЙ конфигурации (например, «профилей»), хранящейся в конкретной терминальной программе или среде, в которой она работает?
Я хочу иметь возможность написать скрипт, который будет надежно менять цвет фона терминала для любого, кто войдет в систему с помощью терминала и выполнит скрипт.
Быстрый и авторитетный ответ на эффект "это невозможно" будет оценен как решение. Однако такой ответ будет принят только от эксперта, который знает терминальные протоколы досконально и может подтвердить отсутствие такой функции.
решение1
Это невозможно. Я не эксперт, который знает терминальные протоколы досконально, но я знаю о существовании терминалов, которые не имеют возможности изменить цвет фона. Это касается, например, глупых терминалов, таких как предоставленныеожидатьили M-x shell
в Emacs. Это также касается большинства аппаратных терминалов, но в настоящее время ими мало кто пользуется.
Большинство эмуляторов терминала имеют возможность изменить цвет фона. Эмуляторы терминала в целом копируют xterm для интерфейса между приложением и терминалом, поэтому, когда вам нужна такая функция, попробуйте способ xterm и ожидайте, что он будет работать на некоторых, но не на всех эмуляторах терминала. Посмотритепоследовательности управления xtermи посмотрите, подходит ли вам один из них.
Для изменения цвета фона всего терминала естьOSC 11; color BEL
, то есть
printf '\e]11;%s\a' "$color"
Это работает в xterm, urxvt, gnome-terminal, konsole и lxterm, но не в rxvt, xfce4-terminal, terminator или Emacs M-x term
. Изменение цвета фона сохраняется после сброса терминала. Вы также можете изменить цвет переднего плана, заменив 11;
его на 10;
.
Это, конечно, цвет фона по умолчанию. На любом терминале, который поддерживает эту последовательность escape, и на большинстве других терминалов, которые поддерживают цвета в любом случае, вы можете переключить цвет фона для отображаемого впоследствии текста с помощью \e[41m
(для красного).
Если escape-последовательность не поддерживается в терминале, то у вас нет способа узнать это. Вы можете попробовать найти escape-последовательность, которая запрашивает терминал и которая поддерживается в том же наборе терминалов, но обычно такой последовательности нет.
Переключение на обратное видео с помощью, \e[?5h
вероятно, работает на большинстве терминалов, но это не переживает сброс терминала. Вы можете сделать это, а затем установить цвет переднего плана, таким образом, будет визуальный эффект на большинстве терминалов.