2016-09-10 13 views
1

画面よりも大きなテキストをスクロールしようとしています。画面より大きいサイズのnewpadを使用している問題

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(); 
} 
:参照用

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

全体コード:

ドキュメントはnewpadは画面サイズによって限定されるものではないと言うが、ターミナル使用可能な列や行を超える値でそれを開始するには、何を印刷に失敗します

+0

あなたは*何が起こりたいのか*何が*起こるのかを明確にすることができますか? "失敗"と "仕事"は、あなたのプログラム/ ncursesを深く理解することなく、私たちにとっては基本的に役に立たない。 – Shepmaster

+0

申し訳ありませんが、 "失敗"は強い言葉です。つまり、何も印刷されないということです。 – vise

答えて

0

動作が少し奇妙です。

行または列の数がビューポートより大きい場合は、最後の2つのprefreshの引数は、それぞれで最もLINES - 1COLS - 1でなければなりません:

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

それはあまりだ場合は、1を減算する必要はありません、とコードは期待どおりに動作します。

+0

これは奇妙ではありません([manpage](http://invisible-island.net/ncurses/man/curs_pad.3x.html)参照)、これらのパラメータはゼロベースであり、エラー条件では "ifリフレッシュする領域が画面外に広がります。 'LINES、COLS'では、領域は1行/列だけ延長されます。 –