Какой графический API у терминала?

Какой графический API у терминала?

Как некоторые программы могут задавать цвета фона и шрифта, а также записывать символы в одно и то же место на экране (например, в третью строку, пятый столбец) более одного раза?

Примерами могут служить индикатор выполнения, отображаемый curl google.com > a, некоторые экраны установки и практически любой текстовый редактор.

решение1

То, о чем вы спрашиваете, на самом деле не является графическим API, это просто символы управления терминалом.

За этим стоит долгая история, но терминалы в те времена былиТелетайпМашины. По сути, это пишущая машинка с дорожкой подачи бумаги, подключенная к компьютеру через последовательный порт. Печать символа отправляла это двоичное значение на компьютер (а также печатала его на странице). Компьютер печатал символы обратно в качестве вывода того, что вы запросили.

Специальные символы использовались для управления терминалом (отсюда и клавиша управления, она была для создания этих символов). Например, ^Hили ^?будет возвратом на одну позицию, ^Mвозвратом каретки (перемещает курсор в начало строки) и ^Jпереводом строки (перемещением страницы на одну строку вверх). Некоторые коды управления имеют escape-последовательность в C (которая используется почти во всех языках программирования) для создания управляющих символов. Перечисленные ранее элементы управления будут \b, \r, \nсоответственно.

Theэмулятор терминалавы используете сегодня, это именно то, что вы слышите, это программное обеспечение, которое притворяется старым телетайпом. В некотором смысле, это почти как если бы Unix все еще думал, что вы используете пишущую машинку, чтобы общаться с ним.

В случае curl, он пишет всю строку, затем отправляет \r(возврат каретки), переводя курсор в начало строки, затем пишет еще одну строку. Поскольку перевод строки не отправляется, он продолжает писать поверх той же строки на экране.

Вот что вы можете попробовать продемонстрировать:

echo -n  "First" ; sleep 5 ; echo -en "\rSecond\n"

Вы увидите, что слово "First" напечатано (но новая строка не отправлена). Через 5 секунд оно будет заменено словом "Second" и отправлена ​​новая строка. Вы можете повторять этот шаблон бесконечно. Попробуйте добавить "Third" самостоятельно, вы увидите то, чего, вероятно, не ожидали ;-)

Более подробную информацию об этих и других управляющих символах смотрите в ascii(7)руководстве.

решение2

Вы ищете что-то вродеncurses?

решение3

Этот вопрос на самом деле состоит из нескольких вопросов, и"управляющие символы"затрагивает только небольшую его часть, например, индикатор выполнения для curl. В более общем смысле, это общие функции терминалов (и эмуляторов терминалов).

Большинство из этих общих функций стандартизированы вECMA-48: Функции управления для кодированных наборов символов. Однако другие особенностинет. Они определяются реализацией.

ECMA-48 относится кфункции управления. Это включаетуправляющие символыиконтрольные последовательности(часто называемые escape-последовательностями, последовательностями ANSI и т. д.).

Некоторые управляющие символы используются дляпростойоперации, например,

  • переместить курсор в предыдущий столбец в той же строке
  • переместить курсор в первый столбец той же строки
  • переместить курсор на следующую позицию табуляции в той же строке
  • переместить курсор на следующую строку (и прокрутить экранеслина последнем ряду уже)

Прогресс-бар для curlпостроен с использованием этих простых операций. Но управляющие символы могут делать только определенное количество, не больше. Управляющие последовательности делают больше, например,

  • переместите курсор в любую строку/столбец на экране
  • переместите курсор в любую строку в том же столбце на экране
  • переместите курсор в любой столбец в той же строке на экране
  • установить табуляторы в любом столбце на экране
  • переместить курсор на предыдущую строку
  • сделать прокрутку экрана вверх или вниз без перемещения курсора

Вот вам и параллели между простым и сложным. Управляющие последовательности также используются для изменения цвета текста и фона, стирания текста с экрана, показа текста в обратном виде (или жирным шрифтом, подчеркиванием, миганием).

Программы, которые рисуют обратный видео (или цветной) индикатор выполнения, используютконтрольные последовательности.

Хотя управляющие последовательности могут делать больше, они могут делать только определенные вещи. Собрать их вместе, чтобы сделать текстовые редакторы, экраны установки (и программы, которые рисуют цветные полосы прогресса), становится сложно. Часть этого упрощается за счет использования библиотек, которые знают об этих вещах. Изначально у нас был termcap (и база данных из нескольких сотен типов терминалов), расширенный до terminfo (и база данных из примерно тысячи типов терминалов).

Даже при стандартизации существуют десятки описаний терминалов, которые вы могли быиспользовать. Поэтому мы продолжаем использовать библиотеки для всех, кроме самых тривиальных из этих приложений. Одна из них — ncurses ("new-curses"), другая — slang (технически "S-Lang").

Дальнейшее чтение:

Связанный контент