使用尺寸大于屏幕的 newpad 时出现问题
Problems using newpad with a size larger than the screen
我正在尝试滚动一些比屏幕大的文本。
文档说 newpad
不受屏幕大小的限制,但是使用大于终端可用列或行的值启动它时无法打印任何内容:
newpad(LINES + 1, COLS); // fails
newpad(LINES, COLS); // works
完整代码供参考:
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();
}
行为有点奇怪。
如果行数或行数大于视口,则最后两个prefresh
参数最多必须分别为LINES - 1
和COLS - 1
:
prefresh(pad, 0, 0, 0, 0, LINES - 1, COLS - 1);
如果小于,则无需减去 1,因为代码会按预期工作。
我正在尝试滚动一些比屏幕大的文本。
文档说 newpad
不受屏幕大小的限制,但是使用大于终端可用列或行的值启动它时无法打印任何内容:
newpad(LINES + 1, COLS); // fails
newpad(LINES, COLS); // works
完整代码供参考:
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();
}
行为有点奇怪。
如果行数或行数大于视口,则最后两个prefresh
参数最多必须分别为LINES - 1
和COLS - 1
:
prefresh(pad, 0, 0, 0, 0, LINES - 1, COLS - 1);
如果小于,则无需减去 1,因为代码会按预期工作。