Подтвердить что ты не робот

Как делают ncurses et. и др. Работа?

Существует несколько библиотек, таких как ncurses, которые помогают создавать графические интерфейсы командной строки.

Проще говоря, как они работают?

Моя первая мысль заключалась в том, что ncurses перехватывает весь ввод на клавиатуре и рисует каждый "кадр", вызывая его по очереди. Однако более тщательный осмотр показывает, что каждый новый кадр перезаписывает предыдущий. Как это изменить строки, которые уже были выведены? Кроме того, как он обрабатывает цвет?

EDIT: тот же вопрос относится ко всему, что имеет "фантастический" интерфейс, например vim и emacs.

4b9b3361

Ответ 1

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

Каждый тип терминала отличается и имеет свой собственный набор последовательностей команд. ncurses имеет базу данных (подробнее см. terminfo)

Внутренне ncurses поддерживает 2 вида экрана: текущее содержимое и то, как должно выглядеть экран после текущих ожидающих изменений. Когда программа запрашивает перерисовку экрана, ncurses вычисляет эффективный способ обновления экрана, чтобы он выглядел как желаемое представление. Точные выходные данные символов/команд зависят от того, какой тип терминала используется.

Ответ 2

curses (и ncurses тоже, я думаю) работает, перемещая курсор на экране. Для выполнения таких действий существуют контрольные последовательности. Взгляните на код еще раз, и вы их увидите. Эти последовательности не являются символами управления ASCII, это строки, начинающиеся с (umm...) ESC, может быть. Посмотрите здесь для объяснения более высокого уровня.