Некоторые приложения, такие как 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
".
Обновление. Это можно найти здесь: Как удалить текст после getstr() c++ ncurses
Пока вы набираете ввод в нижней части окна, а текст в верхней меняется, мы видим проблему перемещения фокуса обратно в нижнюю часть. Этого нет в решениях по состоянию на 29 декабря.
Обновление 1. Просто попытка
является непростым решением: поскольку это разные процессы, попытки восстановить позицию курсора не влияют на изменения, произошедшие во время выполнения другого процесса.
Например, если родитель принимает ввод, то дочерний процесс не знает, как изменилась позиция курсора, и не может восстановить позицию курсора после выполнения строки вывода в другой части консоли.
Реализация этого потребует некоторого межпроцессного взаимодействия, и если есть другие решения, они могут быть предпочтительнее.