2012-03-28 4 views
0

keypad(1) 외부와 비슷한 것이 있습니까? Curses? Curses을 사용하지 않고 직접 이스케이프 시퀀스를 처리하지 않고 이와 같은 것을 작성하고 싶습니다. 내가 Term::ReadKey를 사용하는 경우"Curses"를 사용하지 않고 "키패드"와 비슷한 것이 있습니까?

#!/usr/bin/env perl 
use warnings; 
use 5.012; 
use Curses; 

initscr(); 
raw(); 
printw(qq{Press "Delete"}); 
noecho(); 
keypad(1); 
my $c = getch(); 
endwin(); 

if ($c =~ /\A330\z/) { 
    say "OK"; 
} else { 
    say qq{You didn't press "Delete"}; 
} 

는 서로 다른 동작 :

#!/usr/bin/env perl 
use warnings; 
use 5.012; 
use Term::ReadKey; 

ReadMode('raw'); 

print qq{Press "Delete" }; 
while (1) { 
    my $c = ReadKey(0); 
    last if $c eq 'q'; 
    say "<$c>"; 
} 

ReadMode('normal'); 

출력을 "삭제"를 누른 후 :

Press "Delete" < 
<[> 
<3> 
<~> 
+0

[기간 :: ReadKey (https://www.metacpan.org/module/Term :: 제공합니다 ReadKey)는 그것을하지 않습니까? –

+0

그것은하고는 있지만 더 많은 일입니다. –

답변

3

당신이 피하고 싶은 저주에 대해 무엇입니까?

Term::TermKey이 유용 할 수 있습니다. 키보드 제어 문자와 멀티 바이트 이스케이프 시퀀스 및 UTF-8 문자를 처리하는 libtermkey 라이브러리에 대한 Perl 인터페이스입니다.

+0

'Curses'를 사용할 때 Curses를 사용하기 전에 콘솔에 쓴 부분이 보이지 않으므로 Curses를 모두 써야합니다. –

2

이미 Borodin에서 언급 한 바와 같이, Term::TermKey 도움이 될 수 있습니다 :

use warnings; 
use 5.012; 
use Term::TermKey; 

my $tk = Term::TermKey->new(\*STDIN); 

print qq{Press "Delete" }; 
while(1) { 
    $tk->waitkey(my $key); 
    say "<", $tk->format_key($key, 0), ">"; 
} 

Press "Delete" <Delete> 
관련 문제