Struct termimad::EventSource
source · pub struct EventSource { /* private fields */ }
Expand description
a thread backed event listener emmiting events on a channel.
The event source enables the terminal’s raw mode and restores it on drop
Additionnally to emmitting events, this source updates a sharable event count, protected by an Arc. This makes it easy for background computation to stop (or check if they should) when a user event is produced.
The event source isn’t tick based. It makes it possible to built TUI with no CPU consumption while idle.
Implementations§
source§impl EventSource
impl EventSource
sourcepub fn new() -> Result<Self, Error>
pub fn new() -> Result<Self, Error>
create a new source with default options
If desired, mouse support must be enabled and disabled in crossterm.
sourcepub fn supports_multi_key_combinations(&self) -> bool
pub fn supports_multi_key_combinations(&self) -> bool
return true if the source is configured to combine standard keys and the terminal supports it (it requires the ‘kitty keyboard protocol’).
If true, you may receive events with multiple non-modifier keys,
eg ctrl-a-b
. If not, the same sequence of keys will be received
as two successive combinations: ctrl-a
and ctrl-b
.
Combining is not delay-based: you receive the combination as soon
as the keys are released (or as soon as the key is pressed in
most cases when mandate_modifier_for_multiple_keys
is true).
sourcepub fn with_options(options: EventSourceOptions) -> Result<Self, Error>
pub fn with_options(options: EventSourceOptions) -> Result<Self, Error>
create a new source
If desired, mouse support must be enabled and disabled in crossterm.
sourcepub fn unblock(&self, quit: bool)
pub fn unblock(&self, quit: bool)
either start listening again, or quit, depending on the passed bool. It’s mandatory to call this with quit=true at end for a proper ending of the thread (and its resources)
return a shared reference to the event count. Other threads can use it to check whether something happened (when there’s no parallel computation, the event channel is usually enough).
sourcepub fn receiver(&self) -> Receiver<TimedEvent>
pub fn receiver(&self) -> Receiver<TimedEvent>
return a new receiver for the channel emmiting events
sourcepub fn escape_sequence_receiver(&self) -> Receiver<EscapeSequence>
pub fn escape_sequence_receiver(&self) -> Receiver<EscapeSequence>
return a new receiver for the channel emmiting escape sequences
It’s a bounded channel and any escape sequence will be dropped when it’s full