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