---
name: "AnyEvent::TermKey"
section: "3pm"
platform: "linux"
package: "libanyevent-termkey-perl"
version: "0.02-4"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/AnyEvent::TermKey"
---

# AnyEvent::TermKey(3pm)

terminal key input using "libtermkey" with "AnyEvent"

## NAME

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

## SYNOPSIS

```
 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;
    },
 );

 $cv->recv;
```

## 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.

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.

## CONSTRUCTOR

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

This function returns a new instance of a `"AnyEvent::TermKey"` 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.

- on\_key =\> CODE

  CODE reference to the key-event handling callback. Will be passed an instance of a `"Term::TermKey::Key"` structure:

  ```
   $on_key->( $key )
  ```

## METHODS

### $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.

## AUTHOR

Paul Evans \<leonerd@leonerd.org.uk\>
