Мясо
В (некоторых) терминалах вы можете использовать последовательность, подобную этой;
printf "\e]4;3;rgb:cc/78/33\e\\"
установить третий цвет в цветовой палитре ANSI равным значениям RGB, представленным # CC7833. Вы можете сделать наоборот? Могу ли я получить текущее значение RGB (в любой форме) третьего (ну, действительно, любого) цвета?
Зачем?
Причина, по которой вы захотите сделать это, в моем случае, состоит в том, чтобы иметь возможность сохранить всю таблицу цветов перед тем, как испортить ее (специально). Я хочу иметь возможность перечислять код в терминале, используя точную цветовую тему RGB, назовите меня анальным. Чтобы сделать это, я должен переопределить определения цвета в таблице цветов терминала, как указано выше.
Для меня проблема сейчас решена. Но так как я хочу добавить эту функциональность в существующий проект с открытым исходным кодом (pry), используемый многими людьми, мне нужно иметь возможность сохранить текущее состояние цветовой палитры перед настройкой цветов темы для сеанса программ, а затем переключать их назад после.
Я знаю, что некоторые терминалы имеют это в настройках, а некоторые системы имеют это в конфигурационных файлах. Но мне нужно что-то общее и работающее в разных системах. В идеале все системы, которые поддерживают настройку их указанным выше способом :)
бонус
Прямо сейчас изменение цвета влияет на всю систему, на все сеансы терминала, даже после закрытия и перезапуска терминала (это использует iTerm2 на OS X Mountain Lion).
Если эффект можно сделать локальным, скажем, для вспомогательной оболочки, проблема исчезнет, поскольку изменения завершатся с вложенной оболочкой после завершения процесса. Еще лучше, поскольку это защитит от случаев, когда сессия потерпела крах ...