Как работают няни и др. и др. Работа? - PullRequest
15 голосов
/ 26 сентября 2011

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

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

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

РЕДАКТИРОВАТЬ: тот же вопрос относится ко всему с "причудливым" интерфейсом, как vim и emacs.

Ответы [ 2 ]

17 голосов
/ 27 сентября 2011

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

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

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

5 голосов
/ 26 сентября 2011

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

...