Используйте stdin вместе с ncurses - PullRequest
2 голосов
/ 03 апреля 2012

Я использую ncurses для простого пользовательского интерфейса, который включает получение информации от пользователя. Ввод - это окно высотой в 1 строку, и все, что есть, это курсор. Я сейчас использую wgetnstr(inputwindow, input, inputlen).

Что я хотел бы, так это уметь редактировать эту строку ввода, так же, как это делает readline. То есть возможность использовать ^ W (^ U работает, кстати), вернуться в буфер и внести изменения и т. Д. Если бы я мог сохранить историю ввода и иметь доступ к ней с помощью стрелки «вверх», это тоже было бы здорово.

Однако я не смог заставить работать stdin ни с чем, кроме функций, которые предоставляет ncurses. Было бы неплохо с моей стороны сбросить inputwindow, если бы это принесло мне вышеуказанные преимущества. Но я не уверен, если это возможно.

Итак,

  • Можно ли использовать readline или иметь такую ​​функциональность, используя ncurses и функцию ввода, которую он обеспечивает? и / или
  • Возможно ли это, и как я могу иметь пустую строку под окном curses, которая позволила бы пользователю вводить данные непосредственно с помощью stdin (то есть все обычные функции ввода для чтения и, следовательно, даже readline напрямую)?

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

1 Ответ

1 голос
/ 03 апреля 2012

ncurses ожидает контролировать весь экран. Смешивание ввода / вывода ncurses с вводом / выводом, отличным от ncurses, возможно, но я бы не рекомендовал делать это.

Если вам нужен ввод стиля readline в программе ncurses, вам нужно будет реализовать его самостоятельно.

Библиотека form (входит в ncurses) позволяет определять формы с редактируемыми полями. Вы должны будете обращаться с историей самостоятельно, хотя. Эти формы могут быть размещены на панелях для более удобного управления размещением на экране.

...