rat_event

Macro ct_event

Source
macro_rules! ct_event {
    (key press $keychar:pat) => { ... };
    (key press ANY-$keychar:pat) => { ... };
    (key press $mod:ident-$keychar:pat) => { ... };
    (key release $keychar:pat) => { ... };
    (key release ANY-$keychar:pat) => { ... };
    (key release $mod:ident-$keychar:pat) => { ... };
    (keycode press F($code:literal)) => { ... };
    (keycode press $mod:ident-F($code:literal)) => { ... };
    (keycode press $code:ident) => { ... };
    (keycode press $mod:ident-$code:ident) => { ... };
    (keycode release F($code:literal)) => { ... };
    (keycode release $mod:ident-F($code:literal)) => { ... };
    (keycode release $code:ident) => { ... };
    (keycode release $mod:ident-$code:ident) => { ... };
    (mouse down $button:ident for $col:ident, $row:ident ) => { ... };
    (mouse down $mod:ident-$button:ident for $col:ident, $row:ident ) => { ... };
    (mouse up $button:ident for $col:ident, $row:ident ) => { ... };
    (mouse up $mod:ident-$button:ident for $col:ident, $row:ident ) => { ... };
    (mouse drag $button:ident for $col:ident, $row:ident ) => { ... };
    (mouse drag $mod:ident-$button:ident for $col:ident, $row:ident ) => { ... };
    (mouse any for $mouse:ident) => { ... };
    (mouse any $mod:ident for $mouse:ident ) => { ... };
    (mouse moved ) => { ... };
    (mouse moved for $col:ident, $row:ident) => { ... };
    (scroll $mod:ident down for $col:ident, $row:ident) => { ... };
    (scroll down for $col:ident, $row:ident) => { ... };
    (scroll down) => { ... };
    (scroll $mod:ident up for $col:ident, $row:ident) => { ... };
    (scroll up for $col:ident, $row:ident) => { ... };
    (scroll up) => { ... };
    (scroll left for $col:ident, $row:ident) => { ... };
    (scroll left) => { ... };
    (scroll right for $col:ident, $row:ident) => { ... };
    (scroll right) => { ... };
    (resized) => { ... };
    (resized for $cols:ident, $rows:ident ) => { ... };
    (focus_gained) => { ... };
    (focus_lost) => { ... };
    (paste $value:ident) => { ... };
}
Expand description

This macro produces pattern matches for crossterm events.

Example:

match event {
    ct_event!(keycode press Left) => self.move_to_prev(false),
    ct_event!(keycode press Right) => self .move_to_next(false),
    ct_event!(keycode press CONTROL-Left) => {
        let pos = self.prev_word_boundary();
        self.set_cursor(pos, false);
    }
    ct_event!(keycode press CONTROL_SHIFT-Left) => {
        let pos = self.prev_word_boundary();
        self.set_cursor(pos, true);
    }
    ct_event!(key press CONTROL-'a') => self.set_selection(0, self.len()),
    ct_event!(key press c) | ct_event!(key press SHIFT-c) => self.insert_char( * c),

    ct_event!(mouse down Left for column,row) => {
        // ...
    }
    ct_event!(mouse drag Left for column, _row) => {
        // ...
    }
    ct_event!(mouse moved) => {
        // ...
    }
}

Caveat press covers both KeyEventKind::Press and KeyEventKind::Repeat which is probably what you expect. This macro doesn’t cover the case where those two need to be distinguished.

Syntax:

"key" ("press"|"release") (modifier "-")? "'" char "'"
"keycode" ("press"|"release") (modifier "-")? keycode
"mouse" ("down"|"up"|"drag") (modifier "-")? button "for" col_id "," row_id
"mouse" "any" (modifier)? ("for" mouseevt)?
"mouse" "moved" ("for" col_id "," row_id)?
"scroll" ("up"|"down") "for" col_id "," row_id
"resized" "for" cols_id "," rows_id
"focus_gained"
"focus_lost"
"paste" identifier

where

modifier := <<one of the KeyModifiers's>> | "CONTROL_SHIFT" | "ALT_SHIFT"
char := <<some character>>
keycode := <<one of the defined KeyCode's>>
button := <<one of the defined MouseButton's>>

Caveat ct_event!(key press SHIFT-'f') doesn’t work. It must be ct_event!(key press SHIFT-'F') with capital F. This holds for any combination of SHIFT too.