Как динамически переключать цвета терминалов для всех открытых терминалов?

Рассмотрим следующий awk-скрипт:

awk 'BEGIN { IFS=OFS="\t" }
     NR==1 { print "sample_1" OFS "sample_2" OFS "sample_3" OFS "info" }
     NR >1 { four=$4
             for(i=5; i <= NF; i++) four=four"|"$i
             print $1 OFS $2 OFS $3 OFS four }' input

Сценарий состоит из трех разделов:

  1. BEGIN--перед тем, как скрипт прочитает любой ввод, он устанавливает разделитель полей ввода -и вывода -как TAB.
  2. NR==1--это переписывает заголовок, как вы показали.
  3. NR >1--это сворачивает поля четыре и далее для объединения с вкладками (OFS ). Он делает это, инициализируя новое значение полем #4; затем он перебирает оставшиеся поля и добавляет к их значениям символ вертикальной черты. После завершения цикла он печатает заново собранную строку.
0
19.09.2021, 19:59
1 ответ

Настройки терминала GNOME, как и большинства приложений GNOME, хранятся в базе данных dconf. Вы можете использовать команды dconfили альтернативу более высокого уровня gsettingsдля запроса или изменения настроек.

Терминал GNOME поддерживает несколько профилей. Вы не можете указать ему переключить профиль во всех существующих окнах, однако вы можете переопределить свойство профиля в любое время.

Терминал автоматически немедленно фиксирует изменения в базовой базе данных.

Дамп базы данных, например. с помощью dconf dump / > outputfileизмените некоторые значения в диалоговом окне «Настройки» терминала GNOME, затем повторите предыдущую команду и сравните два вывода, чтобы найти различия.

Вы можете программно изменить значения с помощью таких команд, как:

dconf write /org/gnome/terminal/legacy/profiles:/:b1dcc9dd-5262-4d8d-a863-c897e6d979b9/background-color "'rgb(200,210,220)'"

и аналогично для полей foreground-color, palette.

Более стандартная #rrggbbнотация также работает.

Обратите внимание на вложенные кавычки, оболочка удаляет внешние кавычки, тогда как фактическое значение, которое вы устанавливаете, также должно содержать кавычки.

Если вы используете профиль, отличный от -по умолчанию, идентификатор профиля будет другим для вас.


Другой возможный подход:

Escape-последовательности OSC 4, 10, 11 позволяют переопределить время выполнения цветов. Они имеют приоритет над настройками терминала, по крайней мере, в случае терминала GNOME.

Перебрать все записи под /dev/ptsи выдать эту управляющую последовательность для всех из них. Например.:

printf '\e]11;#abcdef\e\\' > /dev/pts/17

Некоторые из этих записей принадлежат другим пользователям, для них вам будет отказано в доступе. Некоторые принадлежат другим терминалам, которые могут не распознавать эту последовательность.

Обратите внимание, что существует вероятность того, что текущая активность в терминале находится в середине многобайтовой последовательности UTF -8 или управляющей последовательности, и вы чередуетесь с ней. В этом случае вы увидите неработающий вывод из приложения, которое работает внутри.

Я бы порекомендовал этот метод тем, чей терминал поддерживает эти последовательности OSC, но не позволяет изменять настройки во время выполнения другими, более безопасными способами.

-1
26.10.2021, 08:52

Теги

Похожие вопросы