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

8

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

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

vemv
источник

Ответы:

5

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

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

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

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

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

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

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

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

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

bahamat
источник
7

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

Борис Иванов
источник
3
В эти дни вы захотите новые проклятия, или ncurses.
Steven Monday
Точно. Спасибо за исправления. Я забыл, что они разные.
Борис Иванов
1

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

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

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

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

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

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

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

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

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

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

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

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

Томас Дики
источник