1 //! Demonstrates how to match on modifiers like: Control, alt, shift.
2 //!
3 //! cargo run --example event-match-modifiers
4 
5 use crossterm::event::{Event, KeyCode, KeyEvent, KeyModifiers};
6 
match_event(read_event: Event)7 fn match_event(read_event: Event) {
8     match read_event {
9         // Match one one modifier:
10         Event::Key(KeyEvent {
11             modifiers: KeyModifiers::CONTROL,
12             code,
13         }) => {
14             println!("Control + {:?}", code);
15         }
16         Event::Key(KeyEvent {
17             modifiers: KeyModifiers::SHIFT,
18             code,
19         }) => {
20             println!("Shift + {:?}", code);
21         }
22         Event::Key(KeyEvent {
23             modifiers: KeyModifiers::ALT,
24             code,
25         }) => {
26             println!("Alt + {:?}", code);
27         }
28 
29         // Match on multiple modifiers:
30         Event::Key(KeyEvent { code, modifiers }) => {
31             if modifiers == (KeyModifiers::ALT | KeyModifiers::SHIFT) {
32                 println!("Alt + Shift {:?}", code);
33             } else {
34                 println!("({:?}) with key: {:?}", modifiers, code)
35             }
36         }
37 
38         _ => {}
39     }
40 }
41 
main()42 fn main() {
43     match_event(Event::Key(KeyEvent {
44         modifiers: KeyModifiers::CONTROL,
45         code: KeyCode::Char('z'),
46     }));
47     match_event(Event::Key(KeyEvent {
48         modifiers: KeyModifiers::SHIFT,
49         code: KeyCode::Left,
50     }));
51     match_event(Event::Key(KeyEvent {
52         modifiers: KeyModifiers::ALT,
53         code: KeyCode::Delete,
54     }));
55     match_event(Event::Key(KeyEvent {
56         modifiers: KeyModifiers::ALT | KeyModifiers::SHIFT,
57         code: KeyCode::Right,
58     }));
59     match_event(Event::Key(KeyEvent {
60         modifiers: KeyModifiers::ALT | KeyModifiers::CONTROL,
61         code: KeyCode::Home,
62     }));
63 }
64