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