Jak znaleźć szerokość terminalu aplikacji o nazwie ncurses?ncurses rozmiar terminalu
Odpowiedz
void getmaxyx(WINDOW *win, int y, int x);
wierzę ...
też może to pomóc ...
Ponadto: Nie zapominaj, że niektóre systemy operacyjne mają SIGWINCH, który twój proces otrzymuje podczas zmiany rozmiaru terminala ... – asveikau
'initscr()' wyczyści ekran. Czy jest jakiś sposób, który może uzyskać rozmiar terminala i nie wyczyścić ekranu? – jiandingzhe
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." –
Co na temat korzystania SCR_H
i SCR_W
?
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);
To nie jest zbyt ncurses'ish. – einpoklum
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:
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ż.
@DylanJ, nie ma potrzeby umieszczania odpowiedzi w pytaniu, szczególnie po zaakceptowaniu odpowiedzi. – paxdiablo