Строка ввода внизу консоли в C

Окно внизу

Некоторые приложения, такие как 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. Просто попытка

  • запомнить предыдущую позицию курсора, затем
  • вывести вывод, а затем
  • восстановить позицию

является непростым решением: поскольку это разные процессы, попытки восстановить позицию курсора не влияют на изменения, произошедшие во время выполнения другого процесса.

Например, если родитель принимает ввод, то дочерний процесс не знает, как изменилась позиция курсора, и не может восстановить позицию курсора после выполнения строки вывода в другой части консоли.

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

Связанное

19
задан Community 23 May 2017 в 12:25
поделиться