1 extern crate sdl2; 2 3 use sdl2::event::Event; 4 use sdl2::keyboard::Keycode; 5 use std::collections::HashSet; 6 use std::time::Duration; 7 main() -> Result<(), String>8pub fn main() -> Result<(), String> { 9 let sdl_context = sdl2::init()?; 10 let video_subsystem = sdl_context.video()?; 11 12 let _window = video_subsystem.window("Keyboard", 800, 600) 13 .position_centered() 14 .build() 15 .map_err(|e| e.to_string())?; 16 17 let mut events = sdl_context.event_pump()?; 18 19 let mut prev_keys = HashSet::new(); 20 21 'running: loop { 22 for event in events.poll_iter() { 23 if let Event::Quit {..} = event { 24 break 'running; 25 }; 26 } 27 28 // Create a set of pressed Keys. 29 let keys = events.keyboard_state().pressed_scancodes().filter_map(Keycode::from_scancode).collect(); 30 31 // Get the difference between the new and old sets. 32 let new_keys = &keys - &prev_keys; 33 let old_keys = &prev_keys - &keys; 34 35 if !new_keys.is_empty() || !old_keys.is_empty() { 36 println!("new_keys: {:?}\told_keys:{:?}", new_keys, old_keys); 37 } 38 39 prev_keys = keys; 40 41 std::thread::sleep(Duration::from_millis(100)); 42 } 43 44 Ok(()) 45 } 46