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" identifierwhere
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.