Разделение терминала, как экран GNU, программно - PullRequest
1 голос
/ 03 июня 2011

В соответствии с этим (@ Программы, использующие ncurses):

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

и это:

http://aperiodic.net/screen/faq#when_i_split_the_display_and_then_detach_screen_forgets_the_split

Экран обрабатывает разбиение окна, используя termcap (который я едва знаю, как использовать), а не текстовую библиотеку. Я разрабатываю небольшое консольное приложение на C ++, где мне нужно сделать то же самое. Я попытался с ncurses, который является очевидным выбором, но он не поддерживает escape-последовательности ANSI для цветов (http://ascii -table.com / ansi-escape-sequence.php), и я по сути делаю это fork () / exec () 4 оболочки bash в одном и том же tty, что является простым куском в ncurses, но без цветов и множества неудачных escape-последовательностей, которые выглядят как мусор. Такие методы, как printf () и std :: cout, отлично работают с цветами, но в этом случае бесполезны, поскольку ncurses полагается на свои собственные функции, чтобы держать вещи на месте.

Прежде чем предлагать синтаксический анализ escape-последовательностей в ncurses, чтобы раскрасить вывод с помощью собственных атрибутов библиотеки, имейте в виду, что это слишком много работы, и должен быть более элегантный способ справиться с ней (как это делает GNU Screen)

Итак, есть идеи, как это решить?

Заранее спасибо

1 Ответ

3 голосов
/ 03 июня 2011

Вы не можете позволить подчиненным программам создавать свои собственные escape-последовательности.Если вы это сделаете, они уничтожат ваше форматирование экрана.

GNU screen фактически эмулирует свой собственный терминал, то есть анализирует escape-последовательности, выполняет их логику, создает внутреннее представление экрана и затемпередает это на любом терминале, на котором он работает.Это единственный разумный способ сделать это.К сожалению, это много работы.

...