Получить текущую пару цветов терминала в Perl - PullRequest
3 голосов
/ 14 февраля 2011

Я пытаюсь узнать о цветном тексте в окне терминала. (В случае, если это имеет значение, я использую Terminal.app на OS X.) Я хотел бы получить текущую пару цветов переднего плана и фона терминала. Похоже, я смогу получить эту информацию в Perl-скрипте, используя библиотеку Term :: Cap, но решение ускользает от меня.

В скрипте Perl, как запросить текущее значение цвета переднего плана и фона для терминала?

Ответы [ 3 ]

2 голосов
/ 28 декабря 2017

Эта функция выходит за рамки terminfo и termcap, поскольку она имеет дело с ответами терминала , тогда как terminfo / termcap описывают эти возможности:

  • как сказать терминалу, чтобы он выполнял какую-то обычно реализуемую функцию (например, очистку экрана), или
  • какая последовательность символов может * специальная клавиша (например, Home ) отправить с клавиатуры.

Хотя в принципе нет никаких ограничений на то, что может быть частью описания терминала, в 1980-х годах было мало общего между терминалами для ответов . Несколько терминалов могли сообщать о конкретных функциях, большинство из которых были постоянными (например, информация о версии). Большинство переменных ответов пришло после того, как terminfo / termcap более или менее затвердели в X / Open Curses. ncurses расширяет это , но, опять же, большинство расширений являются либо функциями , либо специальными клавишами .

Terminal.app реализует наиболее часто используемые функции xterm, но (как и другие имитаторы) пропускает большинство откликов терминала. Среди прочего, xterm предоставляет ответы терминала, которые могут сообщить приложению, какие цвета окна в настоящее время. Существует пара утилит командной строки (xtermset и xtermcontrol), которые были написаны для использования этой информации. (и опять же, они охватывают только часть репертуара). Использование xtermcontrol показывает, что в этой области отсутствует Terminal.app & mdash; смотреть скриншот:

screenshot showing Terminal.app vs xterm using xtermcontrol

2 голосов
/ 14 февраля 2011

Я не думаю, что большинство терминалов поддерживают сообщение об этом - и похоже, что в termcap или terminfo нет записей для этого. Вы просто ожидаете, что установите пару цветов по мере необходимости, а не спрашивайте терминал, на что он сейчас установлен. В стандарте ECMA-48 (более известном как «ANSI» после ANSI X3.64, где он использовался) единственной командой, которая ссылается на цвет, является SGR «Set Graphic Rendition», которая предназначена только для записи.

1 голос
/ 18 июля 2015

Не знаю о 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 # h2-Operating-System-Controls в частности.

...