NAME
   `Term::TermKey::Async' - terminal key input using `libtermkey' with
   `IO::Async'

SYNOPSIS
    use Term::TermKey::Async qw( FORMAT_VIM KEYMOD_CTRL );
    use IO::Async::Loop;

    my $loop = IO::Async::Loop->new();

    my $tka = Term::TermKey::Async->new(
       term => \*STDIN,

       on_key => sub {
          my ( $self, $key ) = @_;

          print "Got key: ".$self->format_key( $key, FORMAT_VIM )."\n";

          $loop->loop_stop if $key->type_is_unicode and
                              $key->utf8 eq "C" and
                              $key->modifiers & KEYMOD_CTRL;
       },
    );

    $loop->add( $tka );

    $loop->loop_forever;

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 `IO::Async::Handle', allowing it to be put
   in an `IO::Async::Loop' object and used alongside other objects in an
   `IO::Async' program. 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.

EVENTS
   The following events are invoked, either using subclass methods or CODE
   references in parameters:

 on_key $key
   Invoked when a key press is received from the terminal. The `$key'
   parameter will contain an instance of `Term::TermKey::Key' representing
   the keypress event.

CONSTRUCTOR
 $tka = Term::TermKey::Async->new( %args )
   This function returns a new instance of a `Term::TermKey::Async' object.
   It takes the following named arguments:

   term => IO or INT
           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.

PARAMETERS
   The following named parameters may be passed to `new' or `configure':

   flags => INT
           `libtermkey' flags to pass to constructor or `set_flags'.

   on_key => CODE
           CODE reference for the `on_key' event.

METHODS
 $tk = $tka->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 = $tka->get_flags
 $tka->set_flags( $flags )
 $canonflags = $tka->get_canonflags
 $tka->set_canonflags( $canonflags )
 $msec = $tka->get_waittime
 $tka->set_waittime( $msec )
 $str = $tka->get_keyname( $sym )
 $sym = $tka->keyname2sym( $keyname )
 ( $ev, $button, $line, $col ) = $tka->interpret_mouse( $key )
 $str = $tka->format_key( $key, $format )
 $key = $tka->parse_key( $str, $format )
 $key = $tka->parse_key_at_pos( $str, $format )
 $cmp = $tka->keycmp( $key1, $key2 )
   These methods all proxy to the `Term::TermKey' object, and allow
   transparent use of the `Term::TermKey::Async' 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 <[email protected]>