2009-11-28 23 views
12

Wie finde ich die Terminalbreite & Höhe einer Ncurses-Anwendung?ncurses Terminalgröße

+0

@DylanJ, keine Notwendigkeit, die Antwort in die Frage zu stellen, vor allem, wenn Sie die Antwort akzeptiert haben. – paxdiablo

Antwort

13
+1

Außerdem: Vergessen Sie nicht, dass einige Betriebssysteme SIGWINCH haben, die Ihr Prozess empfängt, wenn die Größe des Terminals geändert wird ... – asveikau

+0

'initscr()' wird den Bildschirm löschen. Gibt es eine Möglichkeit, Terminalgröße zu erhalten und den Bildschirm nicht zu löschen? – jiandingzhe

+0

Nicht sicher, dass dies wahr ist, weil 'y' und' x' keine Zeiger sind und daher die Funktion nichts an sie kopiert. Und von 'mkssoftware.com':" 'getbegyx() und getmaxxyx() Makros speichern die aktuellen Anfangskoordinaten und die Größe des angegebenen Fensters." –

0

Was SCR_H und SCR_W mit?

0

ich verwende diesen Code:

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

Das ist nicht sehr ncurses'ish. – einpoklum

3

ncurses Anwendungen normalerweise SIGWINCH handhaben und die ioctl mit TIOCGWINSZ verwenden den System Begriff der Bildschirmgröße zu erhalten. Dies kann durch die Umgebungsvariablen LINES und COLUMNS übersteuert werden (siehe use_env).

Da die ncurses globalen Variablen LINESCOLS und werden als Nebenwirkung aktualisiert, wenn wgetch kehrt KEY_RESIZE (in Reaktion auf ein SIGWINCH), um die Größe des stdscr (das Standardbild den ganzen Terminal darstellt) erhalten wird.

Sie können natürlich getmaxx, getmaxy und getmaxyx verwenden, um eine oder beide Grenzwerte für die X- und Y-Koordinaten eines Fensters zu erhalten. Nur der letzte ist Standard (und portabel).

Weiterführende Literatur:

0

die Variablen COLS, LINES auf die Bildschirmgrößen nach initscr initialisiert werden().

Quelle: NCURSES Programming HOWTO

Ich bin mir nicht sicher, ob sie allerdings auf Resize aktualisiert.