Получить текущую пару цветов терминала в Perl
Я пытаюсь узнать о цвете текста в окне терминала. (В случае, если это имеет значение, я использую Terminal.app на OS X.) Я хотел бы получить текущую пару цветов переднего плана и фона терминала. Похоже, я смогу получить эту информацию в Perl-скрипте, используя библиотеку Term::Cap, но решение ускользает от меня.
В Perl-скрипте, как бы я запросил текущее значение пары переднего плана и цвета фона терминала?
3 ответа
Эта функция выходит за рамки terminfo и termcap, поскольку она имеет дело с ответами терминала, тогда как terminfo/termcap описывают эти возможности:
- как сказать терминалу, чтобы он выполнял какую-то общепринятую функцию (например, очистку экрана), или
- какую последовательность символов может послать какая-то специальная клавиша (например, Home) с клавиатуры.
Хотя в принципе нет ограничений на то, что может быть частью описания терминала, в 1980-х годах между терминалами было мало общего для ответов. Несколько терминалов могли сообщать о конкретных функциях, большинство из которых были постоянными (например, информация о версии). Большинство переменных ответов пришло после того, как terminfo/termcap более или менее затвердели в X / Open Curses. ncurses расширяет это, но опять же, большинство расширений являются либо функциями, либо специальными ключами.
Terminal.app реализует наиболее часто используемые функции xterm
, но (как и другие имитаторы) опускает большинство ответов терминала. Среди прочего, xterm
предоставляет ответы терминала, которые могут сообщить приложению, какие цвета окна в настоящее время. Есть пара утилит командной строки (xtermset
а также xtermcontrol
), которые были написаны для использования этой информации (и опять же, они охватывают только часть репертуара). С помощью xtermcontrol
демонстрирует, что Terminal.app отсутствует в этой области - см. скриншот:
Я не думаю, что большинство терминалов поддерживают сообщение об этом - и похоже, что в termcap или terminfo нет записей для этого. Вы просто должны установить пару цветов по мере необходимости, а не спрашивать терминал, на что он сейчас установлен. В стандарте ECMA-48 (более известном как "ANSI" после ANSI X3.64, где он использовался) единственной командой, которая ссылается на цвет, является SGR "Set Graphic Rendition", которая предназначена только для записи.
Не знаю о perl или Terminal.app, но xterm и т. Д. Напишет последовательности управления цветом переднего плана / фона в stdin, если вы выводите "\033]10;?\07"
или же "\033]11;?\07"
соответственно. В частности, ознакомьтесь с http://invisible-island.net/xterm/ctlseqs/ctlseqs.html, http://invisible-island.net/xterm/ctlseqs/ctlseqs.html.