2016-09-10 2 views
1

Ich versuche, einen Text größer als der Bildschirm zu scrollen.Probleme bei der Verwendung von NewPad mit einer Größe größer als der Bildschirm

Die docs sagen newpad nicht durch die Bildschirmgröße beschränkt ist, sondern es mit Werten größer als die Anschluss verfügbaren Spalten oder Zeilen Initiieren nicht etwas drucken:

newpad(LINES + 1, COLS); // fails 
newpad(LINES, COLS); // works 

Entire Code als Referenz:

extern crate ncurses; 
use ncurses::*; 

fn main() { 
    initscr(); 
    start_color(); 
    use_default_colors(); 
    cbreak(); 
    noecho(); 
    curs_set(CURSOR_VISIBILITY::CURSOR_INVISIBLE); 

    let pad = newpad(1000, COLS); 

    refresh(); 
    let mut x = 0; 
    while x < 1000 { 
     x += 1; 
     wprintw(pad, &format!("Line number {}\n", x)); 
    } 
    prefresh(pad, 0, 0, 0, 0, LINES, COLS); 
    getch(); 
    endwin(); 
} 
+0

Können Sie erklären, was Sie * wollen * und was * passiert *? "Fails" und "Works" sind für diejenigen von uns nutzlos, die kein tiefgreifendes Verständnis für Ihr Programm/ncurses haben. – Shepmaster

+0

Sorry, "Fails" ist ein bisschen ein starkes Wort. Ich meine, es druckt nichts. – vise

Antwort

0

Das Verhalten ist ein bisschen seltsam.

Wenn die Anzahl der Zeilen oder Reihen größer ist als der Darstellungsbereich ist, die letzten beiden prefresh Argumente höchstens LINES - 1 und COLS - 1 bzw. sein muss:

prefresh(pad, 0, 0, 0, 0, LINES - 1, COLS - 1); 

Wenn es weniger ist, gibt es keine Notwendigkeit, 1 zu subtrahieren, wie Der Code wird wie erwartet funktionieren.

+0

Es ist nicht ungerade (siehe [manpage] (http://invisible-island.net/ncurses/man/curs_pad.3x.html)), aber erwartet, da diese Parameter sind Null-basierte und in Fehlerbedingungen sagt es * "if Der zu aktualisierende Bereich erstreckt sich außerhalb des Bildschirms "*". Mit 'LINES, COLS' würde der Bereich um eine Zeile/Spalte erweitert. –

Verwandte Themen