Ncurses: как обновить меню, не теряя текущую позицию?

Как я могу перезагрузить данные в меню, не теряя текущую позицию?

Например, когда пользователь «выбирает» элемент и выполняется действие, изменяющее данные. (Либо обновляя элемент, либо удаляя его, либо добавляя новый элемент в меню.) Я хочу перезагрузить меню, но по-прежнему держать курсор на только что выбранном элементе. Как лучше всего это сделать?


Для справки, этот вопрос казался очень близким, но я не думаю, что он охватывает проблему добавления/удаления: Как заменить строковый пункт меню в ncurses & C

Этот вопрос также казался похожим, но был слишком конкретным для меня: меню Ncurses - запоминание выбора


person Sauce McBoss    schedule 24.12.2015    source источник
comment
Связанный вопрос: stackoverflow.com/questions/34448130/menu-dividers -в-ncurses/   -  person Sauce McBoss    schedule 24.12.2015


Ответы (1)


Если вы перестраиваете меню, ваша программа должна будет отслеживать, что было «текущим» элементом раньше, и находить его, прежде чем возобновить чтение через getch. Функция getch обновляет экран и позицию, установленную вашей программой. для getch становится видимой позицией курсора.

Обычно вы должны использовать item_index, чтобы спросить библиотеку меню, какой элемент является текущим, и set_current_item< /a>, чтобы сообщить библиотеке меню, на каком элементе будет находиться курсор, но можно выполнять вызовы getch «в любом месте» на экране. Точно так же, если вы перестраиваете меню, эта информация индекса может быть устаревшей.

Без конкретной примерной программы можно дать только общие советы.

person Thomas Dickey    schedule 24.12.2015
comment
Спасибо! Я хотел пока оставить вопрос общим, поэтому этот ответ кажется мне точным. - person Sauce McBoss; 24.12.2015