我尝试过这种方式,但它不起作用 - 来自getmaxyx
的返回值始终保持不变。
#!/usr/bin/env perl
use warnings;
use 5.012;
use Curses;
my $size_changed = 0;
$SIG{'WINCH'} = sub { $size_changed= 1; };
initscr();
my ( $row, $col );
getmaxyx( $row, $col );
addstr( "begin: $row - $col\n" );
refresh();
for ( 0 .. 19 ) {
addstr( "-------------\n" );
if ( $size_changed ) {
getmaxyx( $row, $col );
addstr( "new: $row - $col\n" );
$size_changed = 0;
}
refresh();
sleep 1;
}
sleep 3;
endwin();
答案 0 :(得分:1)
对Curses
几乎一无所知,在第一次猜测时我会说你的问题是你打破了$SIG{WINCH}
,因为libcurses
会想要使用它来检测何时窗口可能已经改变了大小。
答案 1 :(得分:1)
#!/usr/bin/env perl
use warnings;
use 5.012;
use Curses;
my $size_changed = 0;
$SIG{'WINCH'} = sub { $size_changed= 1; };
initscr();
my ( $row, $col );
getmaxyx( $row, $col );
addstr( "begin: $row - $col\n" );
refresh();
for ( 0 .. 19 ) {
sleep 2;
if ( $size_changed ) {
endwin();
refresh();
getmaxyx( $row, $col );
addstr( "new: $row - $col\n" );
$size_changed = 0;
}
}
sleep 3;
endwin();
^^^这对我有用。根据{{3}},您应该执行“endwin(),然后执行refresh()”