add layout mappings for shift+key events
Signed-off-by: Sahil Yeole <sahilyeole93@gmail.com>
This commit is contained in:
		
							parent
							
								
									03d280054b
								
							
						
					
					
						commit
						d47ddac94c
					
				| @ -254,55 +254,104 @@ pub mod service { | ||||
|             (enigo::Key::RightShift, evdev::Key::KEY_RIGHTSHIFT), | ||||
|         ]); | ||||
| 
 | ||||
|         static ref KEY_MAP_LAYOUT: HashMap<char, evdev::Key> = HashMap::from( | ||||
|         static ref KEY_MAP_LAYOUT: HashMap<char, (evdev::Key, bool)> = HashMap::from( | ||||
|             [ | ||||
|                 ('a', evdev::Key::KEY_A), | ||||
|                 ('b', evdev::Key::KEY_B), | ||||
|                 ('c', evdev::Key::KEY_C), | ||||
|                 ('d', evdev::Key::KEY_D), | ||||
|                 ('e', evdev::Key::KEY_E), | ||||
|                 ('f', evdev::Key::KEY_F), | ||||
|                 ('g', evdev::Key::KEY_G), | ||||
|                 ('h', evdev::Key::KEY_H), | ||||
|                 ('i', evdev::Key::KEY_I), | ||||
|                 ('j', evdev::Key::KEY_J), | ||||
|                 ('k', evdev::Key::KEY_K), | ||||
|                 ('l', evdev::Key::KEY_L), | ||||
|                 ('m', evdev::Key::KEY_M), | ||||
|                 ('n', evdev::Key::KEY_N), | ||||
|                 ('o', evdev::Key::KEY_O), | ||||
|                 ('p', evdev::Key::KEY_P), | ||||
|                 ('q', evdev::Key::KEY_Q), | ||||
|                 ('r', evdev::Key::KEY_R), | ||||
|                 ('s', evdev::Key::KEY_S), | ||||
|                 ('t', evdev::Key::KEY_T), | ||||
|                 ('u', evdev::Key::KEY_U), | ||||
|                 ('v', evdev::Key::KEY_V), | ||||
|                 ('w', evdev::Key::KEY_W), | ||||
|                 ('x', evdev::Key::KEY_X), | ||||
|                 ('y', evdev::Key::KEY_Y), | ||||
|                 ('z', evdev::Key::KEY_Z), | ||||
|                 ('0', evdev::Key::KEY_0), | ||||
|                 ('1', evdev::Key::KEY_1), | ||||
|                 ('2', evdev::Key::KEY_2), | ||||
|                 ('3', evdev::Key::KEY_3), | ||||
|                 ('4', evdev::Key::KEY_4), | ||||
|                 ('5', evdev::Key::KEY_5), | ||||
|                 ('6', evdev::Key::KEY_6), | ||||
|                 ('7', evdev::Key::KEY_7), | ||||
|                 ('8', evdev::Key::KEY_8), | ||||
|                 ('9', evdev::Key::KEY_9), | ||||
|                 ('`', evdev::Key::KEY_GRAVE), | ||||
|                 ('-', evdev::Key::KEY_MINUS), | ||||
|                 ('=', evdev::Key::KEY_EQUAL), | ||||
|                 ('[', evdev::Key::KEY_LEFTBRACE), | ||||
|                 (']', evdev::Key::KEY_RIGHTBRACE), | ||||
|                 ('\\', evdev::Key::KEY_BACKSLASH), | ||||
|                 (',', evdev::Key::KEY_COMMA), | ||||
|                 ('.', evdev::Key::KEY_DOT), | ||||
|                 ('/', evdev::Key::KEY_SLASH), | ||||
|                 (';', evdev::Key::KEY_SEMICOLON), | ||||
|                 ('\'', evdev::Key::KEY_APOSTROPHE), | ||||
|                 ('a', (evdev::Key::KEY_A, false)), | ||||
|                 ('b', (evdev::Key::KEY_B, false)), | ||||
|                 ('c', (evdev::Key::KEY_C, false)), | ||||
|                 ('d', (evdev::Key::KEY_D, false)), | ||||
|                 ('e', (evdev::Key::KEY_E, false)), | ||||
|                 ('f', (evdev::Key::KEY_F, false)), | ||||
|                 ('g', (evdev::Key::KEY_G, false)), | ||||
|                 ('h', (evdev::Key::KEY_H, false)), | ||||
|                 ('i', (evdev::Key::KEY_I, false)), | ||||
|                 ('j', (evdev::Key::KEY_J, false)), | ||||
|                 ('k', (evdev::Key::KEY_K, false)), | ||||
|                 ('l', (evdev::Key::KEY_L, false)), | ||||
|                 ('m', (evdev::Key::KEY_M, false)), | ||||
|                 ('n', (evdev::Key::KEY_N, false)), | ||||
|                 ('o', (evdev::Key::KEY_O, false)), | ||||
|                 ('p', (evdev::Key::KEY_P, false)), | ||||
|                 ('q', (evdev::Key::KEY_Q, false)), | ||||
|                 ('r', (evdev::Key::KEY_R, false)), | ||||
|                 ('s', (evdev::Key::KEY_S, false)), | ||||
|                 ('t', (evdev::Key::KEY_T, false)), | ||||
|                 ('u', (evdev::Key::KEY_U, false)), | ||||
|                 ('v', (evdev::Key::KEY_V, false)), | ||||
|                 ('w', (evdev::Key::KEY_W, false)), | ||||
|                 ('x', (evdev::Key::KEY_X, false)), | ||||
|                 ('y', (evdev::Key::KEY_Y, false)), | ||||
|                 ('z', (evdev::Key::KEY_Z, false)), | ||||
|                 ('0', (evdev::Key::KEY_0, false)), | ||||
|                 ('1', (evdev::Key::KEY_1, false)), | ||||
|                 ('2', (evdev::Key::KEY_2, false)), | ||||
|                 ('3', (evdev::Key::KEY_3, false)), | ||||
|                 ('4', (evdev::Key::KEY_4, false)), | ||||
|                 ('5', (evdev::Key::KEY_5, false)), | ||||
|                 ('6', (evdev::Key::KEY_6, false)), | ||||
|                 ('7', (evdev::Key::KEY_7, false)), | ||||
|                 ('8', (evdev::Key::KEY_8, false)), | ||||
|                 ('9', (evdev::Key::KEY_9, false)), | ||||
|                 ('`', (evdev::Key::KEY_GRAVE, false)), | ||||
|                 ('-', (evdev::Key::KEY_MINUS, false)), | ||||
|                 ('=', (evdev::Key::KEY_EQUAL, false)), | ||||
|                 ('[', (evdev::Key::KEY_LEFTBRACE, false)), | ||||
|                 (']', (evdev::Key::KEY_RIGHTBRACE, false)), | ||||
|                 ('\\', (evdev::Key::KEY_BACKSLASH, false)), | ||||
|                 (',', (evdev::Key::KEY_COMMA, false)), | ||||
|                 ('.', (evdev::Key::KEY_DOT, false)), | ||||
|                 ('/', (evdev::Key::KEY_SLASH, false)), | ||||
|                 (';', (evdev::Key::KEY_SEMICOLON, false)), | ||||
|                 ('\'', (evdev::Key::KEY_APOSTROPHE, false)), | ||||
| 
 | ||||
|                 // Shift + key
 | ||||
|                 ('A', (evdev::Key::KEY_A, true)), | ||||
|                 ('B', (evdev::Key::KEY_B, true)), | ||||
|                 ('C', (evdev::Key::KEY_C, true)), | ||||
|                 ('D', (evdev::Key::KEY_D, true)), | ||||
|                 ('E', (evdev::Key::KEY_E, true)), | ||||
|                 ('F', (evdev::Key::KEY_F, true)), | ||||
|                 ('G', (evdev::Key::KEY_G, true)), | ||||
|                 ('H', (evdev::Key::KEY_H, true)), | ||||
|                 ('I', (evdev::Key::KEY_I, true)), | ||||
|                 ('J', (evdev::Key::KEY_J, true)), | ||||
|                 ('K', (evdev::Key::KEY_K, true)), | ||||
|                 ('L', (evdev::Key::KEY_L, true)), | ||||
|                 ('M', (evdev::Key::KEY_M, true)), | ||||
|                 ('N', (evdev::Key::KEY_N, true)), | ||||
|                 ('O', (evdev::Key::KEY_O, true)), | ||||
|                 ('P', (evdev::Key::KEY_P, true)), | ||||
|                 ('Q', (evdev::Key::KEY_Q, true)), | ||||
|                 ('R', (evdev::Key::KEY_R, true)), | ||||
|                 ('S', (evdev::Key::KEY_S, true)), | ||||
|                 ('T', (evdev::Key::KEY_T, true)), | ||||
|                 ('U', (evdev::Key::KEY_U, true)), | ||||
|                 ('V', (evdev::Key::KEY_V, true)), | ||||
|                 ('W', (evdev::Key::KEY_W, true)), | ||||
|                 ('X', (evdev::Key::KEY_X, true)), | ||||
|                 ('Y', (evdev::Key::KEY_Y, true)), | ||||
|                 ('Z', (evdev::Key::KEY_Z, true)), | ||||
|                 (')', (evdev::Key::KEY_0, true)), | ||||
|                 ('!', (evdev::Key::KEY_1, true)), | ||||
|                 ('@', (evdev::Key::KEY_2, true)), | ||||
|                 ('#', (evdev::Key::KEY_3, true)), | ||||
|                 ('$', (evdev::Key::KEY_4, true)), | ||||
|                 ('%', (evdev::Key::KEY_5, true)), | ||||
|                 ('^', (evdev::Key::KEY_6, true)), | ||||
|                 ('&', (evdev::Key::KEY_7, true)), | ||||
|                 ('*', (evdev::Key::KEY_8, true)), | ||||
|                 ('(', (evdev::Key::KEY_9, true)), | ||||
|                 ('~', (evdev::Key::KEY_GRAVE, true)), | ||||
|                 ('_', (evdev::Key::KEY_MINUS, true)), | ||||
|                 ('+', (evdev::Key::KEY_EQUAL, true)), | ||||
|                 ('{', (evdev::Key::KEY_LEFTBRACE, true)), | ||||
|                 ('}', (evdev::Key::KEY_RIGHTBRACE, true)), | ||||
|                 ('|', (evdev::Key::KEY_BACKSLASH, true)), | ||||
|                 ('<', (evdev::Key::KEY_COMMA, true)), | ||||
|                 ('>', (evdev::Key::KEY_DOT, true)), | ||||
|                 ('?', (evdev::Key::KEY_SLASH, true)), | ||||
|                 (':', (evdev::Key::KEY_SEMICOLON, true)), | ||||
|                 ('"', (evdev::Key::KEY_APOSTROPHE, true)), | ||||
|             ]); | ||||
| 
 | ||||
|         // ((minx, maxx), (miny, maxy))
 | ||||
| @ -333,16 +382,16 @@ pub mod service { | ||||
|         Ok(keyboard) | ||||
|     } | ||||
| 
 | ||||
|     fn map_key(key: &enigo::Key) -> ResultType<evdev::Key> { | ||||
|     fn map_key(key: &enigo::Key) -> ResultType<(evdev::Key, bool)> { | ||||
|         if let Some(k) = KEY_MAP.get(&key) { | ||||
|             log::trace!("mapkey {:?}, get {:?}", &key, &k); | ||||
|             return Ok(k.clone()); | ||||
|             return Ok((k.clone(), false)); | ||||
|         } else { | ||||
|             match key { | ||||
|                 enigo::Key::Layout(c) => { | ||||
|                     if let Some(k) = KEY_MAP_LAYOUT.get(&c) { | ||||
|                     if let Some((k,is_shift)) = KEY_MAP_LAYOUT.get(&c) { | ||||
|                         log::trace!("mapkey {:?}, get {:?}", &key, k); | ||||
|                         return Ok(k.clone()); | ||||
|                         return Ok((k.clone(), is_shift.clone())); | ||||
|                     } | ||||
|                 } | ||||
|                 // enigo::Key::Raw(c) => {
 | ||||
| @ -380,19 +429,23 @@ pub mod service { | ||||
|                 allow_err!(keyboard.emit(&[down_event])); | ||||
|             } | ||||
|             DataKeyboard::KeyDown(key) => { | ||||
|                 if let Ok(k) = map_key(key) { | ||||
|                 if let Ok((k, is_shift)) = map_key(key) { | ||||
|                     if is_shift { | ||||
|                         let down_event = InputEvent::new(EventType::KEY, evdev::Key::KEY_LEFTSHIFT.code(), 1); | ||||
|                         allow_err!(keyboard.emit(&[down_event])); | ||||
|                     } | ||||
|                     let down_event = InputEvent::new(EventType::KEY, k.code(), 1); | ||||
|                     allow_err!(keyboard.emit(&[down_event])); | ||||
|                 } | ||||
|             } | ||||
|             DataKeyboard::KeyUp(key) => { | ||||
|                 if let Ok(k) = map_key(key) { | ||||
|                 if let Ok((k, _)) = map_key(key) { | ||||
|                     let up_event = InputEvent::new(EventType::KEY, k.code(), 0); | ||||
|                     allow_err!(keyboard.emit(&[up_event])); | ||||
|                 } | ||||
|             } | ||||
|             DataKeyboard::KeyClick(key) => { | ||||
|                 if let Ok(k) = map_key(key) { | ||||
|                 if let Ok((k, _)) = map_key(key) { | ||||
|                     let down_event = InputEvent::new(EventType::KEY, k.code(), 1); | ||||
|                     let up_event = InputEvent::new(EventType::KEY, k.code(), 0); | ||||
|                     allow_err!(keyboard.emit(&[down_event, up_event])); | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user