#events #input-event #ratatui #input

rat-event

ratatui event handler trait for widgets

27 releases (9 breaking)

0.26.0 Nov 1, 2024
0.16.1 Sep 11, 2024
0.14.6 Jul 2, 2024

#589 in Command-line interface

Download history 8/week @ 2024-08-08 19/week @ 2024-08-15 149/week @ 2024-08-22 203/week @ 2024-08-29 249/week @ 2024-09-05 271/week @ 2024-09-12 66/week @ 2024-09-19 61/week @ 2024-09-26 172/week @ 2024-10-03 87/week @ 2024-10-10 368/week @ 2024-10-17 37/week @ 2024-10-24 180/week @ 2024-10-31 16/week @ 2024-11-07 35/week @ 2024-11-14 189/week @ 2024-11-21

421 downloads per month
Used in 11 crates (8 directly)

MIT/Apache

52KB
844 lines

crates.io Documentation License License

This crate is a part of rat-salsa.

Rat-Event

Why?

This crate defines the trait HandleEvent to help with composability of event-handling for ratatui widgets.

Objectives are

  • work for all event-types.
  • allow for multiple handlers per widget
    • to override the key-bindings
    • to have different key-bindings for certain scenarios.
  • have a return type to indicate what state change occured.
    pub trait HandleEvent<Event, Qualifier, Return>
where
    Return: ConsumedEvent
{
    fn handle(
        &mut self,
        event: &Event,
        qualifier: Qualifier
    ) -> Return;
}

Event

Can be anything.

Qualifier

There are predefined qualifiers

  • Regular - Do what is considered 'normal' behaviour. Can vary depending on the actual state of the widget (e.g. focus)

  • MouseOnly - Splitting off mouse interaction helps when you only want to redefine the key bindings. And handling mouse events is usually more involved/complicated/specific.

  • DoubleClick - Double clicks are a bit special for widgets, often it requires a distinct return type and it's not as generally needed as other mouse behaviour.

  • Popup, Dialog - Specialized event-handlers, but they tend to popup again and again.

Return

The return type can be anything at all.

To be useful it is required to implement ConsumedEvent to indicate if the event has been handled by the widget and further event-handling can stop.

To set a baseline for the return type this crate defines the enum Outcome which can indicate if a render is necessary or not.

For interop all return types in rat-salsa are convertible to/from Outcome.

Dependencies

~7–16MB
~216K SLoC