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 )
  $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>

