The Perl and Raku Conference 2025: Greenville, South Carolina - June 27-29 Learn more

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 <leonerd@leonerd.org.uk>