Как я могу добавить прокрутку терминала с помощью ncurses?

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

Я хотел бы, чтобы избыточный журнал сворачивался сверху таким образом, чтобы, если пользователь прокрутил свой терминал вверх, он увидел остальную часть журнала. Вот что происходит, когда вы прокручиваете файл с помощью less; он заменяет текущий вид следующей страницей, но текст, который вы передали, заканчивается прокруткой терминала.

Как я могу заставить ncurses сделать это?


person Peeja    schedule 15.11.2009    source источник


Ответы (1)


Оказывается это легко. Я просто поместил окно в верхнюю часть экрана, сделал его прокручиваемым (scrollok) и addstr вводил в него текст, пока оно не прокручивалось. Текст прокручивался сразу в прокрутку без проблем.

person Peeja    schedule 15.11.2009
comment
Похоже, не работает, по крайней мере, с ncurses 5.7 и Mac OS X 10.6 Terminal.app или xterm. :( - person Miles; 13.03.2011
comment
Вы можете взглянуть на мой код здесь: github.com/Peeja/multi_progress_bar. Приносим извинения за длинные URL-адреса, соответствующие строки: github.com/ Peeja/multi_progress_bar/blob/master/lib/ и github.com/Peeja/multi_progress_bar/blob/master/lib/ - person Peeja; 14.03.2011
comment
Спасибо за публикацию, но это дает мне такое же поведение (интерфейс ncurses сразу занимает всю видимую область терминала, и когда программа выходит, исходное содержимое восстанавливается). Стоит отметить, что less ведет себя точно так же на моем компьютере... - person Miles; 14.03.2011
comment
Хм. Вы используете Terminal.app, iTerm или что-то еще? Это может зависеть от эмулятора. - person Peeja; 14.03.2011
comment
Я предполагаю, что Peeja заинтересован в большой прокрутке во время работы приложения, тогда как Майлз хочет, чтобы прокрутка сохранялась после запуска приложения. - person Arafangion; 01.07.2011
comment
Мне вот тоже интересно. Это имеет отношение к моей работе (хотя я не использую NCurses). - person ELLIOTTCABLE; 19.09.2013
comment
Похоже, что большинство эмуляторов терминала перерисовывают/восстанавливают часть экрана, оставляя прокрутку в покое. Здесь у вас есть два варианта: один — отключить функцию альтернативного экрана а-ля stackoverflow.com/questions/8496602/vim-restore-shell-on-exit (который сохранит содержимое на экране; не знаю, как в ncurses, но я уверен, что есть вариант) , а другой - принудительно прокручивать содержимое за пределы верхней части верхнего окна непосредственно перед выходом (что оставит содержимое за пределами верхней части экрана). - person Peeja; 19.09.2013