Окно внизу
Некоторые приложения, такие как vim, mutt, aptitude, содержат
- верхний раздел окна для вывода и
- нижний раздел для ввода пользователем или для отображения состояния.
(Предположим, что есть один дочерний процесс для вывода, а другой - для ввода пользователя. Цель состоит в том, чтобы разрешить обновленный вывод одновременно с вводом ввода или просмотром состояния.)
Actions Undo Package Resolver Search Options Views Help
C-T: Menu ?: Help q: Quit u: Update g: Download/Install/Remove Pkgs
|
|
|
|
|
┌─────────────┐ |
│Loading cache│ |
└─────────────┘ |
|
|
|
|
|
|
|
--------------------------------------------------------------------------- |
Initialising package states 100% |
+-------------------------------------------------------+
| some output here |
| |
| |
| |
| |
| |
|-------------------------------------------------------+
|:input here |
+-------------------------------------------------------+
Учебник Ncurses не упоминает, что это очевидно.
Запрос на "c print to {window, screen, terminal, console} bottom" в StackOverflow или в поисковой системе не помогает.
Можно ли это сделать на C программно?
Отбрасывание ввода
В то время как некоторые из приведенных ниже решений могут перемещать символ в заданную позицию, существует проблема, что может потребоваться отменить ввод пользователя, а не оставить его на экране. Как и в случае vim
, набрав ":w
" и нажав Enter, не оставит на экране ":w
".
Update. Это можно найти здесь: Как удалить текст после getstr() С++ ncurses
Оконный фокус - НЕОПРЕДЕЛЕННАЯ ЧАСТЬ ПРОБЛЕМЫ
Пока вы вводите ввод в нижней части окна, а текст в верхней части изменяется, мы видим проблему перемещения фокуса назад. Это отсутствует в решениях по состоянию на 29 декабря.
Обновление 1. Просто попробуйте
- запомнить предыдущую позицию курсора, затем
- отобразить вывод, а затем
- восстановить позицию
не простое решение: поскольку это разные процессы, попытки получить позицию курсора не влияют на изменения, произошедшие во время выполнения другого процесса.
Например, если родитель принимает вход, тогда ребенок не знает, как изменилось положение курсора и не может восстановить позицию курсора после выполнения строки вывода в другой части консоли.
Реализация этого будет связана с некоторой межпроцессной связью, и если есть другие решения, они могут быть предпочтительнее.
Похожие
- Получить ввод с клавиатуры, не дожидаясь ввода Связанный, но недостаточно конкретный.
- Как сделать чат, как пользовательский интерфейс, используя Python Urwid? Урвид для Python, который выполняет эту работу (за J.F. Sebastian в комментарии ниже). К сожалению, не в C.