2014-10-05 3 views
1

Терминальные текстовые редакторы, такие как emacs, vim, joe или даже nano, имеют возможность отображать произвольные элементы пользовательского интерфейса внутри командной строки без полного переписывания всего пользовательского интерфейса каждый раз, но переписывая то, что в настоящее время является их интерфейсом.Как реализован интерфейс пользовательских текстовых редакторов?

С регулярными выходными потоками вы можете использовать только возвращаемый символ '\r', чтобы перейти к началу текущей строки вывода и написать над ним, но из того, что я нашел, вы не можете вскакивать по нескольким линиям, cout << "\r\r\r\r\r\r"; имеет тот же эффект, как cout << '\r', поэтому все, за которым следует новая линия, очевидно, брошено в камень.

Другие приложения делают что-то подобное, например $dpkg-reconfigure ca-certificates на Ubuntu или aptitude графический менеджер пакетов. Они также рисуют контуры элементов интерфейса, которые, вероятно, являются просто специальными символами. Но все же им придется перезаписать несколько строк вывода консоли.

Как они это делают? Является ли поведение переносимым для платформ Windows?

+0

Вероятно, реализация для каждого эмулятора терминала различна. –

+0

@AndersonGreen Из того, что я прочитал, похоже, существуют escape-последовательности ANSI, которые позволяют установить курсор на терминал в произвольное положение. Curses или Ncurses обертывают эти последовательности в удобный интерфейс, поэтому вы можете написать более портативный код. – iFreilicht

ответ

3

Вы обнаружите, что эти программы зависят от библиотеки под названием Ncurses:

http://en.wikipedia.org/wiki/Ncurses

Есть сборки доступны практически для всех операционных систем.

+1

Это было ключевое слово, в котором я нуждался. Хороший вопрос о SO относительно этого: http://stackoverflow.com/questions/7558348/how-do-ncurses-et-al-work – iFreilicht

2

curses - это библиотека unix, которая позволяет вам манипулировать содержимым терминала в произвольных положениях. ncurses - бесплатная независимая от поставщика версия проклятий и библиотека curses, используемая в Linux.

dpkg-reconfigure использует диалог, который строится поверх проклятий и предоставляет виджеты пользовательского интерфейса вместо необработанного доступа к терминалу.

ncurses включает в себя расширения «меню», «формы», «панель», которые вы можете использовать для самостоятельного создания виджета пользовательского интерфейса, хотя он очень быстро становится очень сложным, если вы идете по этому маршруту.

Что касается окон, то есть pdcurses, который запускается изначально в терминале «dos box». Вы можете писать переносные программы, которые используют pdcurses на windows и ncurses на linux, если вы ограничиваете себя общим подмножеством. Кроме того, вы можете использовать ncurses для Windows, используя cygwin.

Другой альтернативой для окон может быть Borlands TVision - если вы можете найти старую версию турбо-паскаля Borland или компилятора C++, они включают полную инфраструктуру приложения для текстовых пользовательских интерфейсов, называемых TVision. Не уверен, что код, созданный ими, все равно будет работать в современных версиях Windows.

Смежные вопросы