2009-11-28 9 views

Odpowiedz

13
+1

Ponadto: Nie zapominaj, że niektóre systemy operacyjne mają SIGWINCH, który twój proces otrzymuje podczas zmiany rozmiaru terminala ... – asveikau

+0

'initscr()' wyczyści ekran. Czy jest jakiś sposób, który może uzyskać rozmiar terminala i nie wyczyścić ekranu? – jiandingzhe

+0

Nie jestem pewien, czy to prawda, ponieważ 'y' i' x' nie są wskaźnikami i dlatego funkcja nie skopiuje do nich niczego. I od 'mkssoftware.com':" 'makra getbegyx() i getmaxyx() przechowują bieżące współrzędne początkowe i rozmiar określonego okna." –

0

Co na temat korzystania SCR_H i SCR_W?

0

używam tego kodu:

struct winsize size; 
if (ioctl(0, TIOCGWINSZ, (char *) &size) < 0) 
    printf("TIOCGWINSZ error"); 
printf("%d rows, %d columns\n", size.ws_row, size.ws_col); 
+0

To nie jest zbyt ncurses'ish. – einpoklum

3

ncurses aplikacje normalnie obsługiwać SIGWINCH i użyć ioctl z TIOCGWINSZ aby uzyskać pojęcie systemu z rozmiaru ekranu. Może to być przesłonięte przez zmienne środowiskowe LINES i COLUMNS (patrz use_env).

Biorąc pod uwagę, że zmienne globalne LINES ncurses i COLS są aktualizowane jako efekt uboczny podczas wgetch powraca KEY_RESIZE (w odpowiedzi na SIGWINCH) otrzymując wielkość stdscr (standardowy ekran reprezentujący cały terminal).

Można oczywiście użyć getmaxx, getmaxy i getmaxyx, aby uzyskać jedną lub obie wartości graniczne dla rzędnych xi y okna. Tylko ostatni jest standardowy (i przenośny).

Dalsze informacje:

0

zmienne kolumny, W linii są inicjowane wielkości sita po initscr().

Źródło: NCURSES Programming HOWTO

Nie jestem pewien, czy one aktualizowane na zmiany rozmiaru chociaż.