получить текст на дисплее с помощью ncurses - PullRequest
3 голосов
/ 17 июня 2010

Есть ли способ вернуть символы, выведенные в переменную на ncurses?

скажем, я делаю:

printw("test");

тогда я хочу иметь возможность:

somefunc(strbuffer);
printf("%s",strbuffer); // test

Мне нужна функция, чтобы вернуть все символы на экране в переменную, scr_dump get закрывается, но формат вывода не читается ..

Ответы [ 2 ]

10 голосов
/ 22 июня 2010

Если вы помещаете вещи на экран, используя функции curses (например, addch, mvaddch, addstr), вы можете использовать inchstr) и связанные с ними функции, чтобы читать символы с экрана (извлекая их с помощью AND ' возвращаем значение с помощью A_CHARTEXT).

Однако, если вы используете printf или любой другой метод, не связанный с curses, для вывода текста на экран (включая системный вызов другой программы, использующей Curses), вы не сможете прочитать содержимое экрана.

Curses поддерживает текущее содержимое экрана внутри, а функции inchstr используют внутреннее представление экрана для поиска текущего содержимого.

0 голосов
/ 16 ноября 2017

Существует два набора функций для извлечения данных с экрана.Если ваш printw использует только (как в вопросе) текст, который представлен в виде 8-битной кодировки (ASCII, POSIX, ISO-8859-1), то inch и inchstr работают:

  • inch извлекает одну ячейку вместе с ее атрибутами
  • inchstr извлекает несколько ячеек вместе с их атрибутами

или более просто, используя instr и его вариации.Эти функции возвращают данные без дополнительной необходимости маскировать атрибуты из символов.

Однако, если данные используют многобайтовую кодировку (например, UTF-8), то для извлечения символов необходимо использовать другой интерфейс.,Это эквиваленты inch и inchstr:

A сложный символ - это структура, которую X / Open Curses считает непрозрачной.Вы должны использовать getcchar для извлечения данных (например, широкий символ строка) из данных каждой ячейки.

A (немного) проще, вы можетечитать из окна информацию о широких символах :

В итоге, в то время как ваше приложение может поместить данные в виде массива char (или отдельных chtype значения), в среде UTF-8 он должен извлекать его как сложные символы или широкие символы .Если вы используете Linux, вы обычно можете рассматривать wchar_t как значения Юникода.Если данные представлены в виде массива wchar_t значений, для получения многобайтовой (UTF-8) строки вы должны использовать другие функции (не являющиеся проклятиями).чем просто curses , уместно указать, что приложения, использующие ncurses, могут отличаться от X / Open Curses тем, как они выводят данные на экран (что может повлиять на ваши ожидания по поводу их получения).В ncurses addch (и аналогичные char -ориентированные функции) будут обрабатывать байты в многобайтовой строке, такой как UTF-8, сохраняя результат в виде широких символов.Ни одна из других реализаций X / Open Curses на сегодняшний день не делает этого.Другие рассматривают эти байты как независимые и могут представлять их как недопустимые широкие символы.

Кстати, с тех пор как вопрос был задан в 2010 году, ncurses 'scr_dump формат былрасширен, делая его «читабельным».

...