Получить текущую пару цветов терминала в 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 отсутствует в этой области - см. скриншот:

снимок экрана, показывающий Terminal.app и xterm с использованием xtermcontrol

Я не думаю, что большинство терминалов поддерживают сообщение об этом - и похоже, что в 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.

Другие вопросы по тегам