Josh McKinney e063091312
Add is_* and as_* methods to the event enums (#949)
* Add is_ and as_ methods to the event enums

Often application code only cares about a small subset of possible
events. These methods make it simpler to write code which checks whether
an event is a particular event type or converts events into the specific
type (returning an Option).

This can help simplify some nested match blocks. E.g.:

```rust
match event {
    Event::Key(key) if key.kind == KeyEventKind::Press => { ... }
}
```

becomes:

```rust
if let Some(key) = event.as_key_press() { ... }
```

Similar flexible methods are aded across all the event enums:

- `Event::is_focus_gained()`
- `Event::is_focus_lost()`
- `Event::is_key()`
- `Event::is_mouse()`
- `Event::is_paste()`
- `Event::is_resize()`
- `Event::is_key_press()`
- `Event::as_key_press() -> Option<&KeyEvent>`
- `MouseEventKind::is_*()`
- `MouseButton::is_*()`
- `KeyEventKind::is_*()`
- `KeyEvent::is_press()`
- `KeyEvent::is_release()`
- `KeyEvent::is_repeat()`
- `KeyCode::is_*()`
- `KeyCode::is_function_key(n)`
- `KeyCode::is_char(c)`
- `KeyCode::as_char() -> Option<char>`
- `KeyCode::is_media_key(media)`
- `KeyCode::is_modifier(modifier)`
- add is_key_release() and is_key_repeat() checks
- add as_key_event()
- rename as_key_press() to as_key_press_event()
- add as_key_repeat_event()
- add as_key_release_event()
- add as_mouse_event()
- add as_paste_event()
- more tests
- update event-match and key-display examples
2025-02-02 11:31:10 +01:00
..
2024-06-16 14:44:34 +02:00
2023-08-05 15:34:27 +02:00
2022-06-06 18:10:06 +02:00

Lines of Code MIT Join us on Discord

Crossterm Examples

The examples are compatible with the latest release.

Structure

├── examples
│   └── interactive-test
│   └── event-*
│   └── stderr
File Name Description Topics
examples/interactive-test interactive, walk through, demo cursor, style, event
event-* event reading demos (async) event reading
stderr crossterm over stderr demo raw mode, alternate screen, custom output
is_tty Is this instance a tty ? tty

Run examples

$ cargo run --example [file name]

To run the interactive-demo go into the folder examples/interactive-demo and run cargo run.

License

This project is licensed under the MIT License - see the LICENSE.md file for details.