2012-03-19 9 views
1

私はこの方法で試してみましたが、動作しません。getmaxyxの戻り値は常に同じです。リサイズされたウィンドウからウィンドウサイズを取得するには?

私は libcursesは、ウィンドウのサイズが変更された可能性がある場合を検出するためにそれを使用したいとしているので、あなたの問題は、あなたが $SIG{WINCH}を破ったということだと思います最初の推測では、 Cursesについてはほとんど何も知らない
#!/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(); 

答えて

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(); 

^^^これは私に役立ちました。 Writing Programs with NCURSES/Using NCURSES under XTERMによると、 "endwin()に続けてrefresh()"を実行すると仮定します。

1

+0

'$ SIG {WINCH} 'を使用する代わりに、古いmax_rows/max_colsと新しいmax_rows/max_cols。 –

+0

あなたと 'Curses'が' SIGWINCH'ハンドラを共有できる方法については、['Signals :: XSIG'](http://search.cpan.org/perldoc?Signals::XSIG)も参照してください。 – mob

+0

サイズ変更イベントを検出する標準的な方法は、 'getch'から仮想' KEY_RESIZE'イベントを監視することです。しかし、あなたはどんなキーストロークも読んでいません。 – cjm

関連する問題