Используют ли приложения командной строки, такие как emacs, обычный stdin / stdout? - PullRequest
4 голосов
/ 10 декабря 2010

Почти все приложения, которые я когда-либо писал, представляли собой графические интерфейсы той или иной формы - HTML / Flex / Swing - и большая часть моих приложений командной строки была чрезвычайно простой, без особого взаимодействия.Самое лучшее, что я когда-либо делал, - это создание простой ascii-игры, которая просто выполняет цикл печати / ввода, снова и снова печатая игровое поле.

Я думал о том, чтобы сделать что-то более сложное,было действительно любопытно, как работают некоторые из более продвинутых приложений командной строки, таких как emacs.В частности, я понятия не имею, как они, похоже, могут иметь интерактивную командную строку, которая реагирует на нажатия клавиш и, кажется, просто работает с буфером в терминале, вместо того, чтобы постоянно проходить через цикл print-> read-> print.Это все просто stdin / stdout kung fu, о котором я не знаю, или это что-то совершенно другое?

Обновление - Я хочу пояснить, что я не пытаюсь спроситьширокий вопрос здесь, возможно, мне просто трудно найти правильные слова.По сути, я не знаю, как заставить emacs работать с использованием stdin / stdout.Использует ли это какой-то механизм, о котором я не знаю, и если да, то что?

1 Ответ

2 голосов
/ 10 декабря 2010

Вы правы, что это не просто стандартный вывод для такой программы. Обычно это библиотека управления терминалами , такая как curses .

Некоторые другие произвольно выбранные библиотеки включают в себя:

См. Также Текстовый пользовательский интерфейс в Википедии.

Я не очень знаком с использованием какой-либо из этих библиотек, но текущая версия terminfo.c в источнике emacs содержит следующий комментарий, предполагающий, что они используют curses:

/* Interface to curses/terminfo library.
   Turns out that all of the terminfo-level routines look
   like their termcap counterparts except for tparm, which replaces
   tgoto.  Not only is the calling sequence different, but the string
   format is different too.
*/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...