2012-03-19 4 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