Есть ли что-то похожее на «клавиатуру» без использования «Curses»? - PullRequest
0 голосов
/ 28 марта 2012

Есть ли что-то похожее на keypad(1) снаружи от Curses? Я хотел бы написать что-то вроде этого, но без использования Curses и без обработки escape-последовательностей самостоятельно.

#!/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"};
}

Когда я использую Term::ReadKey, он ведет себя по-другому:

#!/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>
<~>

Ответы [ 2 ]

3 голосов
/ 28 марта 2012

Что такое проклятия, которых вы хотите избежать?

Вы можете найти Term :: TermKey полезным.Это Perl-интерфейс к библиотеке libtermkey , который обрабатывает управляющие символы клавиатуры и многобайтовые escape-последовательности и символы UTF-8.

2 голосов
/ 04 апреля 2012

Как уже упоминалось Бородин , Термин :: 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...