# `Cauldron2D.Drafter.Client.WindowKeys`
[🔗](https://github.com/jaman/cauldron/blob/v0.3.0/cauldron_2d_drafter/lib/cauldron_2d/drafter/client/window_keys.ex#L1)

Turns a `CauldronGPU` window's key events into the events a drafter app gets from a
terminal speaking the kitty keyboard protocol with key releases
(`Drafter.Terminal.KittyKeyboard`): a press is the legacy `{:key, ...}` event followed
by `{:key_down, key, modifiers}`, a repeat the legacy event alone, a release
`{:key_up, key, modifiers}`. Shifted glyphs are those of a US keyboard.

    iex> alias Cauldron2D.Drafter.Client.WindowKeys
    iex> WindowKeys.events({:key, :down, :a, false}, [:shift])
    [{:key, :A}, {:key_down, :a, [:shift]}]
    iex> WindowKeys.events({:key, :up, :return, false}, [])
    [{:key_up, :enter, []}]

# `modifier`

```elixir
@type modifier() :: :ctrl | :alt | :shift
```

# `window_event`

```elixir
@type window_event() :: {:key, :down | :up, atom(), boolean()}
```

# `events`

```elixir
@spec events(window_event(), [modifier()]) :: [tuple()]
```

The drafter events for one window key event with `modifiers` held.

# `modifiers`

```elixir
@spec modifiers(window_event(), [modifier()]) :: [modifier()]
```

The modifiers held after `event`, from those held before it, in the order `[:ctrl, :alt, :shift]`.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
