Правильный способ перекрасить весь экран?

Я не понимаю, какие функции использовать для перекраски экрана, когда пользователь нажимает Ctrl-L или Ctrl-R. Какая разница между использованием clearok(), redrawwin(), или же wrefresh() с curscr как аргумент? Из справочных страниц OpenBSD:

Если clearok вызывается с TRUE в качестве аргумента, следующий вызов wrefresh с этим окном полностью очистит экран и перерисовает весь экран с нуля. Это полезно, когда содержимое экрана неопределенное, или в некоторых случаях для более приятного визуального эффекта. Если в качестве аргумента win для clearok используется глобальная переменная curscr, то следующий вызов wrefresh для любого окна приводит к очистке и перерисовке экрана с нуля.

Если аргумент win для wrefresh является глобальной переменной curscr, экран немедленно очищается и перекрашивается с нуля.

Подпрограмма wredrawln указывает проклятиям, что некоторые строки экрана повреждены и должны быть выброшены, прежде чем что-либо будет записано поверх них. Касается указанных линий (пометка их изменена). Подпрограмма redrawwin () касается всего окна.

2

Решение

«OpenBSD manpages» являются Ncurses. Связки клавиш не имеют значения.
Вы спрашивали о трех функциях:

  1. clearok (),
  2. redrawwin (), или же
  3. wrefresh () с curscr в качестве аргумента?

Но они разные

  • с clearok()вы не говорите проклятиям, что вы потеряли след на том, что на экране, но говорите, что лучше очистить это (и проклятия сделают это), но
  • redrawwin() перекрашивает не весь экран, а окно. Ваше приложение может сделать это, если оно имитирует библиотеку панелей, перекрывая некоторые окна и желая «поднять» затемненное окно над остальными. В заключение,
  • освежающий curscr явно говорит проклятия, чтобы обойти обычную последовательность печати в окне или на stdscr, затем применяя изменения из stdscr на newscr, и применяя различия между newscr а также curscr в curscr. Что касается проклятий, curscr имеет все, что положено на физический экран. Поэтому, когда вы модифицируете curscr, curses обновляет физический экран, как только его просят обновить.

Для чего это стоит, curscr функция предшествует ncurses, хотя я должен был бы указать на исходный код чтобы показать это. Это упоминается в этом запись в журнале изменений за 1995 год хоть:

src/curses/resizwin.c:
обновить curscr для принудительного обновления экрана в ncurses

7

Другие решения

Обычно то, что происходит при нажатии Ctrl + L или Ctrl + R, зависит от вашей оболочки или используемой программы, в этом случае программа отправит последовательность символов, которую ваш терминал будет интерпретировать, когда (терминал) очистит ваш экран.

Как получить эту последовательность:

#include <curses.h>
#include <term.h>
#include <termios.h>
#include <sys/ioctl.h>

void init_term(void)
{
static struct termios term_new;

setupterm(NULL, 1, NULL);
ioctl(0, TCGETS, &term_new);
}int             main(void)
{
// init the ncurses
init_term();
// get the sequence for "clear" command then print it
printf("%s", tigetstr("clear"));
// and flush the buffer
fflush(stdout);
return (0);
}
0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector