Scroll to navigation

AnyEvent::TermKey(3pm) User Contributed Perl Documentation AnyEvent::TermKey(3pm)


"AnyEvent::TermKey" - terminal key input using "libtermkey" with "AnyEvent"


 use AnyEvent::TermKey qw( FORMAT_VIM KEYMOD_CTRL );
 use AnyEvent;
 my $cv = AnyEvent->condvar;
 my $aetk = AnyEvent::TermKey->new(
    term => \*STDIN,
    on_key => sub {
       my ( $key ) = @_;
       print "Got key: ".$key->termkey->format_key( $key, FORMAT_VIM )."\n";
       $cv->send if $key->type_is_unicode and
                    $key->utf8 eq "C" and
                    $key->modifiers & KEYMOD_CTRL;


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.

It internally uses an instance of Term::TermKey to access the underlying C library. For details on general operation, including the representation of keypress events as objects, see the documentation on that class.

Proxy methods exist for normal accessors of "Term::TermKey", and the usual behaviour of the "getkey" or other methods is instead replaced by the "on_key" event.


$aetk = AnyEvent::TermKey->new( %args )

This function returns a new instance of a "AnyEvent::TermKey" object. It takes the following named arguments:

Optional. File handle or POSIX file descriptor number for the file handle to use as the connection to the terminal. If not supplied "STDIN" will be used.
CODE reference to the key-event handling callback. Will be passed an instance of a "Term::TermKey::Key" structure:

 $on_key->( $key )


$tk = $aetk->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 = $aetk->get_flags

$aetk->set_flags( $flags )

$canonflags = $aetk->get_canonflags

$aetk->set_canonflags( $canonflags )

$msec = $aetk->get_waittime

$aetk->set_waittime( $msec )

$str = $aetk->get_keyname( $sym )

$sym = $aetk->keyname2sym( $keyname )

( $ev, $button, $line, $col ) = $aetk->interpret_mouse( $key )

$str = $aetk->format_key( $key, $format )

$key = $aetk->parse_key( $str, $format )

$key = $aetk->parse_key_at_pos( $str, $format )

$cmp = $aetk->keycmp( $key1, $key2 )

These methods all proxy to the "Term::TermKey" object, and allow transparent use of the "AnyEvent::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.


Paul Evans <>

2018-12-31 perl v5.28.1