NAME "POE::Wheel::TermKey" - terminal key input using "libtermkey" with "POE" SYNOPSIS use Term::TermKey qw( FORMAT_VIM KEYMOD_CTRL ); use POE qw(Wheel::TermKey); POE::Session->create( inline_states => { _start => sub { $_[HEAP]{termkey} = POE::Wheel::TermKey->new( InputEvent => 'got_key', ); }, got_key => sub { my $key = $_[ARG0]; my $termkey = $_[HEAP]{termkey}; print "Got key: ".$termkey->format_key( $key, FORMAT_VIM )."\n"; # Gotta exit somehow. delete $_[HEAP]{termkey} if $key->type_is_unicode and $key->utf8 eq "C" and $key->modifiers & KEYMOD_CTRL; }, } ); POE::Kernel->run; DESCRIPTION This class implements an asynchronous perl wrapper around the "libtermkey" library, which provides an abstract way to read keypress events in terminal-based programs. It yields structures that describe keys, rather than simply returning raw bytes as read from the TTY device. This class is a subclass of POE::Wheel, which internally uses an instance of Term::TermKey to access the underlying C library. For details of on general operation, including the representation of keypress events as objects, see the documentation on "Term::TermKey" instead. Proxy methods exist for normal acessors of "Term::TermKey", and the usual behaviour of "getkey" or other methods is instead replaced by the "InputEvent". CONSTRUCTOR $wheel = POE::Wheel::TermKey->new( %args ) Returns a new instance of a "POE::Wheel::TermKey" object. It takes the following named parameters: Term => IO or INT Optional. File handle or POSIX file descriptor number for the filehandle to use as the connection to the terminal. If not supplied "STDIN" will be used. Flags => INT "libtermkey" flags to pass to the "Term::TermKey" constructor. InputEvent => STRING Name of the session event to emit when a key is received. The event will be given a single argument, the "Term::TermKey::Key" event object, as $_[ARG0]. METHODS $tk = $wheel->termkey Returns the "Term::TermKey" object being used to access the "libtermkey" library. Normally should not be required; the proxy methods should be used instead. See below. $flags = $wheel->get_flags $wheel->set_flags( $flags ) $canonflags = $wheel->get_canonflags $wheel->set_canonflags( $canonflags ) $msec = $wheel->get_waittime $wheel->set_waittime( $msec ) $str = $wheel->get_keyname( $sym ) $sym = $wheel->keyname2sym( $keyname ) ( $ev, $button, $line, $col ) = $wheel->interpret_mouse( $key ) $str = $wheel->format_key( $key, $format ) $key = $wheel->parse_key( $str, $format ) $key = $wheel->parse_key_at_pos( $str, $format ) $cmp = $wheel->keycmp( $key1, $key2 ) These methods all proxy to the "Term::TermKey" object, and allow transparent use of the "POE::Wheel::TermKey" object as if it was a subclass. Their arguments, behaviour and return value are therefore those provided by that class. For more detail, see the Term::TermKey documentation. AUTHOR Paul Evans